无法管道输出Hadoop命令

我想运行以下命令:

 hadoop fs -copyToLocal FILE_IN_HDFS | ssh REMOTE_HOST "dd of=TARGET_FILE"

但是,当我尝试时,它所做的只是在目标主机上创建一个空文件,并将其复制到本地主驱动器,而不是将其复制到远程位置。

$ hadoop fs -copyToLocal FILE_IN_HDFS | ssh REMOTE_HOST“dd of = test.jar”

0 + 0Datensätzeein

0 + 0Datensätzeaus

0字节(0 B)kopiert,1,10011 s,0,0 kB / s

我想不出任何理由,为什么这个命令会以这种方式行事。 这是我在这里错过的一些Java-ISM,还是我实际上做错了?


-copyToLocal选项需要2个参数:HDFS中的文件和本地路径。 我甚至没有看到如何将其复制到本地驱动器,这个命令对我来说是失败的。

但我认为实际问题是不同的: -copyToLocal选项不会在stdout上打印任何可以传送给ssh命令的东西。 在这里你基本上将一个空的流管道输送到dd ,所以没有什么可以创建的。

我会做下面的命令,似乎工作:

hadoop fs -cat $FILE_IN_HDFS | ssh $REMOTE_HOST "dd of=$TARGET_FILE"

像这样,你正在传输一个流,它是你的文件的内容并将它拷贝到$TARGET_FILE指向的文件中。 测试我的盒子,这工作正常。

这避免了需要在本地复制文件,然后scp'ing文件到远程盒,一切都流,这是我相信你在找什么。


您可以分两步执行此操作:首先是copyToLocal,然后是scp。 您还需要删除中间本地文件。

hadoop fs -copyToLocal $FILE_IN_HDFS $LOCAL_FILE
scp $LOCAL_FILE $REMOTE_HOST:$TARGET_FILE && rm $LOCAL_FILE
链接地址: http://www.djcxy.com/p/93587.html

上一篇: Can't pipe Output of Hadoop Command

下一篇: c++