阅读量:2
CentOS下HBase数据导入导出实操指南
一、常用工具与适用场景
- Export/Import:通过 MapReduce 将表导出到 HDFS 再导入目标表,支持按版本、时间范围导出,适合一次性迁移或带时间窗口的增量迁移。导入时可选择普通 put/delete 或生成 HFile 后走 Bulk Load 提升吞吐。
- CopyTable:基于 Scan + Put/Delete API 在表间/集群间复制数据,可指定 rowkey 区间、时间区间、列族,适合在线小中体量迁移或持续近实时同步(跨集群需 –peer.adr)。
- Snapshot + ExportSnapshot:对表做轻量快照,再用 ExportSnapshot 将快照拷贝到目标集群 HDFS,在目标集群恢复;停机影响小,适合大表与跨机房/跨集群迁移。
- DistCp:直接拷贝底层 HDFS 文件,适合停机窗口内的整表/整库迁移;在线业务需先停写,恢复后注意 region 分配与元数据修复。
- Replication:基于 WAL 的主从复制,适合持续同步与容灾;不适合一次性离线迁移。
- Bulk Load(HFile):先生成 HFile 再加载到目标表,绕过写路径,适合海量数据的高速导入。
二、标准操作步骤
-
Export/Import(含时间窗口与Bulk Load)
- 在源集群导出到 HDFS
hbase org.apache.hadoop.hbase.mapreduce.Export[ ] - 目标集群若使用 Bulk Load:用 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 hbase.table.name=\ - 在目标集群加载 HFile
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ -D hbase.table.name=\ - 若不走 Bulk Load,直接导入
hbase org.apache.hadoop.hbase.mapreduce.Import
说明:Export 支持按版本/时间范围导出;Import 支持以 Bulk 方式加载 HFile 提升性能。
- 在源集群导出到 HDFS
-
CopyTable(同/跨集群)
- 同集群表间复制(可改名)
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name= - 跨集群复制(需目标集群 ZK)
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \ –peer.adr=zk1:2181:/hbase,zk2:2181:/hbase - 常用参数:–startrow/–stoprow、–starttime/–endtime、–families、–all.cells(连删除标记一起复制)。
- 同集群表间复制(可改名)
-
Snapshot + ExportSnapshot(跨集群迁移)
- 源集群创建快照
hbase shell
snapshot ‘’, ‘
’ - 将快照拷贝到目标 HDFS(跨集群)
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \ -snapshot\ -copy-from hdfs://src-nn:8020/hbase \ -copy-to hdfs://dst-nn:8020/hbase \ -mappers - 目标集群恢复快照到新表或原表
hbase shell
clone_snapshot ‘’, ‘ ’
或 restore_snapshot(覆盖原表,谨慎)
说明:快照轻量、停机影响小;跨集群拷贝依赖 HDFS 网络与权限。
- 源集群创建快照
三、异构数据源与文件导入导出
- TSV/CSV 文件导入 HBase(ImportTsv)
- 准备 TSV 文件(列顺序与表列族/列对应),在 HBase Shell 建表后执行:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \ -Dimporttsv.separator=‘,’ \ -Dimporttsv.columns=HBASE_ROW_KEY,cf:col1,cf:col2 \ - 适合初始批量导入与小中体量数据装载。
- 准备 TSV 文件(列顺序与表列族/列对应),在 HBase Shell 建表后执行:
- 从 HBase 导出到关系型数据库
- 方案 A:用 Export 导出到 HDFS,再由 Sqoop export 写入 MySQL/PG/Oracle;
- 方案 B:通过 Apache Phoenix 执行 SQL 查询并导出为 CSV,再入库;
- 方案 C:编写 MapReduce/Spark 作业自定义转换与导出。
说明:Sqoop/Phoenix 提供更高层抽象,适合ETL 场景。
四、性能与一致性要点
- 性能优化
- 提升扫描缓存:-Dhbase.client.scanner.caching=500(视内存与延迟权衡);
- 提高并发:-Dmapreduce.local.map.tasks.maximum=16(单机本地 MR 时),或保证足够 YARN 容器;
- 关闭预测执行:-Dmapred.map.tasks.speculative.execution=false,避免重复写入;
- 目标表预分裂(按预估 rowkey 分布)与合理 Region 数量,可显著提升 Bulk Load/CopyTable 速度;
- 大表优先 Snapshot/ExportSnapshot + Bulk Load,减少在线写入压力。
- 一致性与限制
- CopyTable/Export/Import 基于 Scan,导出期间写入的数据可能不被包含;用 starttime/endtime 做时间窗口导出,或先停写再迁移;
- DistCp 拷贝底层文件需停写,恢复后用 hbck -fixAssignments -fixMeta 修复分配与元数据;
- Replication 为最终一致性,适合容灾与持续同步,不适合一次性迁移;
- 跨版本导入:如从 0.94 导出到 0.96+,Import 需加 -Dhbase.import.version=0.94。
五、快速命令清单
- 导出到 HDFS:hbase org.apache.hadoop.hbase.mapreduce.Export
[ ] - 导入(普通):hbase org.apache.hadoop.hbase.mapreduce.Import
- 导入(Bulk Load):先 HFileOutputFormat2 生成 HFile,再 LoadIncrementalHFiles
- CopyTable(跨集群):hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk:2181:/hbase
- Snapshot 迁移:snapshot ‘
’,‘ ’; hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot-copy-from-copy-to -mappers ; 目标端 clone_snapshot ‘ ’,‘’ - 校验:hbase shell 中 list、scan ‘
’,{LIMIT=>10}、count ‘
’
以上就是关于“centos hbase数据导入导出”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm