【发布时间】: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 的输出作为输入馈送到CoordinatorTwo。 CoordinatorOne 永远不会失败。问题出在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