Hadoop distcp工具

一般情况下我们使用hadoop处理数据都是单线程的操作,如果要并行拷贝很多文件,hadoop提供了一个小工具distcp,最常见的用法就是在两个hadoop集群间拷贝文件,帮助文档很详尽,这里就不一一解释了,开发环境没有两个集群,用同一个集群演示:

[html]  view plain  copy
  1. hadoop distcp hdfs://namenode:9000/user/hadoop/input hdfs://namenode:9000/user/hadoop/input1  


完整options列表:

[html]  view plain  copy
  1. distcp [OPTIONS] <srcurl><desturl>  
  2.   
  3. OPTIONS:  
  4. -p[rbugp]              Preserve status  
  5.                        r: replication number  
  6.                        b: block size  
  7.                        u: user  
  8.                        g: group  
  9.                        p: permission  
  10.                        -p alone is equivalent to -prbugp  
  11. -i                     Ignore failures  
  12. -log <logdir>          Write logs to <logdir>  
  13. -m <num_maps>          Maximum number of simultaneous copies  
  14. -overwrite             Overwrite destination  
  15. -update                Overwrite if src size different from dst size  
  16. -skipcrccheck          Do not use CRC check to determine if src is   
  17.                        different from dest. Relevant only if -update  
  18.                        is specified  
  19. -f <urilist_uri>       Use list at <urilist_uri> as src list  
  20. -filelimit <n>         Limit the total number of files to be <= n  
  21. -sizelimit <n>         Limit the total size to be <= n bytes  
  22. -delete                Delete the files existing in the dst but not in src  
  23. -mapredSslConf <f>     Filename of SSL configuration for mapper task  
看下distcp的执行结果你会发现, distcp是个MapReduce任务,但只有map没有reducer。

[html]  view plain  copy
  1. <pre>13/06/18 10:59:19 INFO tools.DistCp: srcPaths=[hftp://namenode:50070/user/hadoop/input]  
  2. 13/06/18 10:59:19 INFO tools.DistCp: destPath=hdfs://namenode:9000/user/hadoop/input1  
  3. 13/06/18 10:59:20 INFO tools.DistCp: hdfs://namenode:9000/user/hadoop/input1 does not exist.  
  4. 13/06/18 10:59:20 INFO tools.DistCp: sourcePathsCount=3  
  5. 13/06/18 10:59:20 INFO tools.DistCp: filesToCopyCount=2  
  6. 13/06/18 10:59:20 INFO tools.DistCp: bytesToCopyCount=1.7m  
  7. 13/06/18 10:59:20 INFO mapred.JobClient: Running job: job_201306131134_0009  
  8. 13/06/18 10:59:21 INFO mapred.JobClient:  map 0% reduce 0%  
  9. 13/06/18 10:59:35 INFO mapred.JobClient:  map 100% reduce 0%</pre>  
distcp把一大堆文件平均分摊开交给map任务去执行,每个文件单独一个map任务。那么默认会分成几个map合适呢?首先按256MB平均分,如果总大小低于256MB,distcp只会分给一个map任务。但如果平分的结果出现节点的map数大于20的情况,每个节点的map数就会按20计算,看下流程图:

你可以通过-m手动设置,如果为了HDFS的均衡,最好是将map设置的多一些,将block分摊开来。
如果两个集群间的版本不一致,那么使用distcp工具时候,HDFS就可能会产生错误,因为RPC系统不兼容。那么这时候你可以使用基于http的hftp协议操作,但是目标地址还必须是HDFS的,像这样:

[html]  view plain  copy
  1. hadoop distcp hftp://namenode:50070/user/hadoop/input hdfs://namenode:9000/user/hadoop/input1  
推荐用hftp的替代协议 webhdfs ,源地址和目标地址都可以使用webhdfs,可以完全兼容,如下代码:

[html]  view plain  copy
  1. hadoop distcp webhdfs://namenode:50070/user/hadoop/input webhdfs://namenode:50070/user/hadoop/input1  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值