通过管道将多个文件传输到hdfs

a64a0gku  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(441)

我正在尝试将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文件放入 /files/hadoop 在hdfs上。
不可能将多个文件通过管道传输到hdfs中吗?

bqucvtff

bqucvtff1#

不管出于什么原因,我似乎无法将多个文件传输到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

相关问题