我正在尝试将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中吗?
1条答案
按热度按时间bqucvtff1#
不管出于什么原因,我似乎无法将多个文件传输到hdfs中。所以我最后做的是创建一个后台ssh会话,这样我就不必为每个要加载的文件创建一个:
然后遍历需要加载到hdfs中的文件列表,并将每个文件导入:
还要确保关闭ssh会话: