将多个文件传输到HDFS

时间:2014-12-19 23:30:58

标签: hadoop pipe hdfs

我正在尝试将gzip文件从远程计算机上的目录加载到本地计算机的HDFS上。我希望能够从远程计算机读取gzip压缩文件,并将它们直接传输到本地计算机上的HDFS中。这就是我在本地机器上得到的:

ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop"

这显然将指定的远程路径中的所有gzip压缩文件复制到执行命令的路径,并将空文件-加载到HDFS中。如果我在没有tar的情况下尝试它也会发生同样的事情:

ssh remote-host "cd /files/wanted; cat *.gz" | hadoop fs -put - "/files/hadoop"

只是为了看看我是否可能遗漏了一些简单的东西,我在本地机器上尝试了以下内容:

tar -cf - *.gz | tar -xf -C tmp

这实现了我的预期,它将当前目录中的所有gzip压缩文件放在现有目录tmp中。

然后在本地机器上使用Hadoop部件:

cat my_file.gz | hadoop fs -put - "/files/hadoop"

这也符合我的预期,它将我的gzip压缩文件放入HDFS的/files/hadoop

是否无法将多个文件传输到HDFS中?

1 个答案:

答案 0 :(得分:1)

无论出于何种原因,我似乎无法将多个文件传输到HDFS中。所以我最终做的是创建一个后台SSH会话,所以我不必为每个要加载的文件创建一个:

ssh -fNn remote-host

然后迭代我需要加载到HDFS中的文件列表并将每个文件管道输入:

for file in /files/wanted/*; do
  ssh -n remote-host "cat $file" | "hadoop fs -put - /files/hadoop/$file"
done

还要确保关闭SSH会话:

ssh -O exit remote-host