1

我想运行以下命令:

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 集群是一个 Amazon Elastic Map Reduce 集群。

4

1 回答 1

3

只有管​​道命令链的第一个命令会在远程主机上执行。其余的在您的计算机上本地进行。所以,当然,如果你没有安装 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'
于 2013-02-07T11:54:54.847 回答