markdown hadoop distcp的用法实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown hadoop distcp的用法实践相关的知识,希望对你有一定的参考价值。

# hadoop distcp的用法实践
本次实践的hadoop版本为`2.7.2`
## 语法及参数说明
## 实践
### 初始化数据
```
hdfs dfs -mkdir -p /test/src/dir
touch a b c
hdfs dfs put a /test/src
hdfs dfs put b /test/src
hdfs dfs -put c /test/src/dir
```
### distcp到一个不存在目录
```
hadoop distcp /test/src /test/dst
hdfs dfs -ls /test/dst
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:48 /test/dst/a
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:48 /test/dst/b
drwxr-xr-x   - nubia hadoop          0 2018-01-17 18:48 /test/dst/dir
```
此时好比linux在`cp`一个目录

如果已经distcp过(比如执行半半的失败了),再distcp一次的话,其不会报错,
能够保证最终结果与源目录的结果是一致的,不过并不清楚对已存在的文件是覆盖还是跳过,
(我原来一直比较担心对于已经存在的文件会不会导致最终的失败,经过试验,distcp能比较好的处理)

### distcp到一个存在目录
```
hadoop distcp /test/src /test/dst
hdfs -ls /test/dst
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:25 /test/dst/a
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:25 /test/dst/b
drwxr-xr-x   - nubia hadoop          0 2018-01-17 18:48 /test/dst/dir
drwxr-xr-x   - nubia hadoop          0 2018-01-17 18:34 /test/dst/src
```
此时会把src目录(而非其下的子文件)复制到dst的目录下

### 使用-update参数
```
# 清空目录
hdfs dfs -rm -r /test/dst/*
hadoop distcp -update /test/src /test/dst
hdfs dfs -ls /test/dst
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:49 /test/dst/a
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:49 /test/dst/b
drwxr-xr-x   - nubia hadoop          0 2018-01-17 18:49 /test/dst/dir
```
此时需要注意的是,加上`-update`后,不是把src这个目录复制到目标目录下,而是src这个目录下的子文件及子目录

不过如果目标目录不存在会怎么样
```
hdfs dfs -rm -r /test/dst
hadoop distcp -update /test/src /test/dst
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:52 /test/dst/a
-rw-r--r--   3 nubia hadoop          0 2018-01-17 18:52 /test/dst/b
drwxr-xr-x   - nubia hadoop          0 2018-01-17 18:52 /test/dst/dir
```
### 使用-overwrite参数
结果可参考`-update`,不同的是`-overwrite`会强制覆盖目标文件夹下同名文件名的文件,
而`-update`只有在时间或长度不同时才会覆盖

以上是关于markdown hadoop distcp的用法实践的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop DistCp 使用指南

Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误

Hadoop官网翻译(Distcp)

S3N 和 S3A distcp 在 Hadoop 2.6.0 中不起作用

hadoop distcp 报错: Could not find any valid local directory for s3ablock-xxxx

hadoop distcp 报错: Could not find any valid local directory for s3ablock-xxxx