• HBase 数据迁移/备份方法


    HBase 数据迁移/备份方法

    1、Hadoop层 DistCp(迁移)

    Hadoop层的数据迁移主要用到DistCp(Distributed Copy), 官方描述是:DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。

    demo:

    hadoop distcp hdfs://src-hadoop-address:9000/table_name hdfs://dst-hadoop-address:9000/table_name

    使用(先把文件传到临时目录,最后再目的集群上load表):

    hadoop distcp

    -Dmapreduce.job.name=distcphbase

    -Dyarn.resourcemanager.webapp.address=mr-master-ip:8088

    -Dyarn.resourcemanager.resource-tracker.address=mr-master-dns:8093

    -Dyarn.resourcemanager.scheduler.address=mr-master-dns:8091

    -Dyarn.resourcemanager.address=mr-master-dns:8090

    -Dmapreduce.jobhistory.done-dir=/history/done/

    -Dmapreduce.jobhistory.intermediate-done-dir=/history/log/

    -Dfs.defaultFS=hdfs://hbase-fs/

    -Dfs.default.name=hdfs://hbase-fs/

    -bandwidth 20

    -m 20

    hdfs://src-hadoop-address:9000/region-hdfs-path

    hdfs://dst-hadoop-address:9000/tmp/region-hdfs-path

    注意点:

    • 源端集群到目的端集群策略是通的

    • hadoop/hbase版本需一致


    2、CopyTable

    HBase数据迁移的工具之一,以表级别进行数据迁移。与DistCp不同的是,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响

    demo:

    hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=dst_table src_table

    注意:

    0.94.x版本之前是不支持snapshot


    3、Export/Import方式

    将HBase表数据转换成Sequence File并dump到HDFS,也涉及Scan表数据,与CopyTable相比,还多支持不同版本数据的拷贝,同时它拷贝时不是将HBase数据直接Put到目标集群表,而是先转换成文件,把文件同步到目标集群后再通过Import到线上表。

    分为Export/Import两阶段:

    # output_hdfs_path可以直接是目标集群的hdfs路径,也可以是原集群的HDFS路径,如果需要指定版本号,起始结束时间

    hbase org.apache.hadoop.hbase.mapreduce.Export <tableName> <ouput_hdfs_path> <versions> <starttime> <endtime>

     

    # 如果原数据是存在原集群HDFS,此处input_hdfs_path可以是原集群的HDFS路径,如果原数据存在目标集群HDFS,则为目标集群的HDFS路径

    hbase org.apache.hadoop.hbase.mapreduce.Import <tableName> <input_hdfs_path>


    4、Snapshot

    snapshot的应用场景和CopyTable类似,利用快照技术效率较高。

    demo:

    step1、创建快照:

    hbase> snapshot 'src_table', 'snapshot_src_table' #查看创建的快照,可用list_snapshots命令 hbase> list_snapshots #如果快照创建有问题,可以先删除,用delete_snapshot命令 hbase >delete_snapshot 'snapshot_src_table'

    step2、数据迁移:(HDFS层的操作)

    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot_src_table -copy-from hdfs://src-hbase-root-dir/hbase -copy-to hdfs://dst-hbase-root-dir/hbase -mappers 20 -bandwidth 20


    5、Spark/MR 任务

    如导出特定规则数据,以上方式皆不能满足需求,只能手动编写任务从HBase 读写表数据。


    6、总结

    DistCp: 文件层的数据同步,也是我们常用的

    CopyTable: 这个涉及对原表数据Scan,然后直接Put到目标表,效率较低

    Export/Import: 类似CopyTable, Scan出数据放到文件,再把文件传输到目标集群做 Import

    Snapshot: 比较常用 , 应用灵活,采用快照技术,效率比较高

    Spark/MR任务:以上不能满足的特殊需求则用此方法

    具体应用时,要结合自身表的特性,考虑数据规模、数据读写方式、实时数据&离线数据等方面,再选择使用哪种。


    参考

    https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html

  • 相关阅读:
    如果一切需要重学,2014年应该学哪些技术?
    LINUX 更新
    LINUX学习
    判断设备是笔记本,还是台式机
    DUILIB 实现微信气泡聊天效果
    OC学习1
    DUILIB 背景贴图
    DUILIB CDialogBuilder 使用问题
    my english dream
    oracle 函数
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/13639361.html
Copyright © 2020-2023  润新知