千家信息网

hadoop distcp是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"hadoop distcp是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"hadoop distcp是什么"吧!概述distc
千家信息网最后更新 2026年11月02日hadoop distcp是什么

这篇文章主要讲解了"hadoop distcp是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"hadoop distcp是什么"吧!

概述

distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。 这篇文档会为常用distcp操作提供指南并阐述它的工作模型。

标识描述备注
Preserve
r: replication number
b: block size
u: user
g: group
p: permission
修改次数不会被保留。并且当指定 忽略失败就像在 附录中提到的,这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
记录日志到 DistCp为每个文件的每次尝试拷贝操作都记录日志,并把日志作为map的输出。 如果一个map失败了,当重新执行时这个日志不会被保留。
同时拷贝的最大数目指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
覆盖目标如果一个map失败并且没有使用 如果源和目标的大小不一样则进行覆盖像之前提到的,这不是"同步"操作。 执行覆盖的唯一标准是源文件和目标文件大小是否相同;如果不同,则源文件替换目标文件。 像 下面提到的,它也改变生成目标路径的语义, 用户使用要小心。
使用 作为源文件列表这等价于把所有文件名列在命令行中。 urilist_uri 列表应该是完整合法的URI。
更新和覆盖

这里给出一些 -update和 -overwrite的例子。 考虑一个从/foo/a 和 /foo/b 到 /bar/foo的拷贝,源路径包括:

hdfs://master1:8020/foo/a
hdfs://master1:8020/foo/a/aa
hdfs://master1:8020/foo/a/ab
hdfs://master1:8020/foo/b
hdfs://master1:8020/foo/b/ba
hdfs://master1:8020/foo/b/ab

如果没设置-update或 -overwrite选项, 那么两个源都会映射到目标端的 /bar/foo/ab。 如果设置了这两个选项,每个源目录的内容都会和目标目录的 内容 做比较。distcp碰到这类冲突的情况会终止操作并退出。

默认情况下,/bar/foo/a 和 /bar/foo/b 目录都会被创建,所以并不会有冲突。

现在考虑一个使用-update合法的操作:
distcp -update hdfs://master1:8020/foo/a \
hdfs://master1:8020/foo/b \
hdfs://master2:8020/bar

其中源路径/大小:

hdfs://master1:8020/foo/a
hdfs://master1:8020/foo/a/aa 32
hdfs://master1:8020/foo/a/ab 32
hdfs://master1:8020/foo/b
hdfs://master1:8020/foo/b/ba 64
hdfs://master1:8020/foo/b/bb 32

和目的路径/大小:

hdfs://master2:8020/bar
hdfs://master2:8020/bar/aa 32
hdfs://master2:8020/bar/ba 32
hdfs://master2:8020/bar/bb 64

会产生:

hdfs://master2:8020/bar
hdfs://master2:8020/bar/aa 32
hdfs://master2:8020/bar/ab 32
hdfs://master2:8020/bar/ba 64
hdfs://master2:8020/bar/bb 32

只有master2的aa文件没有被覆盖。如果指定了 -overwrite选项,所有文件都会被覆盖。

附录

Map数目

distcp会尝试着均分需要拷贝的内容,这样每个map拷贝差不多相等大小的内容。 但因为文件是最小的拷贝粒度,所以配置增加同时拷贝(如map)的数目不一定会增加实际同时拷贝的数目以及总吞吐量。

如果没使用-m选项,distcp会尝试在调度工作时指定map的数目 为 min (total_bytes / bytes.per.map, 20 * num_task_trackers), 其中bytes.per.map默认是256MB。

建议对于长时间运行或定期运行的作业,根据源和目标集群大小、拷贝数量大小以及带宽调整map的数目。

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是 :50070)。

Map/Reduce和副效应

像前面提到的,map拷贝输入文件失败时,会带来一些副效应。

  • 除非使用了-i,任务产生的日志会被新的尝试替换掉。

  • 除非使用了-overwrite,文件被之前的map成功拷贝后当又一次执行拷贝时会被标记为 "被忽略"。

  • 如果map失败了mapred.map.max.attempts次,剩下的map任务会被终止(除非使用了-i)。

  • 如果mapred.speculative.execution被设置为 final和true,则拷贝的结果是未定义的。

感谢各位的阅读,以上就是"hadoop distcp是什么"的内容了,经过本文的学习后,相信大家对hadoop distcp是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

拷贝 文件 目标 大小 数目 日志 内容 任务 情况 集群 尝试 同时 路径 不同 源文件 目录 学习 运行 合法 这不 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 中国互联网科技工作委员会毛军 科技企业和互联网企业 上海互联网科技有限公司 互联网科技集团 互联网 卓越科技 互联网科技革命 世界互联网领先科技成果 互联网科技logo设计 国外互联网科技网站 移动互联网科技股 来此购互联网科技有限公司 玉溪互联网科技怎么选 坤平互联网科技 银川新华互联网科技学校联系电话 乌鲁木齐新华智原互联网科技学校 互联网金融科技元年 互联网金融科技公司的优势 中国互联网公司的科技投入 每日互联网科技新闻 广州百单互联网科技有限公司 科技和互联网公司 科技创新互联网企业 互联网高科技股票 中国最先进互联网科技公司 承德科技产业互联网发展 烟台灵鸽互联网科技有限公司 九思连强互联网电子科技有限公司 萌小萌互联网科技河南有限公司 易租星互联网科技有限公司
0