Apache spark 为什么即使在spark上下文关闭后仍有剩余的java进程

Apache spark 为什么即使在spark上下文关闭后仍有剩余的java进程,apache-spark,hadoop,pyspark,Apache Spark,Hadoop,Pyspark,我用python编写了一个小应用程序,它接受请求并在工作进程中执行pyspark作业。一切正常,但即使在关闭spark上下文之后,启动spark上下文时跨越的java进程仍然存在。我检查了集群,并且在上下文关闭后,资源也被正确释放。此外,工人正在处理后续请求,没有任何问题 10542 pts/3 Sl+ 0:00 \_ Worker - 1 12960 pts/3 Sl+ 0:22 | \_ /usr/jdk64/jdk1.8.0

我用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
有两个问题

  • 为什么sparkcontext.stop不终止主节点上的java进程
  • 我的集群是kerberos集成集群。Worker提交作业,并在spark上下文中填充键表和主体。如果工人在相当长的时间内没有处理任何作业,则下一个作业将出错,但以下情况除外:
  • RemoteException(java.io.IOException):委托 令牌只能通过kerberos或web身份验证颁发

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

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

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


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

    PySpark依赖于
    py4j
    gateway,它在会话之间保持活动状态。我不知道如何强制它明确停止,只是谷歌在这个主题上…阅读“长时间运行的Spark作业”(特别是流媒体)和
    --principal
    /
    --keytab
    命令行选项(或底层Spark属性)关于驱动程序自动更新凭据的内容