hbase、hadoop命令在Ubuntu终端可直接调用(若未安装,通过apt install hbase hadoop安装或配置环境变量)。hadoop用户(Hadoop默认用户)执行操作,避免权限不足问题(可通过sudo su - hadoop切换)。使用HBase自带的Export工具将源集群中的表数据导出为HDFS上的顺序文件(SequenceFile格式),确保数据一致性。
hbase shell命令:disable 'your_table_name'
sudo -u hadoop hbase org.apache.hadoop.hbase.mapreduce.Export your_table_name /hbase/exported_tables/your_table_name
your_table_name:源表名称;/hbase/exported_tables/your_table_name:HDFS上的导出目录(需提前创建,可通过hdfs dfs -mkdir -p命令生成)。使用hadoop distcp工具(Hadoop分布式拷贝)将源集群HDFS上的导出数据复制到目标集群的HDFS中,实现高效数据传输。
hadoop distcp hdfs://source_cluster_namenode:8020/hbase/exported_tables/your_table_name hdfs://target_cluster_namenode:8020/hbase/imported_tables/
source_cluster_namenode:源集群NameNode地址;target_cluster_namenode:目标集群NameNode地址;imported_tables需提前在目标HDFS中创建。通过HBase Shell在目标集群中创建与源表结构一致的目标表(需指定相同的列族),确保数据能正确导入。
hbase shell
create 'your_table_name', 'cf1', 'cf2' # 'cf1'、'cf2'为列族名称(需与源表一致)
exit
使用HBase自带的Import工具将目标集群HDFS中的数据导入到目标表中,恢复数据。
sudo -u hadoop hbase org.apache.hadoop.hbase.mapreduce.Import your_table_name hdfs://target_cluster_namenode:8020/hbase/imported_tables/your_table_name
list命令,确认目标表已创建。scan命令查看目标表的前10条数据,确认数据是否迁移成功:hbase shell
scan 'your_table_name', {LIMIT => 10}
count命令统计目标表的数据量,与源表数据量对比(源表可通过hbase shell的count命令提前获取):count 'your_table_name', {CACHE => 10000} # CACHE参数调整统计精度
若数据迁移成功且无需保留中间文件,可删除源集群导出目录和目标集群导入目录,释放存储空间:
# 源集群
hdfs dfs -rm -r /hbase/exported_tables/your_table_name
# 目标集群
hdfs dfs -rm -r /hbase/imported_tables/your_table_name
snapshot命令创建源表快照,使用ExportSnapshot工具将快照复制到目标集群,再恢复快照为表。步骤更简洁,且对源集群影响小(需HBase版本支持)。