HBase數據遷移在Debian上的操作步驟
ping
命令驗證),且均安裝了Hadoop、HBase客戶端(版本建議一致,避免兼容性問題)。Export
或Snapshot
工具),防止遷移過程中數據丟失。hbase
或hadoop
)添加到HBase的白名單(修改hbase-site.xml
中的hbase.coprocessor.master.classes
或hbase.coprocessor.region.classes
),確保其有權限訪問源集群和目標集群的HBase服務。Export/Import是HBase自帶的基于MapReduce的數據遷移工具,適用于10T以下的數據量。
/hbase/exported_table
需提前存在):sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export <table_name> /hbase/exported_table
其中,<table_name>
為源表名,/hbase/exported_table
為HDFS導出路徑。/hbase/imported_table
):hadoop distcp hdfs://source-namenode:8020/hbase/exported_table hdfs://target-namenode:8020/hbase/imported_table
其中,source-namenode
和target-namenode
分別為源、目標集群的NameNode地址。sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Import <table_name> /hbase/imported_table
導入完成后,可通過HBase Shell的scan '<table_name>', {LIMIT=>10}
命令抽樣驗證數據是否成功導入。Snapshot是HBase的輕量級快照功能,通過HDFS硬鏈接實現,幾乎不占用額外空間,對源集群性能影響極小,適合10T以上的大數據量遷移。
snapshot_name
為快照名,table_name
為目標表名):hbase> snapshot 'snapshot_name', 'table_name'
執行后,快照會存儲在源集群HDFS的/hbase/.hbase-snapshot/
目錄下。ExportSnapshot
工具將快照從源集群復制到目標集群(src_snapshot_path
為源集群快照路徑,dst_snapshot_path
為目標集群快照路徑):sudo -u hbase hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snapshot_name \
-copy-from hdfs://source-namenode:8020/hbase/.hbase-snapshot/snapshot_name \
-copy-to hdfs://target-namenode:8020/hbase/.hbase-snapshot/
可通過-mappers
(設置Map任務數,默認為4)和-bandwidth
(設置帶寬限制,單位MB/s,默認為0即不限速)參數優化遷移速度,例如-mappers 20 -bandwidth 50
表示使用20個Map任務,帶寬限制為50MB/s。hbase> restore_snapshot 'snapshot_name'
恢復完成后,可通過list
命令查看目標表是否存在,再用scan
命令驗證數據。CopyTable是HBase提供的在線同步工具,通過MapReduce從源集群讀取數據并寫入目標集群,支持同步部分數據(如指定時間范圍、RowKey范圍)。
--peer.adr
為目標集群的ZooKeeper地址,$TABLE_NAME
為目標表名):sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
-Dhbase.client.scanner.caching=200 \ # 提高Scanner緩存,減少RPC調用
-Dmapreduce.local.map.tasks.maximum=16 \ # 設置Map任務數
-Dmapred.map.tasks.speculative.execution=false \ # 關閉推測執行
--peer.adr=target-zookeeper1:2181,target-zookeeper2:2181,target-zookeeper3:2181:/hbase \
$TABLE_NAME
其中,target-zookeeper1:2181
等為目標集群的ZooKeeper地址,/hbase
為HBase的根目錄。count '<table_name>', {CACHE=>10000}
命令統計目標表的行數,與源集群的行數對比,確保數據量一致。scan '<table_name>', {LIMIT=>100, STARTROW=>'row_key_prefix'}
命令查看目標表的抽樣數據(如前100條、指定RowKey前綴的數據),確認數據內容與源集群一致。