【问题标题】:Xargs command not supports hadoop put command with multiple input filesXargs 命令不支持具有多个输入文件的 hadoop put 命令
【发布时间】:2015-11-24 04:51:57
【问题描述】:

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

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

我们需要复制数十万个文件,由于内存问题,我们想使用 xargs 分块复制。

但下面的命令给出错误。

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

它给出put: unexpected URISyntaxException error

这里的localfile1localfile2 是我当前工作目录中的文件。

单个文件命令正在工作,即

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

【问题讨论】:

    标签: hadoop hdfs xargs


    【解决方案1】:

    可能为时已晚,但当我尝试做同样的事情时,我遇到了你的问题。

    我按照这个tutorial 写了下面的命令来一次上传所有的texttiles 4:

    find . -name '*.textile' -print0 |xargs  -0 -P 4 -I % hadoop fs -put % /user/myName/
    
    • -print0:做一个空分隔的令牌列表
    • -0:所以 xarg 可以识别空分隔符
    • -n:让多个puts并行运行
    • -I:让每个token都包含在hadoop fs -put TOKEN_GOES_HERE中

    我不认为这种方法尊重文件夹结构,这意味着来自本地系统的文件夹结构不会保留在集群上。此外,如果您碰巧在多个文件夹中有文件名,您会得到文件已经存在。

    【讨论】:

    • 这个命令行中没有-n。
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2013-09-14
    • 2015-04-30
    • 2011-07-07
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多