distcp使用纪要

distcp主要用于在hadoop集群之间拷贝数据。


1,如果haboop版本相同,可以使用如下格式


hadoop distcp hdfs://<hdfs_address:hdfs_port>/src hdfs://<hdfs address:port>/des


2, 如果在不同版本的hadoop集群之间拷贝数据,可以使用如下格式


hadoop distcp -i hftp://<hdfs_address:http_port>>/src hdfs://<hdfs address:port>/des


对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。 这是一个只读文件系统,所以DistCp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。 源的格式是 hftp://<dfs.http.address>/<path> (默认情况dfs.http.address是 <namenode>:50070)。


注意,这个时候,需要在目标集群上运行distcp, -i是忽略错误。


注意hftp和ftp没有什么关系,它是通过http访问hdfs文件系统的协议包装,以支持不同版本之间拷贝数据。它的端口,不是dfs端口,而是http端口。


在我的应用中,一个是hadoop1.0.0集群,一个是cloudera cdh3u0集群,此时需要将hadoop1.0.0里面的数据拷贝到cloudera cdh3u0的hdfs中。因此采用hftp的distcp。


更进一步,如果只是造无逻辑关系的数据,distcp没有只写的teragen或slive快。在我的测试中,teragen和slive的混合写入,磁盘写入速度可以达到300MB/s,网络io可以达到100+MB/s。而distcp,磁盘写入为100MB/s,网络io也达到100+MB/s。


补充一下,如果是升级hdfs的hadoop版本,可以在启动时start-dfs -upgrade,这样即可以将文件系统升级至新的hadoop版本。如从hadoop-0.19 至hadoop-0.20,但是如果不是一脉相承的版本,升级也有问题。如我这边不能将hadoop-1.0.0与cloudera版本之间进行升级。


相关链接


http://hadoop.apache.org/hdfs/docs/current/hftp.html


http://www.linezing.com/blog/?p=452
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值