Java Can';Hadoop命令的t管道输出
我要运行以下命令:Java Can';Hadoop命令的t管道输出,java,hadoop,ssh,pipe,dd,Java,Hadoop,Ssh,Pipe,Dd,我要运行以下命令: 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+0 Datensätze ein 0+0 Datensä
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+0 Datensätze ein
0+0 Datensätze aus
0字节(0 B)kopiert,110011秒,0,0 kB/s
我想不出任何理由,为什么这个命令会这样做。
这是我在这里缺少的Java ism,还是我真的做错了?这个
-copyToLocal
选项需要两个参数:HDFS中的文件和本地路径。我甚至不知道如何将它复制到本地驱动器,这个命令对我来说失败了
但我认为实际的问题是不同的:-copyToLocal
选项不会在stdout上打印任何可以通过管道传输到ssh
命令的内容。在这里,您实际上是在将一个空流输送到dd
,因此没有什么可创建的
我将执行以下命令,似乎有效:
hadoop fs -cat $FILE_IN_HDFS | ssh $REMOTE_HOST "dd of=$TARGET_FILE"
像这样,您正在管道传输一个流,它是文件的内容,并将其复制到$TARGET\u file
所指向的文件中。在我的盒子上测试过,效果很好
这样就不需要在本地复制文件,然后将文件复制到远程设备,所有内容都是流式传输的,我相信这就是您要查找的内容。您可以通过两个步骤完成此操作:首先复制本地文件,然后进行流式传输。您还需要删除中间本地文件
hadoop fs -copyToLocal $FILE_IN_HDFS $LOCAL_FILE
scp $LOCAL_FILE $REMOTE_HOST:$TARGET_FILE && rm $LOCAL_FILE