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前缀的数据),确认数据内容与源集群一致。