1、简介
2、使用方式
3、常见问题
-3.1、需要远程复制的文件没有关闭,还处于写的状态
-3.2、带宽问题
1、简介
DistCP是Apache Hadoop上下文中的Distributed Copy(分布式拷贝)的缩写。它基本上是一个工具,可以使用在我们需要复制大量的数据/文件在集群内/集群设置。 在后台,DisctCP使用MapReduce分发和复制数据,这意味着操作分布在集群中的多个可用节点上。这使得它更有效和有效的复制工具。
DistCP获取文件列表(在多个文件的情况下),并在多个Map任务之间分发数据,这些映射任务将分配给它们的数据部分复制到目标。
2、使用方式
hadoop distcp [选项] src_url dest_url
常用选项
-m 表示启用多少map
-delete:删除已经存在的目标文件,不会删除源文件。这个删除是通过FS Shell实现的。所以如果垃圾回收机制启动的话,删除的目标文件会进入trash。
-i:忽略失败。这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。
-overwrite:覆盖目标。如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 所以这就是为什么要使用-i参数。
指定不同集群的用户名密码
distcp -m 300 -su -du src_url dest_url
其他选项:
-p[rbugp] Preserve status
r: replication number
b: block size
u: user
g: group
p: permission
-p alone is equivalent to -prbugp
-i Ignore failures
-log Write logs to
-m Maximum number of simultaneous copies
-overwrite Overwrite destination
-update Overwrite if src size different from dst size
-f Use list at as src list
-filelimit Limit the total number of files to be <= n
-sizelimit Limit the total size to be <= n bytes
-delete Delete the files existing in the dst but not in src
-mapredSslConf Filename of SSL configuration for mapper task
例:
保持block size
hadoop distcp -pb /user/hive/warehouse/catalog_sales/ee435eda333de93f-921275b700000000_36230343_data.0.parq /block-test/test.parq
3、常见问题
3.1、需要远程复制的文件没有关闭,还处于写的状态
异常信息
Caused by: java.io.IOException: Mismatch in length of source:hdfs://xxx and target:hdfs://xxx
原因:需要远程复制的文件没有关闭,还处于写的状态。
解决方案:
1) 检查文件状态
hdfs fsck hdfs://10.10.10.10:80/flume/xxx/xxxxxxxx/day=2018-03-12/xxx.2018-03-12.1520841735508
Connecting to namenode via http://xxx:50070/fsck?ugi=hadoop&path=%2Fflume%2Fxxx%xxx%2Fday%3D2018-03-12%xxx.2018-03-12.1520841735508
FSCK started by hadoop (auth:SIMPLE) from /139.5.108.244 for path /flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508 at Tue Mar 13 16:12:39 CST 2018
Status: HEALTHY
Total size: 0 B (Total open files size: 420 B)
Total dirs: 0
Total files: 0
Total symlinks: 0 (Files currently being written: 1)
Total blocks (validated): 0 (Total open file blocks (not validated): 1)
Minimally replicated blocks: 0
Over-replicated blocks: 0
Under-replicated blocks: 0
Mis-replicated blocks: 0
Default replication factor: 3
Average block replication: 0.0
Corrupt blocks: 0
Missing replicas: 0
Number of data-nodes: 8
Number of racks: 1
FSCK ended at Tue Mar 13 16:12:39 CST 2018 in 2 milliseconds
The filesystem under path '/flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508' is HEALTHY
2) 关闭文件
hdfs debug recoverLease -path hdfs://10.10.10.10:8020/flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508
可能会失败:
recoverLease returned false.
Giving up on recoverLease for hdfs://10.10.10.10:8020/flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508 after 1 try.
尝试再次关闭:
recoverLease SUCCEEDED on hdfs://10.10.10.10:8020/flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508
3)再次检查状态
Connecting to namenode via http://xxx:50070/fsck?ugi=hadoop&path=%2Fflume%2Fxxx%xxx%2Fday%3D2018-03-12%xxx.2018-03-12.1520841735508
FSCK started by hadoop (auth:SIMPLE) from /xx.xx.xx.xx for path /flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508 at Tue Mar 13 16:19:57 CST 2018
.Status: HEALTHY
Total size: 838 B
Total dirs: 0
Total files: 1
Total symlinks: 0
Total blocks (validated): 1 (avg. block size 838 B)
Minimally replicated blocks: 1 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 3.0
Corrupt blocks: 0
Missing replicas: 0 (0.0 %)
Number of data-nodes: 8
Number of racks: 1
FSCK ended at Tue Mar 13 16:19:57 CST 2018 in 2 milliseconds
The filesystem under path '/flume/xxx/xxx/day=2018-03-12/xxx.2018-03-12.1520841735508' is HEALTHY
4) 再次复制
hadoop distcp -bandwidth 15 -m 50 -pb hdfs://10.10.10.10:8020//flume/xxx/xxx/day=2018-03-12 /flume/xxx/xxx/day=2018-03-12
3.2、流量超标问题
问题:迁移数据时没有设置,一次性迁移了好几个月的数据,导致流量超标。
解决:
指定带宽限制(-bandwidth),同时拷贝的最大数目(-m)。
hadoop distcp -bandwidth 15 -m 50 -pb ...