无法管道两个hadoop命令?

时间:2013-02-07 11:43:09

标签: hadoop ssh elastic-map-reduce

我想运行以下命令:

hadoop fs -ls hdfs:///logs/ | grep -oh "/[^/]*.gz" | grep -oh "[^/]*.gz" | hadoop fs -put - hdfs:///unzip_input/input

我在ssh到主节点后从shell调用它时,它工作。但如果我尝试通过ssh调用它,它将无法工作:

ssh -i /home/USER/keypair.pem hadoop@ec2-XXXX.compute-1.amazonaws.com hadoop fs -ls hdfs:///logs/ | grep -oh "/[^/]*.gz" | grep -oh "[^/]*.gz" | hadoop fs -put - hdfs:///unzip_input/input

它给出错误:

zsh: command not found: hadoop

但如果我取出最后一个管道命令成功:

ssh -i /home/USER/keypair.pem hadoop@ec2-XXXX.compute-1.amazonaws.com hadoop fs -ls hdfs:///logs/ | grep -oh "/[^/]*.gz" | grep -oh "[^/]*.gz"

从某些搜索中我发现它可能是由于JAVA_HOME未设置错误,但在主节点上的〜/ .bashrc中设置正确

hadoop clustter是Amazon Elastic Map Reduce集群。

1 个答案:

答案 0 :(得分:3)

只有管道命令链的第一个命令才会在reomte主机上执行。其余的发生在您的计算机本地。所以,当然,如果你没有安装hadoop,zsh会打印出一条错误信息(否则,它会把它放到你当地的Hadoop上,这可能不是你想要的。

要将所有命令传递给ssh,您可以将它们放在引号“”或单引号中':

ssh -i /home/USER/keypair.pem hadoop@ec2-XXXX.compute-1.amazonaws.com 'hadoop fs -ls hdfs:///logs/ | grep -oh "/[^/]*.gz" | grep -oh "[^/]*.gz" | hadoop fs -put - hdfs:///unzip_input/input'