Hadoop 将多个文件传输到HDFS

Hadoop 将多个文件传输到HDFS,hadoop,pipe,hdfs,Hadoop,Pipe,Hdfs,我正在尝试将Gzip文件从远程机器上的目录加载到本地机器的HDFS上。我希望能够从远程机器读取gzip文件,并通过管道将它们直接传输到本地机器上的HDFS中。这是我在本地机器上得到的: ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop" tar -cf - *.gz | tar -xf -C tmp cat my_file.gz | hadoop f

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

ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop"
tar -cf - *.gz | tar -xf -C tmp
cat my_file.gz | hadoop fs -put - "/files/hadoop"
这显然将所有gzip文件从指定的远程路径复制到我执行命令的路径,并将空文件
-
加载到HDFS中。如果我在没有tar的情况下尝试,也会发生同样的情况:

ssh remote-host "cd /files/wanted; cat *.gz" | hadoop fs -put - "/files/hadoop"
我在本地机器上尝试了以下方法,只是为了让大家知道我是否遗漏了一些简单的东西:

ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop"
tar -cf - *.gz | tar -xf -C tmp
cat my_file.gz | hadoop fs -put - "/files/hadoop"
这达到了我的预期效果,它将当前目录中的所有gzip文件放入现有目录
tmp

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

ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop"
tar -cf - *.gz | tar -xf -C tmp
cat my_file.gz | hadoop fs -put - "/files/hadoop"
这也达到了我的预期,它将我的gzip文件放入HDFS上的
/files/hadoop


无法将多个文件通过管道传输到HDFS中吗?

无论出于何种原因,我似乎无法将多个文件通过管道传输到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

我读了一遍又一遍,不知道哪一部分不适合您:-/@maksimov,所以它将前两个命令中的文件从远程主机复制到本地主机,这是不应该发生的(我想)。它应该直接进入HDFS,因为某些原因,将多个文件管道化到HDFS中是不起作用的。这是相关的:,但是它们正朝着另一个方向发展,但它可能会给你一些线索。请注意,OP在直接导入hdfs时发现了一个性能问题。@maksimov是的,这正是我现在能做的,问题出在多个文件上。嗯,我知道他在哪里提到了管道的性能问题,但这没有意义。我想我会尝试一下这两种方法,看看是不是因为某种奇怪的原因。