在CentOS上进行HBase数据迁移前,需完成以下基础准备,确保迁移过程顺利:
hbase shell执行status命令验证);确保两集群间的网络互通(如防火墙开放HBase端口,默认HMaster端口为16000、RegionServer端口为16020)。hbase shell的backup命令或直接备份HDFS上的HBase数据目录/hbase/data),防止迁移过程中数据丢失。hbase shell、Export/Import工具),且客户端配置文件(hbase-site.xml)中包含正确的ZooKeeper地址(指向源集群或目标集群)。HBase Shell提供了简单的export/import命令,适合小批量数据(如单表<1TB)迁移:
my_table)导出到HDFS的/hbase/export目录:hbase shell <<EOF
export 'my_table', '/hbase/export'
exit
EOF
scp或hdfs dfs -put将导出的数据从源HDFS复制到目标HDFS(假设目标HDFS路径为/hbase/import):scp -r user@source-centos:/hbase/export/* user@target-centos:/hbase/import/
或直接通过HDFS命令传输:hdfs dfs -put /hbase/export/* hdfs://target-namenode:8020/hbase/import/
hbase shell <<EOF
import 'my_table', '/hbase/import'
exit
EOF
list查看表是否存在,再用scan 'my_table'检查数据是否完整。Export/Import工具通过MapReduce任务处理数据,适合中等规模数据(如1TB-10TB)迁移:
Export命令,将表数据导出到HDFS:hbase org.apache.hadoop.hbase.mapreduce.Export 'my_table' '/hbase/export'
Import命令,将数据导入到目标表:hbase org.apache.hadoop.hbase.mapreduce.Import 'my_table' '/hbase/import'
HBase Replication可实现源集群与目标集群的实时数据同步,适合需要持续同步的场景:
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>
peer1为对等体名称,需唯一):hbase shell <<EOF
add_peer 'peer1', 'target-zookeeper1:2181:/hbase', 'target-zookeeper2:2181:/hbase'
exit
EOF
hbase shell <<EOF
start_replication 'peer1'
exit
EOF
status 'replication'命令查看复制状态,确保数据同步正常。Bulk Load通过直接生成HFile文件并加载,绕过HBase的Write-Ahead Log(WAL),适合大规模数据(如>10TB)迁移,性能最高:
Export命令将表数据导出到HDFS(同方法1)。HFileOutputFormat2命令,将导出的数据转换为HFile格式(需指定目标表名):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.class=org.apache.hadoop.hbase.mapreduce.TableOutputFormat \
-D hbase.table.name=my_table \
/hbase/export /hbase/hfiles
LoadIncrementalHFiles命令,将HFile加载到目标集群的目标表:hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-D mapreduce.job.name='Load HFiles' \
-D hbase.table.name=my_table \
/hbase/hfiles my_table
checksum或scan命令对比源、目标集群数据。/hbase/export、/hbase/import)有读写权限;对ZooKeeper有访问权限。mapreduce.task.io.sort.mb、mapreduce.reduce.memory.mb)提高迁移速度;使用Bulk Load时,提前对目标表进行预分裂(如根据RowKey范围划分Region),减少写入负载。