distcp用于集群中数据传输解读

Java API等多种接口对HDFS访问模型都集中于单线程的存取,如果要对一个文件集进行操作,就需要编写一个程序来执行并行操作。HDFS提供了一个非常实用的程序–distcp ,用来在Hadoop文件系统中并行地复制大数据量文件。distcp一般适用于在两个HDFS集群间传送数据的情况。如果两个集群都运行在同一个Hadoop版本上,那么可以使用HDFS模式:
hadoop distcp hdfs://NameNode01/old hdfs://NEWNameNode01/new

这条命令会将第一个集群中的/old文件夹以及文件夹下的文件复制到第二个集群中的/new目录下,即在第二个集群中会以/new/old的目录结构出现。如果/new目录不存在,则系统会新建一个。也可以指定多个数据源,并且所有的内容都会被复制到目标路径。需要注意的是,源路径必须是绝对路径。即 hdfs://NameNode1/old

默认情况下,虽然distcp会跳过在目标路径上已经存在的文件,但是通过-overwirte选项可以选择对这些文件进行覆盖重写,也可以使用,-update选项仅对更新过的文件进行重写。

distcp操作有很多选项可以设置,比如忽略失败、限制文件或者复制的数据量等。直接输入指令或者不附加选项则可以查看此操作的使用说明。即distcp。具体实现时,distcp操作会被解析为一个MapReduce操作来执行,当没有Reducer操作时,复制操作被作为Map操作并行地在集群节点中运行。因此,每个文件都可被当做一个Map操作来执行复制操作。而distcp会通过执行多个文件聚集捆绑操作,尽可能地保证每个Map操作执行相同数量的数据。那么,执行distcp时,Map操作如何确定呢?由于系统需要保证每个Map操作执行的数据量是合理的,来最大化地减少Map执行的开销,而按规定,每个Map最少要执行256MB的数据量(除非复制的全部数据量小于256MB)。

比如要复制1GB的数据,那么系统就会分配4个Map任务,当数据量非常大时,就需要限制执行的Map任务数,以限制网络带宽和集群的使用率。默认情况下,每个集群的一个节点最多执行20个Map任务。

比如,要复制1000GB数据到100节点的集群中,那么系统就会分配2000个Map任务(每个节点20个),也就是说,每个节点会平均复制512MB。 还可以通过调整distcp的-m参数来减少Map任务量,比如-m 1000就意味着分配1000个Maps,每个节点分配1GB数据量。

如果尝试使用distcp进行HDFS集群间的复制,使用HDFS模式之后,HDFS运行在不同的Hadoop版本之上,复制将会因为RPC系统的不匹配而失败。为了纠正这个错误,可以使用基干HTTP的HFTP进行访问。因为任务要在目标集群中执行,所以HDFS的RPC版本需要匹配,在HFTF模式下运行的代码如下:

hadoop distcp hftp://NameNode01:50070/old  hdfs://NEWNameNode01/new

一个文件的复制

hadoop distcp  hftp://192.168.2.50:50070/user/log.txt hdfs://192.168.2.50/tmp

需要注意的是,要定义访问源的URI中NameNode的网络接口,这个接口会通过dfs.http.address的属性值设定,默认值为50070.

distcp即dist分布式,cp复制。用于在集群内部及集群之间复制数据。即分布式复制。

例子:


```clike
使用distcp.bytes.per.map控制map数量,mapreduce.job.queuename指定队列,mapreduce.job.name指定job名称
hadoop distcp -Ddistcp.bytes.per.map=1073741824 -Dmapreduce.job.queuename=hive -Dmapreduce.job.name=cpdata hdfs://cloudcluster/apps/hive/warehouse/db/data hdfs://192.168.2.16:8020/user/hive/warehouse/db/data

附录Map数目
distcp会尝试着均分需要拷贝的内容,这样每个map拷贝差不多相等大小的内容。 但因为文件是最小的拷贝粒度,所以配置增加同时拷贝(如map)的数目不一定会增加实际同时拷贝的数目以及总吞吐量。
如果没使用-m选项,distcp会尝试在调度工作时指定map的数目 为 min (total_bytes / bytes.per.map, 20 * num_task_trackers), 其中bytes.per.map默认是256MB。
建议对于长时间运行或定期运行的作业,根据源和目标集群大小、拷贝数量大小以及带宽调整map的数目。```clike
hadoop distcp -Ddistcp.bytes.per.map=1073741824 -Ddfs.client.socket-timeout=240000000 -Dipc.client.connect.timeout=40000000 -i -update  hdfs://master1:8020/foo/a hdfs://master1:8020/foo/b hdfs://master2:8020/bar/foo

不同HDFS版本间的拷贝

对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。 这是一个只读文件系统,所以distcp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。 源的格式是 hftp://<dfs.http.address>/(默认情况dfs.http.address是 :50070)。
Map/Reduce和副效应。
像前面提到的,map拷贝输入文件失败时,会带来一些副效应。
除非使用了-i,任务产生的日志会被新的尝试替换掉。
除非使用了-overwrite,文件被之前的map成功拷贝后当又一次执行拷贝时会被标记为 “被忽略”。
如果map失败了mapred.map.max.attempts次,剩下的map任务会被终止(除非使用了-i)。
如果mapred.speculative.execution被设置为 final和true,则拷贝的结果是未定义的。

distcp用于集群中数据传输解读相关推荐

  1. Hadoop集群中数据传输(涉及两个集群是非kerberos认证)

    在两个集群中数据迁移的事情在前面的过程中, 已经有了详细的介绍,这里是涉及外部的理论, 具体需要迁移的机器的配置,关注之前的博客 1.在非kerberos认证的集群中 distcp hdfs://IP ...

  2. 【DB宝44】Oracle rac集群中的IP类型简介

    文章目录 Oracle rac集群中的IP类型简介 (一)Public IP (二)Private IP (三)Virtual IP(VIP) (四)SCAN IP (五)GNS VIP (六)HAI ...

  3. Tomcat5集群中的SESSION复制详解

    Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...

  4. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  5. 《Hadoop集群与安全》一2.1 在Hadoop集群中配置操作系统

    本节书摘来自华章出版社<Hadoop集群与安全>一书中的第2章,第2.1节,作者 (美)Danil Zburivsky Sudheesh Narayanan,更多章节内容可以访问云栖社区& ...

  6. 大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken

    Docker注册表的主要目的是存储和分发Docker镜像,看似是一个相对简单的任务,但是如果遇到了像Uber这样的大规模计算集群,就很容易成为可伸缩性的瓶颈.在多区域和混合云系统的计算环境中,镜像分发 ...

  7. 集群scan_扫描k8s集群中的漏洞

    Kubei是一个漏洞扫描和CIS Docker基准测试工具,它能够对kubernetes集群进行准确,即时的风险评估.Kubei扫描Kubernetes集群中正在使用的所有图像,包括应用程序Pod和系 ...

  8. 高可用集群中的选举机制

    2019独角兽企业重金招聘Python工程师标准>>> 一个高可用的集群里,一般都会存在主节点的选举机制.这里以elasticsearch集群为例,介绍一下集群的节点选举方法. 如果 ...

  9. Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析

    文章目录 Pre 非事务性请求处理过程 源码分析 选举过程 在这里插入图片描述 Leader 失效发现 Leader 重新选举 Follow 角色变更 集群同步数据 源码解析 小结 Pre 在 Zoo ...

最新文章

  1. unity从入门到精通下载_左手Unity右手Unreal
  2. JavaScript如何获取/计算页面元素的offset?
  3. BZOJ4401:块的计数(乱搞)
  4. JAVA分代收集机制详解
  5. 前端学习(3176):react-hello-react之脚手架配置2
  6. python-日志模块-logging
  7. Flask安装首页显示
  8. python星空代码_用python画星空源代码是什么?
  9. linux 多线程服务端编程 pdf,Linux 多线程服务端编程.pdf
  10. 深度学习在视频行为识别中应用
  11. voip和rtc_VOIP的发展进化史
  12. 面包板的使用-----看板子反面即可
  13. 统计学之算术平均数、调和平均数、几何平均数、位置平均数详解
  14. NOIP2016普及组复赛——T4魔法阵
  15. VUE | key的内部原理、Vue监测数据的原理、Vue.set()和vm.$set()的使用
  16. 修改vscode左侧目录字体大小
  17. Smartbi产品军团战斗成员大阅兵
  18. POJ 3422 Kaka's Matrix Travels | 费用流
  19. gtx1660是什么级别的_GTX1660显卡首测:1060终于可以退休了!
  20. 仿途风网旅游网站/爱讯.NET程序敏捷开发框架

热门文章

  1. Python学习—2048小游戏等4个小练习
  2. topcoder srm 686 div1 -3
  3. A Simple RESTful API Service With Node.js And Koa2
  4. 跳转前暂停几秒js如何实现
  5. RequestsLibrary库入门介绍
  6. Python 系统管理利器Fabric
  7. Java大对象lob_JavaEE JDBC 读写LOB大对象
  8. 用于构建高级媒体应用程序的工具
  9. 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
  10. 关于java通过反射 获取/修改 对象属性值的一些注意事项