1.需求

我们项目中需要复制一个大文件,最开始使用的是hadoop cp命令,但是随着文件越来越大,拷贝的时间也水涨船高。下面进行hadoop cp与hadoop distcp拷贝时间上的一个对比。我们将11.9G的文件从data_group/adv/day=20210526下所有文件复制到tmp/data_group/adv/day=20210526/文件下

1.1 查看文件大小

hadoop fs -du -s -h data_group/adv/day=20210526
11.9 G  data_group/adv/day=20210526

1.2 复制

hadoop distcp data_group/adv/day=20210526 \
tmp/data_group/adv/day=20210526 hadoop fs -cp data_group/adv/day=20210526 \
tmp/data_group/adv/day=20210526

1.3 对比

使用distcp命令 仅耗时1分钟;而hadoop cp命令耗时14分钟

2. 概述

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

2.1 distcp命令 输出

17/01/19 14:30:07 INFO tools.DistCp: Input Options: DistCpOptions{atomicCommit=false, syncFolder=false, deleteMissing=false, ignoreFailures=false, maxMaps=20, sslConfigurationFile='null', copyStrategy='uniformsize', sourceFileListing=null, sourcePaths=[data_group/adv/day=20210526], targetPath=tmp/data_group/adv/day=20210526}
...
17/01/19 14:30:17 INFO mapreduce.Job:  map 0% reduce 0%
17/01/19 14:30:29 INFO mapreduce.Job:  map 6% reduce 0%
17/01/19 14:30:34 INFO mapreduce.Job:  map 41% reduce 0%
17/01/19 14:30:35 INFO mapreduce.Job:  map 94% reduce 0%
17/01/19 14:30:36 INFO mapreduce.Job:  map 100% reduce 0%
17/01/19 14:31:34 INFO mapreduce.Job: Job job_1472052053889_8081193 completed successfully
17/01/19 14:31:34 INFO mapreduce.Job: Counters: 30File System CountersFILE: Number of bytes read=0FILE: Number of bytes written=1501420FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=12753350866HDFS: Number of bytes written=12753339159HDFS: Number of read operations=321HDFS: Number of large read operations=0HDFS: Number of write operations=69Job Counters Launched map tasks=17Other local map tasks=17Total time spent by all maps in occupied slots (ms)=485825Total time spent by all reduces in occupied slots (ms)=0Map-Reduce FrameworkMap input records=17Map output records=0Input split bytes=2414Spilled Records=0Failed Shuffles=0Merged Map outputs=0GC time elapsed (ms)=1634CPU time spent (ms)=156620Physical memory (bytes) snapshot=5716221952Virtual memory (bytes) snapshot=32341671936Total committed heap usage (bytes)=12159811584File Input Format Counters Bytes Read=9293File Output Format Counters Bytes Written=0org.apache.hadoop.tools.mapred.CopyMapper$CounterBYTESCOPIED=12753339159BYTESEXPECTED=12753339159COPY=17

是不是很熟悉,这就是我们经常看见到的MapReduce任务的输出信息,这从侧面说明了Distcp使用Map/Reduce实现。

3. 使用方法

3.1 集群间拷贝

DistCp最常用在集群之间的拷贝:

hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo

这条命令会把nn1集群的/foo/bar目录下的所有文件以及bar本身目录(默认情况下)存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务, 然后每个TaskTracker分别执行从nn1到nn2的拷贝操作。注意DistCp使用绝对路径进行操作。

3.2 集群内部拷贝

DistCp也可以集群内部之间的拷贝:

hadoop distcp tmp/data_group/test/a tmp/data_group/test/target

这条命令会把本集群tmp/data_group/test/a目录本身以及a目录下的所有文件拷贝到target目录下,原理同集群之间的拷贝一样。

备注

hadoop distcp tmp/data_group/test/a tmp/data_group/test/target

上述命令默认情况下是复制a目录以及a目录下所有文件到target目录下:

hadoop fs -ls -R tmp/data_group/test/target/tmp/data_group/test/target/aa
tmp/data_group/test/target/aa/aa.txt
tmp/data_group/test/target/aa/ab.txt

而有时我们的需求是复制a目录下的所有文件而不包含a目录,这时可以后面介绍的-update参数:

hadoop distcp -update tmp/data_group/test/aa tmp/data_group/test/target
...
hadoop fs -ls -R tmp/data_group/test/target/tmp/data_group/test/target/aa/aa.txt
tmp/data_group/test/target/aa/ab.txt

[Hadoop]数据复制distcp vs cp相关推荐

  1. Hadoop数据迁移工具DistCp

    DistCp 介绍 DistCp( distributed copy )是用于大型内部和集群之间拷贝的工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列 ...

  2. docker 数据共享,数据复制

    docker 提供的数据共享的方式有 docker   run  -it  -v:/dataname  image 数据复制使用 docker  cp  containerid:/dataname   ...

  3. Hadoop数据存储

    Hadoop数据存储 Hadoop能高效处理数据的基础是有其数据存储模型做支撑,典型的是Hadoop的分布式文件系统HDFS和HBase. 一.HDFS文件系统 1.0. HDFS简介 HDFS是Ha ...

  4. Hadoop数据迁移解决方案 上

    Hadoop数据迁移解决方案 数据迁移场景 冷热集群数据同步.分类存储 集群数据整体迁移 数据的准时同步 数据迁移考虑的因素 Bandwidth-带宽 带宽用多会影响到线上业务的任务运行,带宽用的少会 ...

  5. Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

    1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...

  6. 逻辑SQL Server数据复制101

    介绍 (Introduction) Data replication has been around for many decades. There are two primary types of ...

  7. 通过Gearman实现MySQL到Redis的数据复制

    通过Gearman实现MySQL到Redis的数据复制 日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. 对于变化频率非常快的数据来说,如 ...

  8. Dell shareplex 与HVR数据复制软件

    今天大体了解了一下Dell shareplex 数据复制软件,网址为:http://software.dell.com/products/shareplex/ 从该网址能够看到. shareplex作 ...

  9. 分布式系统(数据复制与一致性)

    文章目录 Replication CAP Conjecture Data-centric Consistency Models Sequential Consistency Causal Consis ...

最新文章

  1. PHP中try{}catch{}是异常处理.
  2. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
  3. 70% 产品经理都在考虑跳槽?还有哪些你不知道的行业真相
  4. 接收超时死信的死信交换机
  5. 《Node.js区块链开发》——1.6 参考
  6. OpenStack精华问答 | OpenStack是云吗?
  7. angularjs 表单校验
  8. Java笔记-对SpringBoot中CommandLineRunner的使用笔记
  9. 【gateway系列】手把手教你gateway整合nacos注册中心
  10. java 高德地图 车型比价计算_高德地图的高速公路过路费计算功能是如何实现的?有相应开放的API吗?...
  11. pythonshell窗口是什么_python与shell的3种交互方式介绍
  12. 【Nodejs开发】第2章 网站首页的布局
  13. net use 使用
  14. 程序员面试金典——1.8反转子串
  15. ios并发会造成什么问题_女生月经不调会引起什么并发症?
  16. java log4jhelper_java项目中log4j的日志,控制台跟文件日志级别都是info,为什么文件跟控制台输出的还不同呢?...
  17. 移动端学习笔记(小强测试品牌学员作品)
  18. 2. sales quote merge before
  19. 黑客攻防技术系列高清视频教程+必备工具包下载
  20. 运行bat时隐藏cmd窗口的方法(bat隐藏窗口 隐藏运行bat文件)

热门文章

  1. 什么是挂载?mount的用处在哪?(适合新手,讲解的非常好)
  2. 微信公众号分享开发过程中报错com.foxinmy.weixin4j.exception.WeixinException: 40164 invalid ip 120.79.217.10 (记录)
  3. [转]GIS火爆了??
  4. 【Bash百宝箱】shell内建命令之declare、typeset、local
  5. 1176:谁考了第k名
  6. html设置行高像素,css怎么设置行高?
  7. 游戏引擎AndEngine总结(十):单帧图片组合成为动画资源
  8. CSS高级技巧及规范
  9. 怎么找html代码js的位置,html文件里引用js文件一般放在什么位置才是最适合?
  10. Mysql中表的创建、修改与删除