我有一个 Oozie 工作流程,其中一个步骤是 java 步骤,运行存储在本地文件系统上的 jar(该 jar 存在于所有节点上)。
最初,该 jar 是通过 RPM 安装的,因此它们都具有相同的时间戳。
在实验时,我手动复制了这个 jar 的新版本,现在我收到消息:
org.apache.oozie.action.ActionExecutorException: JA009: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1516602562532_15451 to YARN : Application application_1516602562532_15451 failed 2 times due to AM Container for appattempt_1516602562532_15451_000002 exited with exitCode: -1000
For more detailed output, check the application tracking page: http://ip-10-0-0-239.eu-west-1.compute.internal:8088/cluster/app/application_1516602562532_15451 Then click on links to logs of each attempt.
Diagnostics: java.io.IOException: Resource file:/opt/tst/tst.jar changed on src filesystem (expected 1516886392000, was 1516891496000
Failing this attempt. Failing the application.
主线是:
资源文件:/opt/tst/tst.jar 在 src 文件系统上更改(预期为 1516886392000,实际为 151689149600)。
这2个数字是时间戳,expected
一个确实是旧罐子的TS,在所有服务器上都相同,was
TS 是数据节点之一上新 jar 的时间戳(因为它们是scp
循环播放,TS 略有不同)。
我的问题是:我如何告诉纱线停止抱怨并使用新的纱线?
一些注意事项:
- Hortonworks 2.6,基于hadoop 2.7,
- jar只被我放在本地FS上,而不是hdfs中,
- 与 Spark 无关(我的问题在 Google 上经常出现与 Spark 相关的问题),
-
yarn.sharedcache.enabled
is false
(默认)所以yarn scmadmin -runCleanerTask
与这里无关,
- 我可以通过重用旧的 jar 来解决当前的问题,并且我可以确保所有 DN 都具有相同的 TS,但我想知道如何才能使用新版本(请注意,oozie 指向的 jar 是符号链接)当新版本发布时不必更新 oozie),
- 我宁愿将文件保留在本地 FS 上,而不必将其放在 hdfs 上,
- jar 名称非常具体,它不会与任何其他 jar 冲突,
- 工作流程以用户身份运行
yarn
我在 hdfs 上的纱线用户目录中找不到我的 jar 的任何副本(在 oozie dir 下也找不到),
- 我可以在yarn local dir /filecache下找到jar的副本,但它们的md5与我的任何(当前)版本都不匹配。
这是我的两分钱,你可以建造yarn
自己相关jar并添加到你当前的工作环境中。
这可能是跳过这种“烦人的”条件检查的解决方法。
一般步骤如下:
1、获取你使用的yarn的源代码。您可以从 Hadoop 官方网站下载它。
2、搜索错误日志如changed on file system
在 Hadoop 源代码中。
3、注释掉
4、重建Yarn相关jar
5、将其放入您的工作环境中。
您可以参考如何修复 src 文件系统问题上的资源更改更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)