在开始操作前,请确保以下条件满足:
通过Shell命令将表数据扫描并输出到本地或HDFS文件:
# 登录HBase Shell
hbase shell
# 导出表数据到HDFS(格式为HFile,适合后续Bulk Load)
export 'your_table_name', '/hdfs/export/path'
# 导出表数据到本地文件(格式为CSV,可直接查看)
scan 'your_table_name', {FORMAT => 'CSV', OUTPUT => '/local/path/output.csv'}
# 退出Shell
exit
说明:export命令会将数据保存为HFile格式(HBase原生存储格式),适合后续高效导入;scan命令则生成可读的CSV文件,便于人工检查。
适用于大规模数据导出,生成HDFS上的目录结构:
# 执行Export命令(需指定表名和HDFS输出路径)
hbase org.apache.hadoop.hbase.mapreduce.Export 'your_table_name' '/hdfs/export/path'
注意:导出的HDFS路径需提前存在,且具备写入权限。
通过快照创建表的瞬间副本,再导出快照数据:
# 登录HBase Shell,创建表快照
hbase shell
snapshot 'your_table_name', 'your_snapshot_name'
exit
# 使用ExportSnapshot工具将快照导出到目标路径(支持跨集群)
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot your_snapshot_name \
-copy-to /hdfs/snapshot/backup/path
优势:快照导出过程不影响源表读写,适合生产环境的关键数据迁移。
将Export工具导出的HDFS数据重新导入到目标表:
# 执行Import命令(需指定HDFS输入路径和目标表名)
hbase org.apache.hadoop.hbase.mapreduce.Import 'your_target_table' '/hdfs/export/path'
说明:目标表需提前创建(结构与源表一致),否则会报错。
针对海量数据(TB级),推荐使用Bulk Load方式,绕过HBase写流程,大幅提升导入速度:
# 步骤1:将源数据转换为HFile格式(需编写MapReduce程序或使用HBase工具)
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=your_target_table \
/hdfs/input/data /hdfs/output/hfiles
# 步骤2:将生成的HFile加载到目标表
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
-D mapreduce.job.name='Load HFiles' \
-D hbase.table.name=your_target_table \
/hdfs/output/hfiles your_target_table
优势:比直接Insert快10倍以上,适合大规模数据迁移。
针对少量数据(如测试数据),可使用importtsv命令快速导入:
# 登录HBase Shell
hbase shell
# 导入TSV格式文件(需指定列族和列映射)
importtsv -Dimporttsv.separator=',' \
-Dimporttsv.columns="HBASE_ROW_KEY,cf:col1,cf:col2" \
/local/path/input.tsv your_table_name
# 退出Shell
exit
说明:importtsv要求输入文件为TSV(制表符分隔)或CSV格式,且需明确指定列映射关系。
hbase.regionserver.handler.count)提升吞吐量;hbase shell的scan命令抽查目标表数据,确认完整性。以上步骤覆盖了CentOS环境下HBase数据导入导出的常见场景,可根据数据规模、一致性要求选择合适的方法。