- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们正在尝试运行一个 Oozie
工作流,其中 3 个子工作流使用 fork
并行运行。子工作流包含一个运行原生 map reduce 作业的节点,以及随后运行一些复杂的 PIG
作业的两个节点。最后,三个子工作流被连接到一个 end
节点。
当我们运行这个工作流时,我们得到 LeaseExpiredException
。异常在运行 PIG
作业时随机发生。它发生的时间没有确定的位置,但是每次我们运行 WF 时都会发生。
此外,如果我们删除 fork
并按顺序运行子工作流,它会正常工作。然而,我们的期望是让它们在某些执行时间内并行运行。
能否请您帮助我理解这个问题以及一些关于我们可能出错的地方的指示。我们从 hadoop
开发开始,以前从未遇到过这样的问题。
看起来由于多个任务并行运行,其中一个线程关闭了一个零件文件,当另一个线程试图关闭该文件时,它抛出了错误。
以下是 hadoop 日志中异常的堆栈跟踪。
2013-02-19 10:23:54,815 INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher: 57% complete
2013-02-19 10:26:55,361 INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher: 59% complete
2013-02-19 10:27:59,666 ERROR org.apache.hadoop.hdfs.DFSClient: Exception closing file <hdfspath>/oozie-oozi/0000105-130218000850190-oozie-oozi-W/aggregateData--pig/output/_temporary/_attempt_201302180007_0380_m_000000_0/part-00000 : org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on <hdfspath>/oozie-oozi/0000105-130218000850190-oozie-oozi-W/aggregateData--pig/output/_temporary/_attempt_201302180007_0380_m_000000_0/part-00000 File does not exist. Holder DFSClient_attempt_201302180007_0380_m_000000_0 does not have any open files.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1664)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1655)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFileInternal(FSNamesystem.java:1710)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFile(FSNamesystem.java:1698)
at org.apache.hadoop.hdfs.server.namenode.NameNode.complete(NameNode.java:793)
at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1439)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1435)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1278)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1433)
以下是主工作流程和一个子工作流程的示例。
主要工作流程:
<workflow-app xmlns="uri:oozie:workflow:0.2" name="MainProcess">
<start to="forkProcessMain"/>
<fork name="forkProcessMain">
<path start="Proc1"/>
<path start="Proc2"/>
<path start="Proc3"/>
</fork>
<join name="joinProcessMain" to="end"/>
<action name="Proc1">
<sub-workflow>
<app-path>${nameNode}${wfPath}/proc1_workflow.xml</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="joinProcessMain"/>
<error to="fail"/>
</action>
<action name="Proc2">
<sub-workflow>
<app-path>${nameNode}${wfPath}/proc2_workflow.xml</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="joinProcessMain"/>
<error to="fail"/>
</action>
<action name="Proc3">
<sub-workflow>
<app-path>${nameNode}${wfPath}/proc3_workflow.xml</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="joinProcessMain"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>WF Failure, 'wf:lastErrorNode()' failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
子工作流程:
<workflow-app xmlns="uri:oozie:workflow:0.2" name="Sub Process">
<start to="Step1"/>
<action name="Step1">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${step1JoinOutputPath}"/>
</prepare>
<configuration>
<property>
<name>mapred.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<main-class>com.absd.mr.step1</main-class>
<arg>${wf:name()}</arg>
<arg>${wf:id()}</arg>
<arg>${tbMasterDataOutputPath}</arg>
<arg>${step1JoinOutputPath}</arg>
<arg>${tbQueryKeyPath}</arg>
<capture-output/>
</java>
<ok to="generateValidQueryKeys"/>
<error to="fail"/>
</action>
<action name="generateValidQueryKeys">
<pig>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${tbValidQuerysOutputPath}"/>
</prepare>
<configuration>
<property>
<name>pig.tmpfilecompression</name>
<value>true</value>
</property>
<property>
<name>pig.tmpfilecompression.codec</name>
<value>lzo</value>
</property>
<property>
<name>pig.output.map.compression</name>
<value>true</value>
</property>
<property>
<name>pig.output.map.compression.codec</name>
<value>lzo</value>
</property>
<property>
<name>pig.output.compression</name>
<value>true</value>
</property>
<property>
<name>pig.output.compression.codec</name>
<value>lzo</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
<script>${pigDir}/tb_calc_valid_accounts.pig</script>
<param>csvFilesDir=${csvFilesDir}</param>
<param>step1JoinOutputPath=${step1JoinOutputPath}</param>
<param>tbValidQuerysOutputPath=${tbValidQuerysOutputPath}</param>
<param>piMinFAs=${piMinFAs}</param>
<param>piMinAccounts=${piMinAccounts}</param>
<param>parallel=80</param>
</pig>
<ok to="aggregateAumData"/>
<error to="fail"/>
</action>
<action name="aggregateAumData">
<pig>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${tbCacheDataPath}"/>
</prepare>
<configuration>
<property>
<name>pig.tmpfilecompression</name>
<value>true</value>
</property>
<property>
<name>pig.tmpfilecompression.codec</name>
<value>lzo</value>
</property>
<property>
<name>pig.output.map.compression</name>
<value>true</value>
</property>
<property>
<name>pig.output.map.compression.codec</name>
<value>lzo</value>
</property>
<property>
<name>pig.output.compression</name>
<value>true</value>
</property>
<property>
<name>pig.output.compression.codec</name>
<value>lzo</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
</configuration>
<script>${pigDir}/aggregationLogic.pig</script>
<param>csvFilesDir=${csvFilesDir}</param>
<param>tbValidQuerysOutputPath=${tbValidQuerysOutputPath}</param>
<param>tbCacheDataPath=${tbCacheDataPath}</param>
<param>currDate=${date}</param>
<param>udfJarPath=${nameNode}${wfPath}/lib</param>
<param>parallel=150</param>
</pig>
<ok to="loadDataToDB"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>WF Failure, 'wf:lastErrorNode()' failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
最佳答案
当我们同时运行三个 pig Action 并且其中一个失败时,我们遇到了同样的错误。该消息错误是工作流意外停止的结果,因为一个操作失败,工作流已停止,而其他操作正在尝试继续。 您必须查看状态为 ERROR 的失败操作才能知道发生了什么,不要查看状态为 KILLED 的操作
关于hadoop - 运行 oozie fork 时出现 LeaseExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14979677/
我正在尝试将 Oozie 数据库从 derby 迁移到 MySql。一切都运行良好,除非我尝试运行命令 ./oozie-setup.sh prepare-war 出现以下错误 setting CA
当我在 oozie 的 job.properties 中更改协调员作业的开始时间时,该作业不会采用更改后的时间,而是在旧的计划时间运行。 旧的job.properties: startMinute=0
我已经尝试过 oozie job -oozie http://sandbox.hortonworks.com:11000/oozie -config ./job.properties -kill *
当我尝试终止或暂停时,我在用户“runner”下提交了 oozie 协调员作业,我收到以下错误消息: [runner@hadooptools ~]$ oozie job -oozie http
如何自动重新运行工作流中失败的任何操作? 我知道从命令行或彻底的色调手动重新运行的方法。 $oozie job -rerun ... 我们可以在工作流中设置或提供任何参数以在操作失败时自动重试吗? 最
我对 oozie 有点陌生。我在我的服务器上安装了(使用 cdh 存储库)oozie(我遵循了 CDH4 文档 [我的 hadoop 在 cdh4 中运行])。 我已使用以下信息更新我的 core-s
在 oozie 中,input-events 非常简单,如果指定的文件/文件夹不存在,协调器作业将保持在 WAITING 状态。但我无法理解 output-events 的作用。 根据我的理解,在 o
我有一个 java 操作已暂停 5 天,处于此状态,我不知道 oozie 要我做什么。有什么想法吗? 最佳答案 这意味着有一个错误。如果您配置了重试,则可能会多次重试。配置重试后,在第一个错误之后,作
我的要求是在任何工作流操作失败的情况下终止或停止启动工作流的协调器。 wf:id 给出工作流的 ID。 协调有没有这样的功能?? 如果没有,请提出将坐标传递给工作流的方法。 最佳答案 您可以在协调器中
在我的 oozie coordinator.xml 中,我不想指定结束时间。 有没有办法做到这一点。 coordinator.xml hdfs://l
我在 Oozie 3.3.2 上运行 oozie 工作流时出现以下错误 Error: E0732 : E0732: Fork /Join[join1]不是成对的(join 应该是 [join2]) 现
我是 Oozie 的新手,只是想知道 - 如何使用 Oozie 安排 sqoop 作业。我知道可以将 sqoop 操作添加为 Oozie 工作流程的一部分。但是我怎样才能安排一个 sqoop 操作并让
我正在尝试运行 sh通过 Oozie 编写脚本,但我面临一个问题: Cannot run program "script.sh" (in directory "/mapred/local/taskTr
我可以在 Oozie 移动操作中使用通配符(例如 *)或文件模式(例如 {})吗? 我正在尝试将我的工作结果移动到存档目录中。 目录结构状态: output - 201304 - 201305 a
请记住,我是 oozie 的完全新手。我知道可以使用 arg 标签在 oozie 工作流 xml 中指定命令行参数。我想知道如何指定一个可选的命令行参数,以便 oozie 不会提示如果用户没有指定缺少
我可以使用 Hue 创建一个不会过期(没有结束日期)的无限 Oozie 协调器吗? 请帮忙! 最佳答案 没有。您不能创建一个永不过期的协调器。这是 Oozie Coordinator xsd引用:
我是 Oozie 的新手,我正在尝试安装和设置 Oozie。我按照 Apache 站点上提供的说明进行操作:“http://oozie.apache.org/docs/3.3.2/DG_QuickSt
我想知道是否有一种方法可以在不重启 oozie 作业(协调器)的情况下重新加载 oozie 作业的配置文件。 因为协调器实际上运行着我们的许多任务,所以有时我们可能只需要更改作业配置文件的一行,然后进
任何人都可以建议哪个最适合 Hadoop 的调度程序。如果是奥兹。 oozie 与 cron 工作有何不同。 最佳答案 Oozie 是最好的选择。 Oozie Coordinator 允许在文件到达
我正在编写一个 oozie java 操作,它在作业 ./lib 文件夹中的 jar 文件中包含我的自定义代码。 我还想在我的工作外部的文件夹中添加一个 jar 到类路径中(即 /home/me/ot
我是一名优秀的程序员,十分优秀!