Distcp方式

一、概述


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


二、使用DistCp

 
 DistCp最常用于在集群之间的拷贝:
hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination
上述命令会把nn1集群的/source目录下的所有文件或目录展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务,
然后每个NodeManager分别执行从nn1到nn2的拷贝操作。注意:DistCp使用绝对路径进行操作。
命令行中还可以指定多个源目录:
hadoop distcp hdfs://nn1:8020/source/a hdfs://nn1:8020/source/b hdfs://nn2:8020/destination
或者使用-f选项,从文件里获得多个源:
hadoop distcp -f hdfs://nn1:8020/srclist hdfs://nn2:8020/destination
其中srclist 的内容是:
hdfs://nn1:8020/source/a
hdfs://nn1:8020/source/b
当从多个源拷贝时,如果两个源冲突,DistCp会停止拷贝并提示出错信息, 如果在目的位置发生冲突,会根据选项设置解决。
默认情况会跳过已经存在的目标文件(比如不用源文件做替换操作)。每次操作结束时
都会报告跳过的文件数目,但是如果某些拷贝操作失败了,但在之后的尝试成功了, 那么报告的信息可能不够精确。
每个Datanode必须都能够与源宿端Datanode进行访问和交互。

每个Datanode必须都能够与源宿端Datanode进行访问和交互。
对于HDFS来说,源和目的端要运行相同版本的协议或者使用向下兼容的协议。详细请参阅“在版本之间复制”章节。拷贝完成后,建议生成
源端和目的端文件的列表,并交叉检查,来确认拷贝是否真正成功。 因为DistCp使用Map/Reduce和FileSystem
API进行操作,所以这三者或它们之间有任何问题
都会影响拷贝操作。一些Distcp命令的成功执行可以通过再次执行带-update参数的该命令来完成,
但用户在如此操作之前应该对该命令的语法很熟悉。
值得注意的是,当另一个客户端同时在向源文件写入时,拷贝很有可能会失败。 尝试覆盖HDFS上正在被写入的文件的操作也会失败。
如果一个源文件在拷贝之前被移动或删除了,拷贝失败同时输出异常 FileNotFoundException。


三、命令行选项


DistCp命令行选项如表1所示:

标识 描述 备注
-p[rbugp] Preserve
r:replication number
b: block size
u: user
g: group
p: permission
-i 忽略失败 这个选项会比默认情况提供关于拷贝的更精确的统计,
-log <logdir> 记录日志到 <logdir>
-m
<num_maps>
同时拷贝的最大数目 指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
-overwrite 覆盖目标 用户要小心使用这个选项。
-update 如果源和目标的大小不一样则进行覆盖 用户使用要小心。
-f
<urilist_uri>
用<urilist_uri> 作为源文件列表
  • 13
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值