首先明白大合并和小合并是指什么。
小合并:删除一条记录,就会在该记录上打上标记,被打上标记的记录就成了墓碑记录,该记录使用get和scan查询不到,但还是在HFile中。只有进行大合并的时候才会删除HFile中的墓碑记录。
大合并:指定region的一个列族的所有HFile.合并完成后,这个列族的所有HFile文件合并成一个HFile文件,可以在shell中手动触发,但该动作相当耗资源。小合并是将多个小的HFile文件内容读取出来合并生成一个大的HFile,把新文件设置成激活状态,然后删除小的HFile
大合并和小合并都是在region的内部进行的,并不涉及到region之间的合并。merge_region是指将两个region合并为一个region。
hbase的合并有四个命令:
compact, compact_rs, major_compact, merge_region.
compact 对所有region的每一个region进行合并或者将一个region的row合并成一个单独的region。
在合并的时候,可以设置合并的类型:NORMAL或者MOB,默认是NORMAL。
使用示例:
1 合并一个table的所有的region
compact 'ns1:t1'
compact 't1'
2 合并整个的region
compact 'r1'
3 仅仅合并某个region的一个列族
compact 'r1','f1'
4 合并某个table中的一个列族
compact 't1','f1'
5 使用MOB类型合并table
compact 't1',nil,'MOB'
6 使用MOB类型合并table中的一个列族
compact 't1','c1','MOB'
compact_rs 对某个regionserver上面的所有的region中的每个region进行合并
使用示例
1 合并一个regionserver上面的所有的region
compact_rs 'host187.example.com,60020'
compact_rs 'host187.example.com,60020,1289493121758'
2 将一个regionserver上所有的region进行合并,true表示大合并
compact_rs 'host187.example.com,60020,1289493121758', true
major_compact
合并示例
1 对table中所有的region的每个region进行合并
major_compact 't1'
major_compact 'ns1:t1'
2 对单独的某个region进行合并
major_compact 'r1'
3 对某个region的一个单独的列族进行合并
major_compact 'r1', 'f1'
4 对某个table的一个单独的列族进行合并
major_compact 'ns1:t1', 'f1'
5 使用MOB类型合并table
major_compact 't1', nil, 'MOB'
6 使用MOB类型合并table中的一个列族
major_compact 'ns1:t1', 'f1', 'MOB'
merge_region
合并两个region。使用'true'这个第三个可选的参数将强制进行合并。
该命令主要是由专家使用。使用方法和另外三个命令也有很大区别。
ENCODED_REGIONNAME是FULL_REGIONNAME的哈希后缀。如果FULL_REGIONNAME是
"TestTable,0094429456,1289497600452.527db22f95c8a9e0116f0cc13c680396."
那么ENCODED_REGIONNAME就是"527db22f95c8a9e0116f0cc13c680396".
使用示例:
hbase> merge_region 'FULL_REGIONNAME', 'FULL_REGIONNAME'
hbase> merge_region 'FULL_REGIONNAME', 'FULL_REGIONNAME', true
hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true