Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop Oozie工作流未获取协调器属性_Java_Hadoop_Oozie - Fatal编程技术网

Java Hadoop Oozie工作流未获取协调器属性

Java Hadoop Oozie工作流未获取协调器属性,java,hadoop,oozie,Java,Hadoop,Oozie,我有一个简单的Oozie协调员和工作流程。我正在尝试将协调器的dataIn属性传递到工作流,如下所述: 由于某些原因,在以下示例中,工作流属性中的值为空,EL变量为空${inputDir} 实际错误是:无法解析变量[inputDir] 配置 coordinator.xml 要点如下: 您似乎只运行工作流,而不是协调器 如果您希望协调员填写这些参数-您需要运行协调员-当数据准备就绪时,协调员将运行工作流可能有两种情况:- 而不是uri模板${s3DataPath}/${YEAR}-${MONTH}

我有一个简单的Oozie协调员和工作流程。我正在尝试将协调器的dataIn属性传递到工作流,如下所述:

由于某些原因,在以下示例中,工作流属性中的值为空,EL变量为空
${inputDir}

实际错误是:
无法解析变量[inputDir]

配置 coordinator.xml 要点如下:

您似乎只运行工作流,而不是协调器


如果您希望协调员填写这些参数-您需要运行协调员-当数据准备就绪时,协调员将运行工作流

可能有两种情况:-

  • 而不是uri模板${s3DataPath}/${YEAR}-${MONTH}-${DAY}中的${YEAR}-${MONTH}-${DAY}, 尝试使用hdfs path的完整路径硬编码该值(如 hdfs://namenode:8020/user/data/s3DataPath/2012-10-10),然后检查 EL函数是否正确替换日期格式。如果没有,请检查格式化程序以正确定义它
  • 2.它可以具有与输入相同的值${coord:current(0)}。所以试着让它成为${coord:current(1)}


    也许这会有所帮助。

    终于有机会重新审视这一点。它现在起作用了,但可能有多种原因。对于子孙后代,以下是我所改变的:

    • 删除了空完成标志
    • 使用dataOut而不是dataIn
    • 添加了另一个dataOut事件,为每个事件指定一个唯一的名称

    需要一些调试才能确定确切的原因。

    这很容易回答:协调器的开始时间是2014-10-06T00:01Z,而数据集的初始实例是2014-10-06T08:00Z。因此${coord:current(0)}无法为协调器的第一次运行返回有效的数据集。

    ahh,观察得很好,但我实际上发布了工作流测试中的配置。我编辑了job.properties以反映我如何运行协调器作业:oozie.coord.application.path=${workflowApplicationPath}那么,您如何知道这个协调器问题呢?通过取消job.properties中上面两行的注释来运行工作流效果很好。已设置inputDir。运行协调器时,未设置inputDir
    <?xml version="1.0" encoding="UTF-8"?>
    <coordinator-app xmlns="uri:oozie:coordinator:0.4" name="awesome" frequency="${coord:days(1)}" start="2014-10-06T00:01Z" end="2050-01-01T00:01Z" timezone="UTC">
      <controls>
        <!-- Wait 23 hours before giving up -->
        <timeout>1380</timeout>
        <concurrency>1</concurrency>
        <execution>LIFO</execution>
      </controls>
      <datasets>
        <dataset name="itsready" frequency="${coord:days(1)}" initial-instance="2014-10-06T08:00Z" timezone="America/Los_Angeles">
          <uri-template>${s3DataPath}/${YEAR}-${MONTH}-${DAY}</uri-template>
          <!-- with the done-flag set to none, this will look for the folder's existance -->
          <done-flag></done-flag>
        </dataset>
        <!-- output dataset -->
        <dataset name="itsdone" frequency="${coord:days(1)}" initial-instance="2014-10-06T08:00Z" timezone="America/Los_Angeles">
          <uri-template>${dataPath}/awesome/sql-schema-tab-delim-load/${YEAR}-${MONTH}-${DAY}/loaded</uri-template>
        </dataset>
      </datasets>
      <input-events>
        <data-in name="input" dataset="itsready">
          <instance>${coord:current(0)}</instance>
        </data-in>
      </input-events>
      <output-events>
        <data-out name="output" dataset="itsdone">
          <instance>${coord:current(0)}</instance>
        </data-out>
      </output-events>
      <action>
        <workflow>
          <app-path>${workflowApplicationPath}</app-path>
          <configuration>
            <property>
              <name>inputDir</name>
              <value>${coord:dataIn('input')}</value>
            </property>
          </configuration>
        </workflow>
      </action>
    </coordinator-app>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <workflow-app xmlns="uri:oozie:workflow:0.4" name="awesome-wf">
      <start to="shell-import"/>
      <action name="shell-import">
        <shell xmlns="uri:oozie:shell-action:0.2">
          <job-tracker>${jobTracker}</job-tracker>
          <name-node>${nameNode}</name-node>
          <exec>${importFile}</exec>
          <env-var>INPUT_DIR=${inputDir}</env-var>
          <file>${importFile}#${importFile}</file>
        </shell>
        <ok to="end"/>
        <error to="fail"/>
      </action>
      <kill name="fail">
        <message>it failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
      </kill>
      <end name="end"/>
    </workflow-app>
    
    hadoopMaster=myawesome.server.com
    nameNode=hdfs://${hadoopMaster}:8020
    jobTracker=${hadoopMaster}:8050
    tzOffset=-8
    oozie.use.system.libpath=true
    oozie.libpath=/user/oozie/share/lib
    appPath=${nameNode}/apps
    dataPath=${appPath}/data
    s3DataPath=s3n://an/awesome/s3/data/path
    
    oozie.wf.action.notification.url=https://zapier.com/mysecreturl
    workflowApplicationPath=${appPath}/awesome
    
    #uncomment both of these lines to test the workflow
    #inputDir=s3://awesome/path/2014-10-06
    #oozie.wf.application.path=${workflowApplicationPath}
    
    oozie.coord.application.path=${workflowApplicationPath}
    
    
    importFile=import.sh