Hadoop、Hive、Hbase集群间的数据迁移

一、hadoop 集群间拷贝数据:

迁移之前需要把两个集群的所有节点都互通/etc/hosts文件(重要,包括各个数据节点)

两个集群版本不相同
hadoop distcp hftp://192.168.57.73:50070/hive3/20171008 /hive3/

如果两个集群的版本相同,则可以使用hdfs协议,命令如下:
hadoop distcp hdfs://namenodeip:9000/foo hdfs://namenodeip:9000/foo

对于增量数据同步的需求,在DistCp中也得到了很好的实现.

update: 解决了新增文件目录的同步;
append: 第二参数,解决已存在文件的增量更新同步;
diff: 第三个参数解决删除或重命名文件的同步.

相同hadoop版本同步数据
hadoop distcp -skipcrccheck -update -m 20 hdfs://dchadoop002.dx:8020/user/dc/warehouse/test /user/dc/warehouse/test

不同hadoop版本同步数据
hadoop distcp -skipcrccheck -update -m 20 hftp://ns1/user/test /user/dc/test

参数:
-m 表示并发数
-skipcrccheck 跳过hdfs校验
-update 更新文件

数据直接拷贝和update之间的区别

原数据
hdfs://nn1:8020/source/first/1
hdfs://nn1:8020/source/first/2
hdfs://nn1:8020/source/second/10
hdfs://nn1:8020/source/second/20
当不使用-update或-overwrite选项时,DistCp默认会在/target下创建/first和/second目录。

hadoop distcp hdfs://nn1:8020/source/first hdfs://nn1:8020/source/second hdfs://nn2:8020/target

上述命令将在/target中生成以下内容:

hdfs://nn2:8020/target/first/1
hdfs://nn2:8020/target/first/2
hdfs://nn2:8020/target/second/10
hdfs://nn2:8020/target/second/20

当指定-update或-overwrite时,源目录的内容将复制到目标,而不是源目录本身。

distcp -update hdfs://nn1:8020/source/first hdfs://nn1:8020/source/second hdfs://nn2:8020/target

上述命令将在/ target中生成以下内容:

hdfs://nn2:8020/target/1
hdfs://nn2:8020/target/2
hdfs://nn2:8020/target/10
hdfs://nn2:8020/target/20

二、hive数据迁移

1.hive数据export到hdfs

export table hm2.helper to ‘/tmp/export/hm2/helper’;

2.集群间数据复制

需要保证原始集群目录有读权限,新的集群复制保存目录有写权限:

两个集群都要赋权
hdfs dfs -chmod -R 777 /tmp/export/*
hdfs dfs -chmod -R 777 /tmp/export/*
数据复制

hadoop distcp hdfs://qcloud-test-hadoop01:9000/tmp/export/hm2 /tmp/export

3.数据导入hive

import table hm2.helper from ‘/tmp/export/hm2/helper’;

4.只导出某一个分区

导出数据
export table hm2.helper partition(dt=‘2017-12-16’) to ‘/tmp/export/helper_2017-12-16’ ;
数据复制
hadoop distcp hdfs://dc1.xx.com:8020/tmp/export/ hdfs://dc2.xx.com:8020/tmp/export
数据导入
import table hm2.helper partition(dt=‘2017-12-16’) from ‘/tmp/export/helper_2017-12-16’

与load data [local] inpath path path2 剪切数据不同,import命令其实是从目标/tmp/export/hm2/helper复制到/user/hive/warehouse/hm2.db/helper,这时候可以把/tmp/export/hm2/helper目录删掉了。

三、hbase数据迁移

HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类:
在这里插入图片描述

Export/Import方式

源(测试)集群每个节点可以识别目标集群每个节点

源集群hbase执行

hbase org.apache.hadoop.hbase.mapreduce.Export 'hm2:test' hdfs://qcloud-hadoop02:9000/tmp/hbase_export/test

注意:这里路径需要带hdfs://nameser/path ,否则就export 到本地了,下同。

目标集群hbase执行

hbase org.apache.hadoop.hbase.mapreduce.Import 'hm2:test' hdfs://qcloud-hadoop02:9000/tmp/hbase_export/test

同步元数据

因为分区信息发生了改变,元信息没有同步。
数据导入到指定的文件夹之后,修复分区和表的元信息,(没有使用rbuy的各种脚本,0.9之后就D了,)

hbase hbck -fixTableOrphans 'hm2:test'
hbase hbck -fixMeta 'hm2:test'
hbase hbck -fixAssignments 'hm2:test'
hbase hbck -repair 'hm2:test'

总结

DistCp: 文件层的数据同步,也是我们常用的
CopyTable: 这个涉及对原表数据Scan,然后直接Put到目标表,效率较低
Export/Import: 类似CopyTable, Scan出数据放到文件,再把文件传输到目标集群作Import
Snapshot: 比较常用 , 应用灵活,采用快照技术,效率比较高
具体应用时,要结合自身表的特性,考虑数据规模、数据读写方式、实时数据&离线数据等方面,再选择使用哪种。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值