HBase数据迁移在CentOS上的完成方法
hbase shell
对源集群的关键表进行备份(如backup 'source_table', 'backup_table'
),或直接备份HBase数据目录(/hbase/data
),防止数据丢失。export
命令将源表数据导出为SequenceFile格式,存储到HDFS路径(如hbase org.apache.hadoop.hbase.mapreduce.Export 'source_table' '/hdfs/export_path'
)。scp
或rsync
将HDFS导出路径的数据复制到目标集群的对应HDFS目录(如scp -r /hdfs/export_path user@target-centos:/hdfs/target_export_path
)。import
命令将HDFS中的数据导入目标表(如hbase org.apache.hadoop.hbase.mapreduce.Import 'target_table' '/hdfs/target_export_path'
)。hbase export 'source_table' '/hdfs/source_export_path'
,将表数据导出为SequenceFile格式到HDFS。hadoop distcp
命令将导出的数据从源集群HDFS复制到目标集群HDFS(如hadoop distcp hdfs://source-namenode:8020/source_export_path hdfs://target-namenode:8020/target_export_path
)。hbase import 'target_table' '/hdfs/target_export_path'
,将数据导入目标表。hbase-site.xml
,添加复制相关配置:<property>
<name>hbase.replication</name>
<value>true</value>
</property>
<property>
<name>hbase.replication.source.zookeeper.quorum</name>
<value>source-zookeeper1,source-zookeeper2,source-zookeeper3</value>
</property>
<property>
<name>hbase.replication.source.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
hbase-site.xml
,添加复制目标配置:<property>
<name>hbase.replication</name>
<value>true</value>
</property>
<property>
<name>hbase.replication.target.zookeeper.quorum</name>
<value>target-zookeeper1,target-zookeeper2,target-zookeeper3</value>
</property>
<property>
<name>hbase.replication.target.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
hbase shell
中执行add_peer 'peer1', 'target-zookeeper1:2181,target-zookeeper2:2181,target-zookeeper3:2181:/hbase'
,建立与目标集群的复制通道。hbase shell
中执行start_replication 'peer1'
,开始同步数据到目标集群。hbase shell status 'replication'
查看复制延迟,确保数据同步正常。hbase org.apache.hadoop.hbase.mapreduce.Export
命令将源表数据导出到HDFS(同方法2)。hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2
命令,将导出的数据转换为HFile格式(HBase原生存储格式):hbase org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2 \
-D mapreduce.job.output.key.class=org.apache.hadoop.hbase.KeyValue \
-D mapreduce.job.output.value.class=org.apache.hadoop.hbase.KeyValue \
-D mapreduce.job.output.format=org.apache.hadoop.hbase.mapreduce.TableOutputFormat \
-D hbase.table.name=target_table \
/hdfs/export_path /hdfs/hfile_output_path
LoadIncrementalHFiles
命令将HFile加载到目标表(如hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -D hbase.table.name=target_table /hdfs/hfile_output_path target_table
)。hbase shell
中,先为表开启复制属性(alter 'source_table', {NAME => 'cf', REPLICATION_SCOPE => '1'}
),再创建快照(snapshot 'source_table', 'source_table_snapshot'
)。ExportSnapshot
工具将快照复制到目标集群HDFS(如hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot source_table_snapshot -copy-from hdfs://source-namenode:8020/hbase/.hbase-snapshot/source_table_snapshot -copy-to hdfs://target-namenode:8020/hbase/.hbase-snapshot/
)。hbase shell
中执行restore_snapshot 'source_table_snapshot'
,将快照恢复为目标表。hbase master status
查看Master节点状态,hbase regionserver status
查看RegionServer节点是否正常运行。hbase shell
中执行list
查看表是否存在,scan 'target_table', {LIMIT => 10}
查看前10条数据,确认数据完整性与正确性。hbase shell
的count
命令对比源表与目标表的行数,或使用Checksum
工具(如HBase Checksum)验证数据哈希值是否一致。