Spark 群集模式和线程



我正在以YARN-CLUSTER模式从网关启动Spark应用程序(2.1.0),并带有选项--master yarn --deploy-mode cluster。但是,我看到spark-submit在网关上启动的过程仍在本地创建数百个线程。我希望由于群集模式被激活,因此不会在工作节点上而不是在网关上创建线程。集群模式通过日志确认。为什么在网关中启动数百个线程?

ps:我正在使用一个加密的群集运行Hadoop 2.6.0。

您可能会在此处遇到https://issues.apache.org/jira/browse/hdfs-7718。这个问题似乎对我们公司的Cloudera群集启用了kerberos启用了cluster部署模式,以减少启动spark-submit的节点上的资源消耗。我们会看到,从我们的网关节点上启动一些火花作业将导致错误:

java.lang.OutOfMemoryError: Unable to create new native thread

要调查这是否确实是影响您的问题,请尝试在YARN应用程序Master JVM上启动jstack,并查看线程的外观。如果您看到以下堆栈跟踪的许多线程:

"Truststore reloader thread" daemon prio=10 tid=0x00007fd1a5fa4000 nid=0x46f5 waiting on condition [0x00007fd086eed000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at org.apache.hadoop.security.ssl.ReloadingX509TrustManager.run(ReloadingX509TrustManager.java:189)
    at java.lang.Thread.run(Thread.java:745)

您很有资格。

在我们的情况下,当在我们的安全群集中使用spark.yarn.jars时,我们的ApplicationMaster将增加1时每次分析新JAR时使用的线程的量。每个新线程都会具有上述描述的堆栈跟踪。在我们的情况下,我们有hdfs.DFSClient实例创建一个新的KMSClientProvider,创建一个新的ReloadingX509TrustManager,该新线程创建新线程,每个缓存JAR。对我们有用的简单解决方法是避免使用spark.yarn.jars

为了完整性,您可能还需要查看此问题https://issues.apache.org/jira/browse/browse/hadoop-11368。

相关内容

  • 没有找到相关文章

最新更新