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 回答