2011-11-16 84 views
0

我有一個〜10個Hadoop作業流程。我有,對於實例配置這些作業的XML文件序列:Hadoop作業配置文件規範

-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 

我想更換部分「/路徑/上/我的/本地/系統」一些佔位例如:$ {} 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發行版,並且它似乎每次都失敗。

+1

什麼是例外? –

+0

沒有Hadoop異常 - 它會默默繼續,然後當我在業務代碼中遺漏屬性時,它會拋出業務異常。 – Zec

回答

1

我不知道bash 4. *,但是老的bashes不支持'。's'的變種名。

嘗試

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}" 

我希望這有助於。

+0

它實際上證明是「。」的問題。 (GNU bash,版本3.2.25(1) - 釋放(x86_64-redhat-linux-gnu))中沒有轉義「$」 – Zec