0

私には約10個のHadoopジョブのフローがあります。たとえば、これらのジョブを構成する一連のXMLファイルがあります。

-conf /path/on/my/local/system/start-conf.xml
-conf /path/on/my/local/system/job-1-conf.xml
-conf /path/on/my/local/system/job-2-conf.xml
-conf /path/on/my/local/system/job-i-conf.xml
...
-conf /path/on/my/local/system/job-10-conf.xml

「com.my.project.RunClass」という名前のジョブを実行するために使用されるクラスがあると仮定します。次のコマンドでジョブを実行すると仮定します。

hadoop jar /path/to/project.jar com.my.project.RunClass -conf /path/on/my/local/system/start-conf.xml

セグメント"/path / on / my / local / system"をプレースホルダー($ {root.conf.dir}など)に置き換えて、次のようなジョブを実行できるようにします。

hadoop jar /path/to/project.jar com.my.project.RunClass -conf ${root.conf.dir}/job-1-conf.xml -Droot.conf.dir=/path/on/my/local/system

これは、Hadoopのどのバージョンでも可能ですか?Clouderaディストリビューションを使用していますが、毎回失敗するようです。

4

1 に答える 1

1

bash 4.* については知りませんが、古い bash は「.」を含む変数名をサポートしていません。

試す

root_conf_dir="/path/on/my/local/system"
hadoop jar /path/to/project.jar com.my.project.RunClass \
    -conf "${root_conf_dir}"/job-1-conf.xml \
    -Droot.conf.dir="${root_conf_dir}"

これが役立つことを願っています。

于 2011-11-16T23:56:13.317 に答える