私はoozieワークフローがそれを認識できるようにHDFSに保存されているシェルスクリプトを実行しています。私が使っているこのスクリプトを実行してください。
hadoop fs -cat script.sh |exec sh
ただし、インラインパラメータをスクリプトに渡す必要があります。 CLIではちょうどします。
./script.sh arg1
次に、$ 1で変数をエコーします。 HDFSに保存されているスクリプトで同じことを行う方法を見つけようとしています。
ベストアンサー1
sh
標準入力ストリームから読み取るすべてのスクリプトを実行できますsh -s
。ただし、標準入力ストリームはスクリプトを読み取るために使用されるため、標準入力の入力を必要とするユーザー対話は期待どおりに機能せず、スクリプトは標準入力ストリームから他のデータを読み取ることはありません。
あなたの場合、hadoop
コマンドはそれを実行するために使用できるスクリプトを提供しますsh -s
。sh -s
シェルに渡すコマンドラインオプションを追加します。次のコードでは、ラッパースクリプトのコマンドライン引数が呼び出しスクリプトにそのまま渡されます。
#!/bin/sh
hadoop fs -cat script.sh | sh -s "$@"
パイプラインの各部分がサブシェルで実行されるため、exec
呼び出しを使用する必要はありません。sh -s