我想运行以下命令:
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集群。
答案 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'