次のようなスクリプトがあります。
#!/bin/bash
function func1() {
echo "HELLO!"
}
export -f func1
function func2() {
echo "HI!!"
func1
}
export -f func2
Hadoop タスクトラッカーをローカルで起動すると、/usr/lib/hadoop/conf/hadoop-env.sh は次のようになります。
# .. few configuration params
# source my_shell_file.sh
# my_function
タスクトラッカーを起動すると、すべて問題ありません。my_function 内にあるいくつかの echo ステートメントを出力します。「mapper.py」ファイルを使用して Hadoop ジョブを開始すると、正常に動作します。my_function に存在する構成パラメーターも使用します。マッパーを次のように宣言すると、問題が発生します
-mapper 'bash -c "func1 ; python mapper.py"'
次に、次のエラーがスローされます。
/bin/bash: func2: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `func2'
/bin/bash: func1: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `func1'
ここで何が起こっているのかわかりません。「bash -c」の代わりに「sh -c」を試しましたが、同じ問題が発生します。
編集:コンソールで「ソース」を取得すると、シェルスクリプトは正常に機能します。コンソール上のシェル ファイルで定義された関数を認識します。
EDIT2: シェル ファイルの正確な内容を追加しました。