distcp 命令是用于集群内部或者集群之间拷贝数据的常用命令。
#顾名思义: dist即分布式, distcp即分布式拷贝。
hadoop distcp [选项] src_url dest_url
#常用选项
-m: 表示启用多少map
-delete: 删除已经存在的目标文件,不会删除源文件。这个删除是通过FS Shell实现的。所以如果垃圾回收机制启动的话,删除的目标文件会进入trash。
-i: 忽略失败。这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
-overwrite: 覆盖目标。如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 所以这就是为什么要使用-i参数。
#新版本可以指定不同集群之间的拷贝。
1. 指定不同集群的用户名密码
distcp -m 300 -su <user,paswd> -du <user,paswd> src_url dest_url
2. 本地hadoop客户端需要设置hadoop_site.xml 中的各种信息 fs.default.name
目前猜测是因为distcp是要启动map任务的所以需要知道namenode, jobtracker等信息。
#其他选项参考
-p[rbugp] Preserve status,
r: replication number
b: block size
u: user
g: group
p: permission
-p alone is equivalent to -prbugp
-p选项修改次数不会被保留。并且当指定 -update 时,更新的状态不会 被同步,除非文件大小不同(比如文件被重新创建)。
-i Ignore failures,
-i这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
-log <logdir> Write logs to <logdir>
-log选项为每个文件的每次尝试拷贝操作都记录日志,并把日志作为map的输出。 如果一个map失败了,当重新执行时这个日志不会被保留。
-m <num_maps> Maximum number of simultaneous copies
-m选项指定了拷贝数据时map的数目。请注意并不是map数越多吞吐量越大。
-overwrite Overwrite destination
-overwrite选项如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 就像下面提到的,它会改变生成目标路径的语义,所以 用户要小心使用这个选项。
-update Overwrite if src size different from dst size
-update选项像之前提到的,这不是"同步"操作。 执行覆盖的唯一标准是源文件和目标文件大小是否相同;如果不同,则源文件替换目标文件。 像 下面提到的,它也改变生成目标路径的语义, 用户使用要小心。
-f <urilist_uri> Use list at <urilist_uri> as src list
-f选项这等价于把所有文件名列在命令行中。 urilist_uri 列表应该是完整合法的URI。
-filelimit <n> Limit the total number of files to be <= n
-sizelimit <n> Limit the total size to be <= n bytes
-delete Delete the files existing in the dst but not in src
-mapredSslConf <f> Filename of SSL configuration for mapper task
#
网友评论