首页 > 解决方案 > 为什么即使在火花上下文关闭后仍有剩余的java进程

问题描述

我在 python 中编写了一个小应用程序,它接受请求并在工作进程中执行 pyspark 作业。一切正常,但即使在关闭 spark 上下文后,启动 spark 上下文时跨越的 java 进程仍然退出。我检查了集群,并且在上下文关闭后资源也正确释放。此外,工作人员正在处理后续请求,没有任何问题。

10542 pts/3    Sl+    0:00          \_ Worker - 1 
12960 pts/3    Sl+    0:22          |   \_ /usr/jdk64/jdk1.8.0_77//bin/java - hdp.version=3.0.0.0-1634 -cp /usr/hdp/3.0.0.0-1634/spark2//conf/:/usr/hdp/3.0.0.0-1634/spark2/jars/*:/usr

有2个问题

  1. 为什么 sparkcontext.stop 没有杀死主节点上的 java 进程
  2. 我的集群是 kerberos 集成集群。Worker 使用在 spark 上下文中填充的 keytab 和主体提交作业。如果 Worker 在相当长的时间内没有处理任何作业,则下一个作业会出错,但会出现异常:

org.apache.hadoop.ipc.RemoteException(java.io.IOException):Delegation Token 只能通过 kerberos 或 web 身份验证发布。

当我重新启动应用程序时,一切又好了。我怀疑是因为 java 进程中留下了过期的令牌,我正面临这个问题。有没有更好的方法来处理这种情况。

我坚信如果没有留下 java 进程,我将不会面临第二个问题。

任何建议/指针都会有很大帮助。

附加信息:作业作为“纱线”提交,部署模式为“客户端”。

标签: apache-sparkhadooppyspark

解决方案


推荐阅读