Distcp 分布式拷贝

(1)discp原理

DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具,和在linux上执行cp,scp实现效果是一致的,不同的是,cp是将本机的文件和目录拷贝到本机的其它地方,scp则可以将A机器的文件或者目录拷贝到B机器,而Distcp则可以实现的是A(hdfs)集群的数据拷贝到B(hdfs)集群,而分布式使得数据拷贝时,可以实现A级群的DN节点同时向B集群的DN节点发送数据,突破了单机拷贝的网卡速率限制,拷贝效率更高。

同时Distcp它使用Map/Reduce任务实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。(实际上Distcp只用到了map,没用用到reduce)。


(2)使用场景

1:数据异地灾备。

2:机房下线,数据迁移。

3:数据准实时同步。

(3)discp优势

1:支持带宽限流,可以使用bandwidth参数对distcp的每个map任务限流,同时控制map并发数量即可控制整个拷贝任务的带宽,防止拷贝任务将带宽打满,影响其它业务。

2:支持overwrite(覆盖写),update(增量写),delete(删除写)等多种源和目的校验的拷贝方式,大量数据的拷贝必然要做到数据拷贝过程中的校验,来保证源和目的数据的一致性。

(4)discp命令

  • 命令格式
hadoop distcp -Dmapred.jobtracker.maxtasks.per.job=1800000 \   #任务最大map数(数据分成多map任务)
-Dmapred.job.max.map.running=4000 \              #最大map并发
-Ddistcp.bandwidth=150000000 \                   #带宽
-Ddfs.replication=2 \                            #复制因子,两副本
-Ddistcp.skip.dir=$skipPath \                    #过滤的目录(不拷贝的目录)
-Dmapred.map.max.attempts=9 \                    #每个task最大尝试次数
-Dmapred.fairscheduler.pool=distcp \             #指定任务运行的pool
-pugp \                                          #保留属性(用户,组,权限)
-i \                                             #忽略失败的task
-skipcrccheck \                                  #忽略CRC校验(防止源,目标集群hdfs版本不一致导致任务失败。)
hdfs://clusterA:9000/AAA/data  \                 #源地址
hdfs://clusterB:9000/BBB/data                    #目标地址

(5)执行输出

[[email protected] distcp]$ hadoop distcp -Dmapred.jobtracker.maxtasks.per.job=1800000 -Dmapred.job.max.map.running=4000 -Ddistcp.bandwidth=150000000 -Ddfs.replication=2 -Dmapred.map.max.attempts=9 -Dmapred.fairscheduler.pool=distcp -pugp -i -skipcrccheck hdfs://clusterA:9000/AAA/data hdfs://clusterB:9000/BBB/data

17/06/03 17:06:38 INFO tools.DistCp: srcPaths=[hdfs://clusterA:9000/AAA/data ]
17/06/03 17:06:38 INFO tools.DistCp: destPath=hdfs://clusterB:9000/BBB/data
17/06/03 17:06:39 INFO tools.DistCp: config no skip dir
17/06/03 17:06:40 INFO tools.DistCp: sourcePathsCount=241
17/06/03 17:06:40 INFO tools.DistCp: filesToCopyCount=240
17/06/03 17:06:40 INFO tools.DistCp: bytesToCopyCount=0.0
17/06/03 17:06:40 INFO tools.DistCp: mapTasks: 1
17/06/03 17:06:40 INFO corona.SessionDriver: My serverSocketPort 36822
17/06/03 17:06:40 INFO corona.SessionDriver: My Address 10.160.115.122:36822
17/06/03 17:06:40 INFO corona.SessionDriver: Connecting to cluster manager at jobtracker:8021
17/06/03 17:06:40 INFO corona.SessionDriver: HeartbeatInterval=15000
17/06/03 17:06:40 INFO corona.SessionDriver: Got session ID job_201706031706_267270
17/06/03 17:06:40 INFO tools.DistCp: targetsize=268435456
17/06/03 17:06:40 INFO tools.DistCp: targetfiles=500
17/06/03 17:06:40 INFO corona.SessionDriver: Started session job_201706031706_267270
17/06/03 17:06:45 INFO mapred.JobClient:  map 0% reduce 0%
17/06/03 17:06:59 INFO mapred.JobClient:  map 3% reduce 0%
17/06/03 17:07:01 INFO mapred.JobClient:  map 5% reduce 0%
17/06/03 17:07:05 INFO mapred.JobClient:  map 6% reduce 0%
.....
17/06/03 17:11:15 INFO mapred.JobClient:  map 97% reduce 0%
17/06/03 17:11:17 INFO mapred.JobClient:  map 100% reduce 0%
17/06/03 17:11:25 INFO corona.SessionDriver: Stopping session driver

(6)主要参数

Hadoop 1版本



distcp [OPTIONS] <srcurl> * <desturl>

选项:

-p [rbugp]             状态

r:复制数

b:块大小

u:用户

g:组

p:权限

t:修改和访问时间

-p单独相当于-prbugpt

-i                     忽略失败

-basedir <basedir>     从<srcurl>复制文件时,使用<basedir>作为基本目录

-log <logdir>          将日志写入<logdir>

-m <num_maps>          最大并发副本数

-overwrite             覆盖目的地

-update                如果src大小与dst大小不同,则覆盖

-skipcrccheck          不要使用CRC检查来确定src是否是 不同于dest。

-copybychunk           剁碎和复制的文件

-f <urilist_uri>       将<urilist_uri>中的列表用作src列表

-filelimit <n>         将文件的总数限制为<= n

-filelimitpermap <n>   每个地图要复制的最大文件数

-sizelimit <n>         将总大小限制为<= n个字节

-sizelimitpermap <n>   每个映射要复制的最大字节数

-delete                删除dst中存在的文件,但不在src中

-mapredSslConf <f>     映射器任务的SSL配置文件名

-usefastcopy           使用FastCopy(仅适用于DFS)

注1:如果设置了-overwrite或-update,则每个源URI和目标URI保持同级一致。

例如:

hadoop distcp -p -update hdfs://A:9000//home/aa  hdfs://B:9000//home/bb

支持的通用选项是

-conf <configuration file>指定应用程序配置文件

-D <property = value>给定属性的使用值

-fs <local | namenode:port>指定一个namenode

-jt <local | jobtracker:port>指定jobtracker在corona上

-jtold <local | jobtracker:port>指定jobtracker在mapreduce上

-files <逗号分隔的文件列表>指定要复制到map reduce cluster的逗号分隔文件

-libjars <逗号分隔的jars列表> 指定要包含在类路径中的逗号分隔的jar文件。

-archives <逗号分隔的归档列表> 指定要在计算机上取消归档的逗号分隔的归档。


Hadoop 2版本



用法:distcp OPTIONS [source_path ...] <target_path>

OPTIONS

-append                    重新使用目标文件中的现有数据并追加新的如果可能,给他们的数据

-async                     应该是distcp执行阻塞

-atomic                    提交所有更改或无

-bandwidth <arg>           以MB为单位指定每个map的带宽

-delete                    从目标中删除,源文件丢失

-diff <arg>                使用snapshot diff报告来标识源和目标之间的差异

-f <arg>                   需要复制的文件列表

-filelimit <arg>          (已弃用!)限制复制到<= n的文件数

-i                         在复制期间忽略故障

-log <arg>                 DFS上的distcp执行日志文件夹保存

-m <arg>                   要用于副本的最大并发map数

-mapredSslConf <arg>       配置ssl配置文件,用于hftps://

-overwrite                 选择无条件覆盖目标文件,即使它们存在。

-p <arg>                   保留源文件状态(rbugpcaxt)

(复制,块大小,用户,组,权限,校验和类型,ACL,XATTR,时间戳)

如果-p是指定为no <arg>,然后保留复制,块大小,用户,组,权限,校验和类型和时间戳。

原始的* xattrs是源和目的地都保留路径位于/.reserved/raw层次结构中(HDF只要)。原始*

xattrpreservation是独立的-p标志。请参阅DistCp文档更多细节。

-sizelimit <arg>          (已弃用!)限制复制到<= n的文件数字节

-skipcrccheck              是否跳过源和源之间的CRC检查目标路径。

-strategy <arg>            复制策略使用。默认是分工基于文件大小

-tmp <arg>                 要用于原子的中间工作路径承诺

-update                    更新目标,仅复制missingfiles或目录

时间: 2024-08-11 07:49:57

Distcp 分布式拷贝的相关文章

[Hadoop]数据复制DistCp

1.需求 我们项目中需要复制一个大文件,最开始使用的是hadoop cp命令,但是随着文件越来越大,拷贝的时间也水涨船高.下面进行hadoop cp与hadoop distcp拷贝时间上的一个对比.我们将11.9G的文件从data_group/adv/day=20170116下所有文件复制到tmp/data_group/adv/day=20170116/文件下 1.1 查看文件大小 hadoop fs -du -s -h data_group/adv/day=20170116 11.9 G da

hadoop distcp使用

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

Hadoop DistCp 使用指南

原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/distcp.html 概述 使用方法 基本使用方法 选项 选项索引 更新和覆盖 附录 Map数目 不同HDFS版本间的拷贝 Map/Reduce和副效应 概述 DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝. 由于使用了Map/Red

HDFS的命令行操作

1.namenode –format:格式化DFS 文件系统 2.secondaryNameNode: 运行DFS的 SecondaryNameNode 进程 hadoop secondarynamenode [-checkpoint  [force]] //当 EditLog超过规定大小( 默认64MB)时,启动检查 secondarynamenode的checkpoint 过程:如果启用 force选项,则强制执行checkpoint过程. [-geteditsize]           

Hadoop性能优化点小结

最近一段时间看了许多Hadoop性能优化相关的资料,于是花了点时间整理了一下,希望给正在苦于Hadoop集群性能问题的博友们一点建议吧. 1.Hadoop在存储有输入数据的节点上运行map任务,可以获得最佳性能,称为"数据本地化优化",所以一般会设置最大分片的大小应该与块大小相同,如果分片跨越2个块的大小,必然要经过网络传输到不同的节点上读取数据. 2.适当的时候使用Combine函数.Combine的阶段是在map阶段到reduce阶段之间进行的,在某些Job中,设置Combine可

HDFS并行复制

1)Distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具. 2)distcp命令是以MR作业(没有R任务)的形式实现的,把文件和目录的列表作为M任务的输入.每一个文件是由一个M任务来拷贝的,distcp尽量把大小之和相同的各个文件导入到同一个M任务中.这样可以每个M任务拷贝的数据量大致相同. 3)集群之间的拷贝(HDFS版本相同): bash$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020 /bar/foo 这个命令会把

Apache Hadoop 2.4.1 命令参考

概述 所有的Hadoop命令都是通过bin/hadoop目录下的脚本所执行,在没有任何参数的情况下运行Hadoop脚本将打印该命令描述. Usage:Hadoop  [--config confdir] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS] hadoop有个输入选项解析框架可以利用在运行class的时候来解析参数.  COMMAND_OPTION  Description  --config confdir  包含所有的配置目录,默认目录是$

熟练掌握HDFS的Shell访问

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件 (可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的. 下面将介绍通过Shell接口对HDFS进行操作,HDFS处理文件的命令和Linux命令基本相同,这里区分大小写 目录 1.shell操作单个HDFS集群 2.s

2.HDFS操作

1. 使用命令行操作 1)4个通用命令行  <1>archive 归档文件的创建  用途:    由于hadoop的设计是为了处理大数据,理想的数据应该blocksize的倍数.namenode在启动时会将所有的元数据load到内存中   当大量小于blocksize的文件存在的时候,,不仅占用了大量的存储空间,也占用了大量的namenode内存.   archive可以将多个小文件打包成一个大文件进行存储,并且打包后的文件仍然可以通过mapreduce来操作,因为   打包后的文件由索引和存