无法管道输出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++