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

Spark Launcher Jobs not starting because of token cant be found in cache after 24 hours

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

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

作业 24 小时都运行良好。所有解压缩都发生了,火花作业是 运行.

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

异常:连接到服务器时遇到异常:信息: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 启动器仍在寻找缓存中不可用的旧令牌。

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

As per my understanding, after 24 hours oozie is renewing the token

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

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

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

  • 要么 Slider,如果你真的想 运行 它在 YARN 里面(虽然有 有很多很多缺点——你如何检查 运行ning YARN 作业的日志?您如何确保应用程序按时启动并且不会因缺乏资源而延迟?你怎么能确保你的应用程序不会因为 YARN 需要高优先级工作的资源而被杀死?) 但它可能只是 运行 宁你的玩具应用程序
  • 或者一个简单的 Linux 服务 运行 在一些边缘节点上运行——这是一个自己动手的任务,但不是非常复杂,网络上有教程

如果你坚持使用 Oozie,尽管 YARN 和 Oozie 都有所有限制,那么你必须改变你的应用程序 运行s 的方式——例如,安排协调器启动一个每 12 小时执行一次作业并将 "nominal time" 作为工作流 属性 传递,编辑工作流以将该时间传递给 Java 应用程序,编辑 Java 代码以便应用程序在 ( arg + 11:58) 并为下一个执行扫清道路。