在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),減少寫入負載。