是否可以使用 distcp 直接写入最终文件?

问题描述

我正在尝试使用 distcp文件上传到 s3a。

distcp 首先写入临时文件,然后将其重命名为正确的文件名。

用户不允许更新/删除。所以我的文件大小合适,名称错误

-rw-rw-rw-   1       3738 2021-05-24 12:04 s3a://testbucket/.distcp.tmp.attempt_1621587961870_0001_m_000000_0

在 s3 上并收到错误

Error: java.io.IOException: File copy Failed: file:///testfile.json --> s3a://testbucket/testfile.json

是否可以省略重命名并直接写入最终文件名?

解决方法

我在这里找到了: https://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html

有一个参数:

-direct 

直接写入目标路径当目标是对象存储时,可用于避免潜在的非常昂贵的临时文件重命名操作

示例

hadoop distcp -direct hdfs://nn1:8020/datasets/set1 s3a://bucket/datasets/set1

遗憾的是我的 distcp 版本太旧,没有这个功能。