文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hadoop 数据迁移用法详解

2024-12-03 03:17

关注
  1. hadoop distcp hdfs://qcloud-hadoop02:9000/hive/warehouse/hm2.db/helper/dt=2018-10-17 /data 

说明:我们这里是apache hadoop 到cdh数据迁移,这个命令仍然是可以用的。

一般用法

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

配置当前集群主节点到老集群各个节点的ssh免密登陆(可选)

由于老集群是HDP2.7.1,新集群是cdh5.8.5,版本不同,不能用hdfs协议直接拷贝,需要用http协议 即不能用:distcp hdfs://src:50070/foo /user而要用:distcp hftp://src:50070/foo /user最终的命令为:

  1. hadoop distcp hftp://192.168.57.73:50070/hive3/20171008 /hive3/ 

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

  1. hadoop distcp hdfs://namenodeip:9000/foo hdfs://namenodeip:9000/foo 

由于迁移数据运行了mr任务,对集群资源有一定的消耗

DistCp优势特性

1 带宽限流

DistCp是支持带宽限流的,使用者可以通过命令参数bandwidth来为程序进行限流,原理类似于HDFS中数据Balance程序的限流.

2 增量数据同步

对于增量数据同步的需求,在DistCp中也得到了很好的实现.通过update,append和diff2个参数能很好的解决.官方的参数使用说明:

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

这里需要额外解释一下diff的使用需要设置2个不同时间的snapshot进行对比,产生相应的DiffInfo.在获取快照文件的变化时,只会选择出DELETE和RENAME这2种类型的变化信息.

相同hadoop版本同步数据

  1. hadoop distcp -skipcrccheck -update -m 20 hdfs://dchadoop002.dx:8020/user/dc/warehouse/test /user/dc/warehouse/test 

不同hadoop版本同步数据

  1. hadoop distcp -skipcrccheck -update -m 20 hftp://ns1/user/test /user/dc/test 

参数:

  1. -m 表示并发数 
  2.  
  3. -skipcrccheck 跳过hdfs校验 
  4.  
  5. -update 更新文件 

理源路径的方式与默认值不同,有些细节需要注意。这里给出一些 -update和 -overwrite的例子。考虑从/source/first/ 和 /source/second/ 到 /target/的拷贝,源路径包括:

  1. hdfs://nn1:8020/source/first/1 
  2. hdfs://nn1:8020/source/first/2 
  3. hdfs://nn1:8020/source/second/10 
  4. hdfs://nn1:8020/source/second/20 

当不使用-update或-overwrite选项时,DistCp默认会在/target下创建/first和/second目录。因此将在/target之前先创建目录。

从而:

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

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

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

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

从而:

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

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

  1. hdfs://nn2:8020/target/1 
  2. hdfs://nn2:8020/target/2 
  3. hdfs://nn2:8020/target/10 
  4. hdfs://nn2:8020/target/20 

如果设置了这两个选项,每个源目录的内容都会和目标目录的内容做比较。如果两个源文件夹都包含一个具有相同名称的文件(例如“0”),那么这两个源文件将在目的地映射到同一个目录:/target/0。DistCp碰到这类冲突的情况会终止操作并退出。现在,请考虑以下复制操作:

  1. distcp hdfs://nn1:8020/source/first hdfs://nn1:8020/source/second hdfs://nn2:8020/target 

其中源路径/大小:

  1. hdfs://nn1:8020/source/first/1 32 
  2.  
  3. hdfs://nn1:8020/source/first/2 32 
  4.  
  5. hdfs://nn1:8020/source/second/10 64 
  6.  
  7. hdfs://nn1:8020/source/second/20 32 

和目的路径/大小:

  1. hdfs://nn2:8020/target/1 32 
  2. hdfs://nn2:8020/target/10 32 
  3. hdfs://nn2:8020/target/20 64 

会产生:

  1. hdfs://nn2:8020/target/1 32 
  2. hdfs://nn2:8020/target/2 32 
  3. hdfs://nn2:8020/target/10 64 
  4. hdfs://nn2:8020/target/20 32 

文件“1”因为文件长度和内容匹配而被跳过。文件“2”被复制,因为它不存在/target中。因为目标文件内容与源文件内容不匹配,文件“10”和文件“20”被覆盖。如果使用-update 选项,文件“1”也被覆盖。

3 高效的性能

执行的分布式特性

高效的MR组件

hive数据迁移

1.hive数据export到hdfs

  1. export table hm2.helper to '/tmp/export/hm2/helper'

如下:

  1. hive> export table hm2.helper to '/tmp/export/hm2/helper'
  2. Copying data from file:/app/data/hive/tmp/scratchdir/ce4c15d9-6875-40ed-add4-deedd75a4a92/hive_2018-10-26_10-58-21_552_8465737459112285307-1/-local-10000/_metadata 
  3. Copying file: file:/app/data/hive/tmp/scratchdir/ce4c15d9-6875-40ed-add4-deedd75a4a92/hive_2018-10-26_10-58-21_552_8465737459112285307-1/-local-10000/_metadata 
  4. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=13/msgtype=helper 
  5. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper 
  6. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00001 
  7. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00003 
  8. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00004 
  9. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00005 
  10. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00006 
  11. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00007 
  12. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00008 
  13. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00009 
  14. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00010 
  15. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00011 
  16. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00012 
  17. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00013 
  18. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00014 
  19. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00015 
  20. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=13/msgtype=helper 
  21. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=13/msgtype=helper/part-m-00002 
  22. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=14/msgtype=helper 
  23. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00000 
  24. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00002 
  25. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00006 
  26. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00016 
  27. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-22/hour=08/msgtype=helper 
  28. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-22/hour=08/msgtype=helper/part-m-00006 
  29. Copying data from hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-22/hour=09/msgtype=helper 
  30. Copying file: hdfs://nameser/hive/warehouse/hm2.db/helper/dt=2018-06-22/hour=09/msgtype=helper/part-m-00000 
  31. OK 
  32. Time taken: 1.52 seconds 

2.集群间数据复制

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

  1. 两个集群都要赋权 
  2. hdfs dfs -chmod -R 777 /tmp/export/* 
  3. hdfs dfs -chmod -R 777 /tmp/export/* 

数据复制

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

3.数据导入hive

在源hive show create table tbName显示建表语句,用语句在目标hive建表,然后倒入数据:

  1. import table hm2.helper from '/tmp/export/hm2/helper'

成功:

  1. hive> import table hm2.helper from '/tmp/export/hm2/helper'
  2. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=13/msgtype=helper 
  3. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper 
  4. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00001 
  5. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00003 
  6. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00004 
  7. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00005 
  8. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00006 
  9. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00007 
  10. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00008 
  11. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00009 
  12. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00010 
  13. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00011 
  14. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00012 
  15. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00013 
  16. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00014 
  17. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-12/hour=14/msgtype=helper/part-m-00015 
  18. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=13/msgtype=helper 
  19. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=13/msgtype=helper/part-m-00002 
  20. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=14/msgtype=helper 
  21. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00000 
  22. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00002 
  23. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00006 
  24. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-13/hour=14/msgtype=helper/part-m-00016 
  25. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-22/hour=08/msgtype=helper 
  26. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-22/hour=08/msgtype=helper/part-m-00006 
  27. Copying data from hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-22/hour=09/msgtype=helper 
  28. Copying file: hdfs://qcloud-cdh01.2144.com:8020/tmp/export/hm2/helper/dt=2018-06-22/hour=09/msgtype=helper/part-m-00000 
  29. Loading data to table hm2.helper partition (dt=2018-06-12, hour=13, msgtype=helper) 
  30. Loading data to table hm2.helper partition (dt=2018-06-12, hour=14, msgtype=helper) 
  31. Loading data to table hm2.helper partition (dt=2018-06-13, hour=13, msgtype=helper) 
  32. Loading data to table hm2.helper partition (dt=2018-06-13, hour=14, msgtype=helper) 
  33. Loading data to table hm2.helper partition (dt=2018-06-22, hour=08, msgtype=helper) 
  34. Loading data to table hm2.helper partition (dt=2018-06-22, hour=09, msgtype=helper) 
  35. OK 
  36. Time taken: 4.966 seconds 

这样就可以在新的hive中执行:

  1. select count(*) from hm2.helper; 

只导出某一个分区

  1. 导出数据 
  2. export table hm2.helper partition(dt='2017-12-16'to '/tmp/export/helper_2017-12-16' ; 
  3. 数据复制 
  4. hadoop distcp hdfs://dc1.xx.com:8020/tmp/export/ hdfs://dc2.xx.com:8020/tmp/export 
  5. 数据导入 
  6. 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目录删掉了。

==可以使用hive export/import 进行hive数据的批量迁移,本实验测试了text,orc,parquet,分区表,并测试了不同版本的导入导出。理论上hive导入导出的数据迁移不受版本,数据格式以及表的限制,可以得出结论可以适应hive export/import进行任何hive数据的迁移==

参考链接:https://blog.csdn.net/u9999/article/details/78830818

hbase数据迁移

HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类:

从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类。实际中用了hbase层的Export / Import方法,这里介绍一下。

Export/Import方式

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

源集群hbase执行

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

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

目标集群hbase执行

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

或者

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

源集群hbase执行

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

目标集群hbase执行

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

同步元数据

因为分区信息发生了改变,元信息没有同步。

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

  1. hbase hbck -fixTableOrphans 'hm2:test' 
  2. hbase hbck -fixMeta 'hm2:test' 
  3. hbase hbck -fixAssignments 'hm2:test' 
  4. hbase hbck -repair 'hm2:test' 

总结

上文把HBase数据迁移过程中常用的一些方法作了一个大概介绍,总结起来就四点:

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

资料

 

https://www.cnblogs.com/felixzh/p/5920153.html http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html

 

来源:Java大数据与数据仓库内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯