HDFSで実行されるシェルスクリプトにインラインパラメータを渡す

HDFSで実行されるシェルスクリプトにインラインパラメータを渡す

私はoozieワークフローがそれを認識できるようにHDFSに保存されているシェルスクリプトを実行しています。私が使っているこのスクリプトを実行してください。

hadoop fs -cat script.sh |exec sh  

ただし、インラインパラメータをスクリプトに渡す必要があります。 CLIではちょうどします。

./script.sh arg1

次に、$ 1で変数をエコーし​​ます。 HDFSに保存されているスクリプトで同じことを行う方法を見つけようとしています。

ベストアンサー1

sh標準入力ストリームから読み取るすべてのスクリプトを実行できますsh -s。ただし、標準入力ストリームはスクリプトを読み取るために使用されるため、標準入力の入力を必要とするユーザー対話は期待どおりに機能せず、スクリプトは標準入力ストリームから他のデータを読み取ることはありません。

あなたの場合、hadoopコマンドはそれを実行するために使用できるスクリプトを提供しますsh -ssh -sシェルに渡すコマンドラインオプションを追加します。次のコードでは、ラッパースクリプトのコマンドライン引数が呼び出しスクリプトにそのまま渡されます。

#!/bin/sh

hadoop fs -cat script.sh | sh -s "$@"

パイプラインの各部分がサブシェルで実行されるため、exec呼び出しを使用する必要はありません。sh -s

おすすめ記事