hbase数据迁移(跨网络跨集群跨版本)

需求:将云服务器上的hbase数据迁移到本地物理服务器。

云服务器环境:Linux  2.6.32-696.1.1.el6.x86_64     Hadoop 2.6.0-cdh5.11.0(集群)   HBase 1.2.0-cdh5.11.0

物理服务器环境:Linux 3.10.0-957.el7.x86_64     Hadoop 2.7.6(单机)    HBase 2.0.4

总数据量大约46T

  • 在hdfs上建立copy临时目录   

             hadoop fs -mkdir /copy

        

  • 用MR方法将hbase数据库dt_gpsdata里的数据导入/copy/dt_gpsdata目录下

           hbase org.apache.hadoop.hbase.mapreduce.Export dt_gpsdata /copy/dt_gpsdata针对较小的数据表使用

       

       

      注:数据量较大时强烈建议在使用hbase的 export以及import工具时使用时间区间+ key前缀,对集群造成的压力会比较小。

     Usage: Export [-D <property=value>]* <tablename> <outputdir> [<versions> [<starttime> [<endtime>]] [^[regex pattern] or             [Prefix] to filter]]

例:从dt_gpsdata表中导出2018-01-01至2018-02-01的数据(中间记得加上version)

    hbase org.apache.hadoop.hbase.mapreduce.Export dt_gpsdata /copy/dt_gpsdata 1 1514736000000 1517414400000

      

      

  •  将dt_gpsdata表文件从hdfs下载到本地(数据量较大时找个空间充足的目录,不然get的时候报错)

       hadoop fs -get /copy/dt_gpsdata

     

       如遇到以下情况,表示文件太大,所在的服务器内存空间不足:  

  • 在目标服务器执行(scp命令),将文件拷贝到本地服务器

       scp -r /mdata/hdfs/dt_gpsdata [email protected]:/data/hdfs/dt_gpsdata 

  • 将dt_gpsdata表文件从本地上传到hdfs

       hadoop fs -put dt_gpsdata /copy/dt_gpsdata

       

  • 用MR方法将hbase数据库dt_gpsdata里表文件导入dt_gpsdata表中(将表提前创建,注意表结构要一致,否则导入异常)

       hbase org.apache.hadoop.hbase.mapreduce.Import dt_gpsdata /copy/dt_gpsdata

  • 进入hbase的shell页面,查看dt_gpsdata表数据 

OK,数据成功导入。迁移数据中可能用到的命令:

hadoop dfs -mkdir /copy    创建目录

hadoop dfs -ls /copy     查看目录

hadoop dfs -rm -r -skipTrash /copy  删除目录不经回收站

hbase shell    进入hbase shell命令

create 'dt_gpsdata',{NAME=>'gpsdata',VERSIONS=>1}   hbase创建表

truncate 'dt_gpsdata'     hbase清空表

发布了7 篇原创文章 · 获赞 9 · 访问量 723

猜你喜欢

转载自blog.csdn.net/weixin_41684005/article/details/89316917