1

次のコマンドを実行します。

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

マスターノードに ssh した後、シェルから呼び出すと機能します。ただし、次のように 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

パイプされたコマンド チェーンの最初のコマンドのみが、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'
于 2013-02-07T11:54:54.847 に答える