我正在尝试将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中?
答案 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