2011-11-16 68 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