在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),减少写入负载。