MRS: HBase跨集群数据迁移

方法一:

  1. 在华为云MRS创建两个HBase集群分别为hbase01,hbase02

    1.png

  2. 登入hbase01集群后台

        source /opt/client/bigdata_env

        cd /opt/client/HBase/hbase/bin

        ./hbase shell

       #确定需要导出的表的信息如命名空间,表名

        list

          2.png

      scan ‘ns1:t1’

           3.png

       #确定需要导出的表的列族描述信息,使用”describe ‘命名空间:表名’”的语法,多个表用”;”连接

        echo "describe '命名空间:表名'" | hbase shell > ./tablenameDDL.txt

         vim ./tablenameDDL.txt 

       #将收集的信息清洗并且转换为建表语句

        ##清洗,去掉对于建表的无用信息

          1.png

        ##转换

        ###添加建表语句关键词”create”,以及向命名空间和表名添加双引号,使建表语句符合hbase建表语句规范,并且将不同表的建表语句用”;”连接起来(注意:最后一条建表语句,不需要添加”;”)

         1.png

      ###将不同表的建表语句合为一行建表语句

      Ecs

      :

      %s/\n//g

       #保存退出

       :

       wq

       最终建表语句语句如下:

         1.png

       有时会遇到下面的报错,可以在建表语句中删掉TTL的描述

         2.png

      3. HBase客户端配置

        两个集群都要执行如下配置,提前准备好访问OBS桶的AK、SK和endpoint信息或者使用ECS委托。

       说明:获取AK、SK和endpoint信息请参考如下链接。https://support.huaweicloud.com/qs-obs/obs_qs_0005.html,https://support.huaweicloud.com/qs-obs/obs_qs_0006.html

  • core-site.xml文件配置

      vim /opt/client/HBase/hbase/conf/core-site.xml

       找到fs.obs.access.key,将AK的值填到values字段中。

       找到fs.obs.secret.key,将SK的值填到value字段中。

       找到fs.obs.endpoint,将OBS对应区域的endpoint信息填到values字段中。

       找到hadoop.security.credential.provider.path,注释掉values字段。

         1.png

  • yarn-site.xml文件配置

      vim /opt/client/HBase/hbase/conf/yarn-site.xml

      找到yarn.application.classpath,在value最后增加如下值。

       ,$HADOOP_YARN_HOME/share/Hadoop/tools/lib/*

        2.png

      4. Export相应的表数据到obs

      #将需要导出的表使用以下命令,导出(每次命令只能导出一张表)

      ./hbase org.apache.hadoop.hbase.mapreduce.Export 命名空间:表名 obs文件夹路径(文件夹必须不存在)

      1.png

      #数据导出可能会出现内存占用过多,导致Namenode节点被杀死。解决方法是提高map和redudce任务的内存

       vim /opt/client/HBase/hbase/conf/mapred-site.xml

         1.png

        2.png

      5.登入hbase02集群后台

       source /opt/client/bigdata_env

       cd /opt/client/HBase/hbase/bin

       ./hbase shell

       #确定需要导入的表,是否存在

       list

         1.png

        #如果需要导入表不存在,则需要创建表,建表语句参照tablenameDDL.txt ,将相应的语句粘#贴到命令行中

        #如果需要导入的所有表都不存在,则先退出hbase shell直接以下命令进行建表

        hbase shell ./tablenameDDL.txt

       6.Import阶段

       #将需要导入的表使用以下命令,导入(每次命令只能导入一张表)

        ./hbase org.apache.hadoop.hbase.mapreduce.Import 命名空间:表名 obs路径

         1.png

        注意:数据导入完成后,将OBS上临时目录中的文件删除

      7.查看迁移的数据

        2.png

 

 

 方法二:

  1. 在华为云MRS创建两个HBase集群分别为hbase01,hbase02.为保证网络通信正常,将两个集群设置为相同的VPC,子网和安全组.     
  2. 1.png
  3. 登入hbase01集群后台

      source /opt/client/bigdata_env

       cd /opt/client/HBase/hbase/bin

       ./hbase shell

       #确定需要导出的表的信息如命名空间,表名

       list

         2.png

       scan ‘ns1:t1’

       3.png

       3. Snapshot为表打一个快照,不涉及数据移动,可以在线完成

           snapshot 'ns1:t1','snapshot1'

       4. ExportSnapshothbase1集群的表快照迁移到hbase2集群中.此操作涉及到MapReducer以及DataNode在拷贝数据的时候需要额外的带宽以及IO负载.

           hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot1 -copy-to hdfs://192.168.0.146:9820/hbase

            4.png

        5. hbase2查看快照和恢复

          list_snapshots

        5.png

        没有对应的namespace,需要创建namespace

        restore_snapshot用于恢复指定快照

           1.png

       6. 查看恢复的数据

        2.png

(完)