xargs命令不支持具有多个输入文件的hadoop put命令

uajslkp6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(392)

hadoop支持使用下面的命令将多个本地文件复制到hdfs

hadoop fs -put localfile1 localfile2 /user/hadoop/hdfsdir

我们需要复制数十万个文件,由于内存问题,我们想用xargs在chuncks中复制。
但下面的命令给出错误。

echo "localfile1 localfile2" |xargs  -t -I {} hadoop fs -put {} /user/hadoop/hdfsdir

它给 put: unexpected URISyntaxException error .
在这里 localfile1 以及 localfile2 是我当前工作目录中的文件。
单个文件命令正在工作,即。

echo "localfile1" |xargs  -t -I {} hadoop fs -put {} /user/hadoop/hdfsdir
ecr0jaav

ecr0jaav1#

可能太晚了,但我在尝试做同样的事情时遇到了你的问题。
我遵循本教程编写了以下命令,一次上载所有texttiles 4:

find . -name '*.textile' -print0 |xargs  -0 -P 4 -I % hadoop fs -put % /user/myName/

-print0:执行空分隔令牌列表
-0:所以xarg可以识别空分隔符
-n:好几个PUT并行运行
-i:所以每个令牌都包含在hadoop fs-put令牌中
我认为这种方法不尊重文件夹结构,这意味着本地系统的文件夹结构不会保留在集群上。另外,如果你碰巧有多个文件夹中的文件名,你会得到文件已经存在。

相关问题