无法通过管道输出hadoop命令

vm0i2vca  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(346)

我要运行以下命令:

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

但是,当我尝试时,它所做的只是在目标主机上创建一个空文件并将其复制到本地主驱动器,而不是将其复制到远程位置。
$hadoop fs-copytol本地文件在| hdfs | ssh remote | host“dd of=test.jar”中
0+0日期ä泽因
0+0日期ä这是我的错
0字节(0 b)kopiert,110011秒,0,0 kb/s
我想不出任何理由,为什么这个命令会这样。这是我在这里遗漏的java ism,还是我真的做错了?

qyzbxkaa

qyzbxkaa1#

您可以通过两个步骤来完成:首先是copytolocal,然后是scp。您还需要删除中间本地文件。

hadoop fs -copyToLocal $FILE_IN_HDFS $LOCAL_FILE
scp $LOCAL_FILE $REMOTE_HOST:$TARGET_FILE && rm $LOCAL_FILE
zbsbpyhn

zbsbpyhn2#

这个 -copyToLocal 选项需要两个参数:hdfs中的文件和本地路径。我甚至不知道如何复制到你的本地驱动器,这个命令对我来说失败了。
但我认为实际问题是不同的: -copyToLocal 选项不会在stdout上打印任何可以通过管道传输到 ssh 命令。在这里,你基本上是管道空流到 dd ,因此没有什么可创建的。
我会执行以下命令,似乎有效:

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

像这样,您将管道传输一个流,它是您的文件的内容,并将其复制到 $TARGET_FILE . 在我的盒子上测试过,效果很好。
这就避免了在本地复制文件,然后将文件复制到远程盒子的需要,所有的东西都是流式传输的,我相信这就是你要找的。

相关问题