如何让 Hue - Oozie 工作流运行一个有配置文件的 java 作业?

How to make Hue - Oozie workflow run a java job which has config file?

我有一个 buildModel.jar 和一个文件夹 "conf",其中包含一个名为 config.properties.

的配置文件

运行它的命令行如下所示:

hadoop jar /home/user1/buildModel.jar -t fp-purchased-products -i hdfs://Hadoop238:8020/user/user2/recommend_data/bought_together

经过一些分析后,它使用 "config.properties" 文件中的数据库信息将数据存储到 mongo 数据库中。

现在我需要使用 Hue Oozie 工作流来运行它,所以我使用 Hue 将 jar 文件和文件夹 "conf" 上传到 hdfs,然后创建了一个工作流。我还在工作流程

中添加了"config.properties"文件

这是workflow.xml

<workflow-app name="test_service" xmlns="uri:oozie:workflow:0.4">
<start to="run_java_file"/>
<action name="run_java_file">
    <java>
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <main-class>xxx.xxx.recommender.buildModel.Application</main-class>
        <arg>-t=fp-purchased-products</arg>
        <arg>-i=hdfs://Hadoop238:8020/user/user2/recommend_data/bought_together</arg>
        <file>/user/user2/service/build_model/conf/config.properties#config.properties</file>
    </java>
    <ok to="end"/>
    <error to="kill"/>
</action>
<kill name="kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>

这是工作流程-metadata.json

{"attributes": {"deployment_dir": "/user/hue/oozie/workspaces/_user2_-oozie-31-1416890719.12", "description": ""}, "nodes": {"run_java_file": {"attributes": {"jar_path": "/user/user2/service/build_model/buildModel.jar"}}}, "version": "0.0.1"}

分析后,将数据保存到 mongo 数据库时出现错误。 java 文件似乎看不到 config.properties.

任何人都可以指导我如何使用 Hue Oozie 运行 java 有配置文件吗?

抱歉回答晚了。

正如罗曼在上面所解释的那样。 Hue 会将 config.properties 复制到与 BuildModel.jar 相同的目录中。所以我更改了代码,让 BuildModel.jar 读取同一目录中的配置文件。成功了!