【HBase十二】HFile存储的是一个列族的数据

在HBase中,每个HFile存储的是一个表中一个列族的数据,也就是说,当一个表中有多个列簇时,针对每个列簇插入数据,最后产生的数据是多个HFile,每个对应一个列族,通过如下操作验证

1. 建立一个有两个列族的表

create 'members','colfam1','colfam2'

2. 在members表中的colfam1中插入50*50*50条数据,然后flush到磁盘,通过UI观察MemStore和HFile个数的变化

for i in '0'..'50' do for j in '0'..'50' do for k in '0'..'50' do put 'members', "row-colfam1-#{i}#{j}#{k}", "colfam1:#{j}#{k}", "#{j}#{k}" end end end

做完如上操作, members表的HFile数目不变,但是MemStore占用23.3M空间

4. 将members表数据flush到磁盘

flush 'members'

做完如上操作, members表的HFile数目增1,但是MemStore占用10几K空间,即MemStore的内存空间被释放

5.

5.1 在members表中的colfam1和colfam2中分别插入1条数据

for i in '100'..'100' do for j in '100'..'100' do for k in '100'..'100' do put 'members', "row-colfam1-#{i}#{j}#{k}", "colfam1:#{j}#{k}", "#{j}#{k}" end end end

for i in '100'..'100' do for j in '100'..'100' do for k in '100'..'100' do put 'members', "row-colfam2-#{i}#{j}#{k}", "colfam2:#{j}#{k}", "#{j}#{k}" end end end

做完如上操作, members表的HFile数目不变,因为数据量小,MemStore的变化也基本没有

5.2 将members表数据flush到磁盘

flush 'members'

做完如上操作,即使数据量很小,members表的HFile数目也是增加了两个,可见HBase为每个列簇创建了一个HFile文件

 Num.Store vs Num.Storefiles

在HBase的UI,有两个统计指标,Num.Store和Num.Storefiles,其中Num.Store表示Store的数目,一个Column Family对应一个Store;Num.Storefile对应着这个表的所有HFile的数目,每个Storefile根据其对应的ColumnFamily不同,分属于不同的Store,但是HBase UI上看不出来,每个Store有几个Storefiles

 http://hadoop.master:16301/rs-status?filter=all#memoryStats

 http://hadoop.master:16301/rs-status?filter=all#regionStoreStats

猜你喜欢

转载自bit1129.iteye.com/blog/2202990