Hadoop 之 Distcp官网介绍和注意事项

Hadoop 之 Distcp方式

官网:https://hadoop.apache.org/docs/r2.10.0/hadoop-distcp/DistCp.html

一、概述

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

DistCp版本2(分布式副本)是用于大型集群间/集群内复制的工具。它使用MapReduce来实现其分发,错误处理和恢复以及报告。它将文件和目录的列表扩展为映射任务的输入,每个任务都会复制源列表中指定的文件分区。

二:参数

Hadoop 之 Distcp官网介绍和注意事项_第1张图片

参数,官网介绍的已经是很完整的

三:经常问的问题

1.为什么-update不能在预先存在的目标目录下创建父源目录?

-update和-overwrite 的行为在本文档的“用法”部分中进行了详细说明。简而言之,如果将任一选项与预先存在的目标目录一起使用,则将复制每个源目录的内容,而不是源目录本身。此行为也与旧版DistCp实现一致。

2.新的DistCp在语义上与旧版DistCp有何不同?

使用旧版DistCp复制时,在复制过程中跳过的文件过去也具有不变的文件属性(权限,所有者/组信息等)。现在,即使跳过了文件副本,这些文件也已更新。
在旧版DistCp中,未在目标上创建源路径输入中的空根目录。现在已创建。

3.为什么新的DistCp使用的maps比旧的DistCp更多?
旧版DistCp的工作原理是,在启动复制作业之前,先确定需要实际复制哪些文件到目标,然后启动复制所需的任意数量的地图。因此,如果需要跳过大多数文件(例如,因为它们已经存在),则需要的映射将更少。结果,设置所花费的时间(即在M / R作业之前)要更长。新的DistCp仅计算源路径的内容。它不会尝试筛选出可以跳过哪些文件。在M / R作业运行之前,该决定将推迟。这要快得多(相对于执行时间),但是启动的映射数将在-m选项中指定,如果未指定,则为20(默认)。指定更多地图时,

4.为什么DistCp不能运行得更快? 当前,DistCp的最小工作单元是一个文件。即,一个文件仅由一个地图处理。将映射数增加到超过文件数的值将不会产生性能优势。启动的地图数量将等于文件数量。

5.为什么DistCp的内存不足? 如果从源路径复制的单个文件/目录的数量非常大(例如1,000,000个路径),则DistCp可能会在确定复制路径列表时用尽内存。这不是新的DistCp实现所独有的。要解决此问题,请考虑更改-Xmx JVM堆大小参数,如下所示:

bash $ export HADOOP_CLIENT_OPTS =“-Xms64m -Xmx1024m”
 bash $ hadoop distcp / source / target

四:注意

1.在HDFS版本之间复制

为了在Hadoop的两个不同主要版本之间(例如1.X和2.X之间)进行复制,通常将使用WebHdfsFileSystem。与以前的HftpFileSystem不同,由于webhdfs可用于读取和写入操作,因此DistCp可以在源群集和目标群集上运行。远程集群指定为webhdfs:// 。(当使用SSL保护webhdfs时,请使用“ swebhdfs:// ”方案)。

在Hadoop集群的相同主要版本之间(例如,在2.X和2.X之间)进行复制时,请使用hdfs协议以获得更好的性能。

2.DistCp命令的安全设置

安全设置揭示了DistCp命令是运行在源集群上还是运行在目标集群上。一般认为,如果一个集群是安全的,另一个集群是不安全的,则Dist
Cp应该从安全集群运行,否则可能存在与安全相关的问题。
将数据从安全集群复制到非安全集群时,DistCp客户端需要设置如下配置:


ipc.client.fallback-to-simple-auth-allowed
true

将数据从安全集群复制到安全集群时,core-site.xml文件中需要设置如下配置:


hadoop.security.auth_to_local

Maps kerberos principals to local user names

3.-skipcrccheck

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

4.Map sizing

新的DistCp还提供了“动态”大小映射的策略,与较慢的节点相比,较快的数据节点可复制更多字节。使用-strategy dynamic(在体系结构中说明),而不是将固定的源文件集分配给每个映射任务,而是将文件分成几组。集的数量超过地图的数量,通常是2-3倍。每个映射都会拾取并复制块中列出的所有文件。当一个块用完时,将获取并处理一个新的块,直到不再剩余任何块为止。

通过不将源路径分配给固定映射,与较慢的节点相比,较快的映射任务(即数据节点)能够消耗更多的块,从而复制更多的数据。尽管此分布不均匀,但对于每个映射器的容量而言,这是公平的。

动态策略由DynamicInputFormat实现。在大多数情况下,它都能提供卓越的性能。

这个参数一定要设置上,有很大的优化

路之慢慢,唯坚易破,初出茅庐,何畏言惧

你可能感兴趣的:(Hadoop 之 Distcp官网介绍和注意事项)