Hbase集群迁移
一、准备源集群A和目标集群B
10.xxx.xxx.xxx 11.xxx.xxx.xxx
xxx用真实的IP地址替换,每个IP地址一行,集群有多少台机器,就有多少行,表示将10的IP转换为11的IP。
二、在执行迁移任务的集群C开启yarn
distcp如果使用分布式模式,依赖于yarn,需要在C集群配置和启动yarn。
#yarn-daemon.sh start resourcemanager
#sbin/yarn-daemons.sh --hosts
三、通知业务执行双写
四、在集群C上准备配置文件distcp.xml
五、在源集群A上关闭和恢复compaction和split
hbase.store.stripe.compaction.minFilesL0,默认值是4
hbase.store.stripe.compaction.minFiles,默认值是3
hbase.hstore.compaction.min,默认值是3
记录这些值,用于迁移完成后的恢复.如果没有找到,就用上面给的默认值
alter '$table', CONFIGURATION => {'hbase.hstore.compaction.min' => '9999', 'hbase.store.stripe.compaction.minFilesL0' => '9999', 'hbase.store.stripe.compaction.minFiles' => '9999'},METADATA => {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy'}
六、检查是否还有正在跑的compaction、split
在所有机器上执行jstack,搜索compaction和split,如果都是waitting状态,可以认为都ok了。
七、集群复制distcp
#hadoop dfs -mkdir /idc_move
#nohup hadoop distcp -conf ./distcp.xml -m 50 -bandwidth 2 -p hdfs://$hdfscluster-A/hbase/data/default/$tablename hdfs://$hdfscluster-B/idc_move/$tablename 2>&1 > distcp.log
本地模式
如果数据量不大,可以用本地模式拷贝单线程拷贝数据,命令如下:
hadoop distcp -conf
分布式模式
分布式模式依赖于yarn,需要在第二步启动迁移任务的集群C配置和启动yarn。
#hadoop distcp -conf
参数解释:
八、在源集群A恢复compaction和split
alter '$table', CONFIGURATION => {'hbase.hstore.compaction.min' => 'x', 'hbase.store.stripe.compaction.minFilesL0' => 'y', 'hbase.store.stripe.compaction.minFiles' => 'z'},METADATA => {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy'}
其中,x、y、z是这3个参数的原始值,在步骤1中得到的。
九、在目标集群B Move所有列簇
在复制好数据的目标集群B,将hdfs的路径/$TO_LOAD_PATH/$table/region/cf*/data改成/$TO_LOAD_PATH/to_load_$table/cf*/data
#hadoop fs -mkdir -p $TO_LOAD_PATH/toload_$move_table_name/$split_table_cf
#hadoop fs -mv $TO_LOAD_PATH/$move_table_name/*/$split_table_cf/* $TO_LOAD_PATH/toload_$move_table_name/$split_table_cf/
十、在目标集群B Load数据到Hbase
#hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://$hbaserootdir/$TO_LOAD_PATH/toload_$table $table
hbase>flush $table
hbase>disable $table
hbase>enable $table
hbase>major_compact '$table'
十一、检查hbasemaster上各表的大小是否于原集群同等上下