版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載换衬。http://www.reibang.com/p/a296bbdc8d5f
前言:大合并,就是將一個Region下的所有StoreFile合并成一個StoreFile文件瞳浦,在大合并的過程中废士,之前刪除的行和過期的版本都會被刪除术幔。大合并一般一周做一次湃密,由于執(zhí)行期間會對整個集群的磁盤和帶寬帶來較大影響诅挑,一般建議設(shè)置hbase.hregion.majorcompaction設(shè)為0來禁用該功能泛源,并在夜間集群負(fù)載較低時通過定時任務(wù)腳本來執(zhí)行。
#!/bin/bash
#author:Wang Kuan
#date:2019-05-16
#major_compaction is use short I/O and bandwidth consumption for low latency of subsequent queries
metrics_status="metrics_status.txt"
metrics_file_count="metrics_file_count.txt"
metrics_filecount_gt="metrics_fiflecount_gc.txt"
metrics_filecount_sorted="metrics_filecount_sorted.txt"
tables_need_compact="tables_need_conpact.txt"
rm -rf $metrics_status $metrics_file_count $metrics_filecount_gt $metrics_filecount_sorted $tables_need_compact
compact_num=10
storefile_num=40
echo "status 'detailed'" | hbase shell > $metrics_status? #查看hbase集群詳細(xì)信息
sed -i '1, 12d' $metrics_status? ? ? ? ? ? ? ? ? ? ? ? ? ? #篩選掉1-12行登入信息
sed -i '$d' $metrics_status? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #篩選掉最后一行 没龙,不同版本最后幾行輸出內(nèi)容不同
sed -i '$d' $metrics_status
awk -F '[",=]+' '{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #一個或多個" , =
? if(NR%2==1)
? ? print $2 > "'$metrics_file_count'"? ? ? ? ? ? ? ? ? ? #奇數(shù)行輸出region名
? else
? ? print $4 > "'$metrics_file_count'"? ? ? ? ? ? ? ? ? ? #偶數(shù)行輸出storefiles數(shù)
}' $metrics_status
sed -i 'N; s/\n/ /' "$metrics_file_count"? ? ? ? ? ? ? ? ? #換行符替換為空格
awk '{if ($2 >= '$storefile_num') print $0 > "'$metrics_filecount_gt'"}' $metrics_file_count? ? ? #篩選出大于40個storefile的region
for i in `cat $metrics_filecount_gt | awk '{print $1}'|sort -n|uniq`
do
? ? cat $metrics_filecount_gt|grep $i|sort | tail -1 >> $tables_need_compact
done
sort -r -n -k 2 $tables_need_compact -o $tables_need_compact? ? ? #按storefile數(shù)量排序后重新寫入
for i in `head -$compact_num $tables_need_compact|awk '{print $1}'`
do
? ? echo "major_compact '$i'"|hbase shell
done