CentOS环境下HBase数据迁移技巧分享
hbase backup create命令或导出表数据到本地),防止迁移过程中出现数据丢失。快照是HBase提供的无侵入式数据备份功能,结合ExportSnapshot工具可快速完成全量数据迁移,且不影响源集群业务。
hbase shell> snapshot 'source_table', 'snapshot_name';hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot_name -copy-to hdfs://target_namenode:port/hbase/snapshot_dir;/hbase/.hbase-snapshot/目录下,执行hbase org.apache.hadoop.hbase.mapreduce.Import target_table hdfs://target_namenode:port/hbase/snapshot_dir。若需保持源与目标集群数据实时同步(如迁移后仍需源集群继续写入),可使用HBase的Replication功能。
hbase shell> add_peer 'peer1', 'zk1:2181,zk2:2181,zk3:2181:/hbase'(替换为目标集群的ZooKeeper地址);hbase shell> alter 'source_table', {NAME => 'cf', REPLICATION_SCOPE => '1'}(REPLICATION_SCOPE=1表示开启复制);hbase shell> start_replication 'peer1';hbase shell> status 'replication'(查看“ageOfLastShippedOp”判断延迟)。对于TB级以上的海量数据,使用Hadoop的DistCp工具可并行复制HDFS中的HBase数据文件(如HFiles、WALs),大幅提升迁移速度。
hadoop distcp hdfs://source_namenode:port/hbase hdfs://target_namenode:port/hbase_new(需确保源与目标集群的Hadoop版本兼容);hbase org.apache.hadoop.hbase.mapreduce.Import工具将HFiles加载到目标表。若数据已提前整理为HFile格式(如通过MapReduce生成),可使用Bulk Load工具直接加载到目标集群,避免MapReduce作业的开销。
hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 -Dmapreduce.job.output.key.class=org.apache.hadoop.hbase.KeyValue -Dmapreduce.job.output.value.class=org.apache.hadoop.hbase.KeyValue -Dmapreduce.job.output.format=org.apache.hadoop.hbase.mapreduce.TableOutputFormat -Dhbase.table.name=target_table /input/path /output/hfiles;hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dmapreduce.job.name='Load HFiles' -Dhbase.table.name=target_table /output/hfiles target_table。hbase shell> scan 'target_table', {LIMIT=>100}(抽查部分数据),hbase hbck -j /path/to/hbase-site.xml(检查表状态)。hbase.regionserver.handler.count提升并发处理能力,优化hbase.hregion.memstore.flush.size控制MemStore大小),避免迁移后性能瓶颈。