由于令牌在 24 小时后无法在缓存中找到,Spark Launcher 作业未启动

Posted

技术标签:

【中文标题】由于令牌在 24 小时后无法在缓存中找到,Spark Launcher 作业未启动【英文标题】:Spark Launcher Jobs not starting because of token cant be found in cache after 24 hours 【发布时间】:2017-07-01 10:29:11 【问题描述】:

我有一个 Java 应用程序,它连续运行并检查数据库中的表是否有新记录。当在表中添加新记录时,Java 应用程序会执行解压缩文件并将其放入 HDFS 位置,然后触发 Spark 作业(我正在使用 Java 应用程序内的“SparkLauncher”类以编程方式触发 Spark 作业),它对 HDFS 位置中新添加的文件进行处理。

我已经使用 Oozie Java Action 在集群中安排了 Java 应用程序。 该集群是 HDP kerberized 集群。

该作业 24 小时运行良好。所有的解压缩都会发生,并且 spark 作业正在运行。

但 24 小时后,解压缩发生在 Java 应用程序中,但 Spark 作业未在资源管理器中触发。

异常:连接服务器时遇到异常:INFO:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.token.SecretManager$InvalidToken):token (owner=****, renewer =oozie mr token, realUser=oozie, issueDate=1498798762481, maxDate=1499403562481, sequenceNumber=36550, masterKeyId=619) 在缓存中找不到

据我了解,24 小时后 oozie 正在更新令牌,而该令牌并未针对 Spark 启动器作业进行更新。 spark Launcher 仍在寻找缓存中不可用的旧令牌。

请帮助我,如何让 Spark Launcher 寻找新令牌。

【问题讨论】:

【参考方案1】:

据我了解,24 小时后 oozie 正在更新令牌

为什么?你能指出任何文档、源代码、博客吗?

请记住,Oozie 是批处理作业的调度程序,其规范用例(在 Yahoo!)用于触发每小时作业。 只有一个病态的批处理作业会运行超过 24 小时,因此更新 Hadoop 委托令牌在 Oozie 中并不是真正有用。

但是您的 Java 事物充当服务,持续运行,并且在崩溃时需要自动重启。所以你应该考虑...

Slider,如果你真的想在 YARN 中运行它(虽然有 有很多很多的缺点——你如何检查 正在运行的 YARN 作业的日志?您如何确保应用程序按时启动并且不会因缺乏资源而延迟?你怎么能确保你的应用不会因为 YARN 需要资源来完成高优先级的工作而被杀死?) 但是仅仅运行你的玩具应用可能有点过头了 或在某个边缘节点上运行的普通 Linux 服务 - 这是一个自己动手的任务,但不是非常复杂,并且网上有教程

如果您坚持使用 Oozie,尽管 YARN 和 Oozie 都有所有限制,那么您必须更改应用程序的运行方式——例如,安排 Coordinator 每 12 小时启动一次作业并通过“标称时间”作为 Workflow 属性,编辑 Workflow 以将该时间传递给 Java 应用程序,编辑 Java 代码以便应用程序在 (arg + 11:58) 退出并为下一个 exec 扫清道路。

【讨论】:

以上是关于由于令牌在 24 小时后无法在缓存中找到,Spark Launcher 作业未启动的主要内容,如果未能解决你的问题,请参考以下文章

如何生成 24 小时后过期的唯一令牌?

Ionic ios push:无法在缓存中找到令牌错误域=com.google.iid 代码=-25300“(空)”

Firebase 令牌在 1 小时内过期后如何保留用户?

Amazon Cloudfront Cache-Control:no-cache 标头在 24 小时后无效

在 nodejs 中使用 JWT 刷新令牌的最佳实践

在节点中设置分布式缓存