【问题标题】:Passing properties file to Oozie Java Action将属性文件传递给 Oozie Java Action
【发布时间】:2015-10-26 11:16:33
【问题描述】:

我设置了一个 Oozie Java 操作工作流,我计划使用 Oozie 协调器来安排它。 java 操作运行一个 Camus 作业,我已将其 jar 和属性配置文件放在工作流/lib 目录中。关于如何将 -P 参数传递给此的任何想法?目前,我正在做这样的事情:

<workflow-app xmlns="uri:oozie:workflow:0.5" name="camus-wf">
    <start to="camusJob"/>
    <action name="camusJob">
        <java>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
            <property>
                    <name>mapred.job.name</name>
                    <value>camusJob</value>
                </property>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <main-class>com.linkedin.camus.etl.kafka.CamusJob</main-class>
    <arg>-P</arg>
    <arg>${camusJobProperties}</arg>
        </java>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>${wf:errorMessage(wf:lastErrorNode())}</message>
    </kill>
    <end name="end"/>
</workflow-app>

camusJobProperties 的样子

hdfs://10.0.2.15:8020/coordCamusJob/workflowAppPath/lib/config.properties

但工作流程似乎没有运行(卡在 PREP 上)。任何想法如何解决这个问题?

谢谢!

编辑:更正我的 nameNode URL 后,我可以看到我收到以下错误:

ACTION[0000002-150804091125207-oozie-oozi-W@camusJob] Launcher exception: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
org.apache.oozie.action.hadoop.JavaMainException: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
    at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:58)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:39)
    at org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:226)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:645)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:82)
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:603)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:821)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:598)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:414)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:140)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:766)
    at com.linkedin.camus.etl.kafka.CamusJob.run(CamusJob.java:679)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    at com.linkedin.camus.etl.kafka.CamusJob.main(CamusJob.java:646)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:55)
    ... 15 more

所以基本上我的问题是当属性文件位于 HDFS 中(特别是在工作流/lib 目录中)时,我将如何传递属性文件参数

【问题讨论】:

  • 你确定这是因为属性 arg 吗?如果删除该参数会发生什么。它会启动作业并引发一些错误吗?
  • @sonic 不,你是对的,即使没有争论,它仍然停留在准备中。所以它可能是别的东西。我会尝试以不同的方式实现它(也许作为 map reduce 操作)。
  • 检查你的jobtracker和namenode url
  • 谢谢!看来我的 nameNode URL 不正确,所以现在它可以工作,但仍然给出另一个错误,这与我最初怀疑的问题有关(有趣的是它是如何工作的)。我收到以下错误:“hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties,预期:file:///org.apache.oozie.action.hadoop.JavaMainException: java.lang.IllegalArgumentException:错误的 FS:hdfs://10.0.2.15:8020/user/root/app/workflow/lib/config.properties,预期:file:///”但是当我尝试通过“/user /root/app/workflow/lib/config.properties" 直接给出一个文件未找到。
  • 那是因为你没有配置你的 core-site.xml 来使用 hdfs。默认情况下,核心站点将具有文件系统配置

标签: java hadoop oozie oozie-coordinator camus


【解决方案1】:

对于问题的第一部分:这可能是由于namenodejobtracker 的url 不正确

第二部分:你必须配置core-site.xml,属性fs.defaultFShdfs://host:port/

另外, 在您的config 对象中设置 core-site.xml 的 Java 程序路径

【讨论】:

  • 谢谢!,所以我想我已经有这样的设置了。我将 fs.defaultFS 设置为值 hdfs://sandbox.hortonworks.com:8020,属性为 true
  • 我已经修改了答案
  • 是否可以通过将 fsDefault 添加为 Oozie 工作流操作的属性来做到这一点?
  • @JakeChase:你最终能解决第二个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多