【问题标题】:Issue running two Oozie coordinator application simultaneously同时运行两个 Oozie 协调器应用程序的问题
【发布时间】:2013-12-25 08:12:20
【问题描述】:

我是 hadoop 和 oozie 的新手。我试图运行两个具有以下详细信息的协调器实例: CoordinatorOne 有一个工作流作业,其中包含单个操作(即 java action )。它以某种频率运行 24/7。当我运行另一个协调器时,比如说CoordinatorTwo,(其中有一个工作流作业,其中有一个猪动作),频率相同,开始时间与CoordinatorOne动作的具体化时间一致,第二个协调器动作随机失败(即有时他们成功,有时他们失败)。我试过检查作业的日志,但没有创建日志。当我在命令行上检查 oozie 操作 ID 的信息时,我发现了这个错误:

main class [org.apache.oozie.action.hadoop.pigmain], exit code [2]

我想不出问题所在。请让我知道是否有人以前遇到过此类问题。

此外,CoordinatorOne 的输出作为输入馈送到CoordinatorTwoCoordinatorOne 永远不会失败。问题出在CoordinatorTwo,但当第一个终止时它工作正常。

集群详情: 具有 4 个 Map 和 2 个减少任务容量的 2 个节点集群 - CentOS VM,每个具有 4gb 内存。 Hadoop 2.0.0-cdh4.3.0 Oozie 客户端构建版本:3.3.2-cdh4.3.0

PS:如果我错过了什么,请告诉我。非常感谢!

CoordinatorOne 和两个定义如下:

CoordinatorOne:

<coordinator-app xmlns="uri:oozie:coordinator:0.4"  frequency="${frequency}" start="${start}" end="${end}" timezone="UTC" name="CoordinatorOne">

<controls>
    <timeout>3</timeout>
    <concurrency>1</concurrency>
</controls>

<datasets>
    <dataset name="OutputDataset" frequency="${frequency}" initial-instance="${start}" timezone="UTC">
    <uri-template>${namenode}/user/somefolder/Output/Test/${YEAR}/${MONTH}/${DAY}/${HOUR}/${MINUTE}/itemdata</uri-template><done-flag></done-flag>
    </dataset>
</datasets>

<output-events>
    <data-out name="Outputevent" dataset="OutputDataset">
     <instance>${coord:current(0)}</instance>
    </data-out>
 </output-events>



 <action>
    <workflow>
       <app-path>${namenode}/user/somefolder/Input/Workflow</app-path>
       <configuration>
            <property>
                <name>namenode</name>
                <value>${namenode}</value>
            </property>
       <property>
                <name>jobtracker</name>
                <value>${jobtracker}</value>
            </property>
     <property>
                <name>queue_name</name>
                <value>${queue_name}</value>
            </property>
             <property>
                 <name>path</name>
                  <value>${coord:dataOut('Outputevent')}</value>
              </property>

          </configuration>
     </workflow>
 </action>     


</coordinator-app>


   CoordinatTwo:


<coordinator-app xmlns="uri:oozie:coordinator:0.4"  frequency="${frequency}" start="${start}" end="${end}" timezone="UTC" name="CoordinatorTwo">

 <controls>
      <timeout>5</timeout>
       <concurrency>1</concurrency>
  </controls>

 <datasets>
      <dataset name="OutputDataset" frequency="${frequency}" initial-instance="${start}" timezone="UTC">
       <uri-template>${namenode}/user/somefolder/Output/Test/${YEAR}/${MONTH}/${DAY}/${HOUR}/Somedata${MINUTE}</uri-template>
      <done-flag></done-flag>
       </dataset>
  <dataset name="InputDataset" frequency="${frequencyInput}" initial-instance="${startTimeofInputset}" timezone="UTC">
        <uri-template>${namenode}/user/somefolder/Output/Test/${YEAR}/${MONTH}/${DAY}/${HOUR}/${MINUTE}</uri-template>
   <done-flag></done-flag>
    </dataset>
</datasets>
 <input-events>
    <data-in name="Inputevent" dataset="InputDataset">
      <instance>${coord:current(-1)}</instance>
      </data-in>
  </input-events>   
 <output-events>
    <data-out name="Outputevent" dataset="OutputDataset">
        <instance>${coord:current(0)}</instance>
    </data-out>
 </output-events>

  <action>
    <workflow>
     <app-path>${namenode}/user/somefolder/Input/WorkflowItem</app-path>
       <configuration>
            <property>
                <name>namenode</name>
                <value>${namenode}</value>
            </property>
       <property>
                <name>jobtracker</name>
                <value>${jobtracker}</value>
            </property>
     <property>
                <name>queue_name</name>
                <value>${queue_name}</value>
            </property>
            <property>
                    <name>Inputpath</name>
                    <value>${coord:dataIn('Inputevent')}</value>
                  </property>
             <property>
                    <name>Outputpath</name>
                    <value>${coord:dataOut('Outputevent')}</value>
                  </property>

           </configuration>
     </workflow>
 </action>     

`

【问题讨论】:

  • 尝试在 oozie/conf/oozie-log4j.properties 中将 oozie logger 设置为 DEBUG,然后看看是否能发现可疑之处。
  • CoordinatorOne 的不同实现是写入不同的目录(基于实现时间),还是写入同一个目录?如果是后者,CoordinatorTwo 中的 pig 操作显然会失败,因为 CoordinatorOne 重写了它的输入。如果您发布协调员的定义会很有帮助。
  • 嗨 Dmitry,感谢您的回复。是的相同目录但不同的文件,例如:somefolder/2013/12/26/somedata0 somefolder/2013/12/26/somedata5 somefolder/2013/12/26/ somedata10,当 coordinatorOne 创建 coordinatoTwo 试图访问以前成功的文件的同一目录形式的文件时,会不会有任何冲突?。
  • 据我了解,CoordinatorOne 创建 /user/somefolder/Output/Test/2013/12/26/10/00/itemdata 之类的文件,而 CoordinatorTwo 从 /user/somefolder/Output/ 读取测试/2013/12/26/10/00。如果它们同时启动,那么正如我所写的,当 Pig 运行并且失败时,数据可能还没有准备好。解决方案 - 当数据准备好并且 CoordinatorTwo 中的 InputDataset 未指定 时,您的 java 操作会产生空的“_SUCCESS”标志(默认情况下它将是“_SUCCESS”)。这样 CoordinatorTwo 将等待数据。

标签: hadoop apache-pig oozie


【解决方案1】:

CoordinatorOne 的输出作为输入馈送到 CoordinatorTwo

确保 CoordinatorTwo 等待其输入 - 请参阅示例 here(“当数据目录可用时触发协调器作业”)。如果输入不存在或不完整,Pig 操作可能会失败(请参阅 Pig 日志以确认)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2015-11-20
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多