distcp 從 hdfs 到 s3a 報錯: Could not find any valid local directory for s3ablock-xxxx
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNwUDM3gTOhZ2MmNTZ0IWNzYzXxMjNzETM4IzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
解決方法
在 cmd 中通過 jvm 屬性注入
hadoop distcp -Dfs.s3a.buffer.dir=/xxx hdfsxxx s3a://xxx/ooo
直接配置到 hdfs core-site.xml 檔案
fs.s3a.buffer.dir
defualt: ${hadoop.tmp.dir}/s3a
desc: Comma separated list of directories that will be used to buffer file uploads to.
此參數在用到 org.apache.hadoop.fs.s3a.S3AFileSystem 時使用,在寫 s3a 時先在本地的 local 存儲目錄(fs.s3a.buffer.dir)寫 tmp 的 s3 file block,再 upload 到 s3a 上
fs.s3a.buffer.dir 該目錄需要提前建立好并且保證啟動 nodemanager 的 user 有讀寫權限
為了避免叢集擴節點