Hadoop distcp命令(一)Hadoop distcp命令(三)

三、命令行选项

标记

描述

注意事项

-p[rbugpcaxt]

r: replication

b: block size

u: user

g: group

p: permission

c: checksum-type

a: ACL

x: XAttr

t: timestamp

当使用-update选项时,只有当文件大小不同时才会同步文件状态。如果指定了-pa选项,DistCp还是会保留权限,因为ACLs是权限的超集

-i

忽略错误

正如附录中所说的,该选项比默认情况下,对复制的统计结果更准确。该选项同样同样会从失败的拷贝中保留日志,这对于debug非常有帮助。最后,在所有的分裂策略都尝试过之前,一个map任务的失败并不会导致整个job失败。

-log <logdir>

向logdir中写入日志

DistCp为每个尝试复制的文件保留一份日志,该文件就是map的输出。如果map任务失败了,当该任务重启的时候,原日志文件不会保留。

-m<num_maps>

最大同时复制数

确定复制数据的map数量。需要注意的是map数量的增多并不会提高系统的吞吐量。

-overwrite

复写目标路径

如果映射失败,并且没有指定-i参数,拆分中的所有文件(包括复制失败的文件)都会被重新复制。如之前所述,该标记会改变源目录复制到目标目录的文件路径,因此使用的时候需要小心。

-update

如果源目录文件和目标目录文件的大小、块大小以及检查数不同就会复写。

前文提到过,该命令并不是同步操作。利用源和目标文件的大小、块大小以及检查数作为检验标准,如果这三个标准的值不同,就用源文件替换目标文件。就如前文讨论的,该标记也会改变源路径的路径描述,因此使用的时候需要非常小心。

-append

对名称相同但长度不同的文件进行增量拷贝。

如果源文件的长度比目标文件长,就比较公共部分的校验和。如果校验和相等,就使用读和追加的方式拷贝不同的部分。-append选型仅和-update一起使用,没有-skipcrccheck。

-f<urilist_url>

使用urilist_uri中的文件列表作为源列表

这个与在命令行列出所有的路径效果是一样的,urilist_uri中的路径应该为绝对路径。

-filters

文件路劲更包含一系列模式字符串,一个字符串一行,与该模式匹配的文件路径将从复制过程中排除。

支持由java.tuil.regex.Pattern指定的正则表达式。

-delete

删除存在于目标路径下但是源路径下不存在的文件。

删除操作是由FS Shell完成的,因此如果启用了垃圾桶就会用到。

-strategy{dynamic|uniformsize}

选择DistCp的复制策略。

默认情况下,使用uniforsize

-bandwidth

为每个map任务设置带宽,单位是MB/s

每个map任务都会被限制只能使用特定的带宽。这个数值也不是绝对的。map任务在复制的过程中会逐渐限制自身带宽的使用量,整个网络的带宽使用会逐渐趋向设定的值。

-atomic {-tmp<tmp_dir>}

在指定的路径下进行原子提交。

-atomic指定DistCp将元数据拷贝到临时目标位置,然后将数据整体原子式的提交到目标位置。结果就是数据要么整体都在目标位置,要么都不在。可选参数-tmp可以指定临时文件的位置。如果没有指定,就按默认值来。需要注意的是:tmp_dir必须在目标集群上。

-mapredSslConf <ssl_conf_file>

指定要与HSFTP一起使用的SSL配置文件

当hsftp协议和源一起使用的时候,可以在配置文件中指定安全相关属性,然后传递给DistCp。ssl_conf_file需要配置在类路径中。

-async

异步运行DistCp,启动hadoop的Job之后立刻退出。

会打印Hadoop的Job-id,方便追踪

-diff

使用快照差异报告比较源和目标之间的差异。

-skipcrccheck

是否跳过源和目标之间的crc校验。