Spark集群模式&线程

时间:2017-08-29 18:17:25

标签: apache-spark yarn

我正在从网关以纱线群集模式启动一个spark应用程序(2.1.0),其中包含选项spark-submit。但是,我发现<form action='buddy_update.php' method='GET'>在网关上启动的进程仍然在本地创建了数百个线程。我希望线程将在工作节点上创建,而不是在网关中创建,因为群集模式已激活。集群模式由日志确认。为什么要在网关中启动数百个线程?

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

1 个答案:

答案 0 :(得分:1)

您可能遇到此处报告的问题https://issues.apache.org/jira/browse/HDFS-7718。此问题似乎影响了我们公司,在启用了Cloudera的{​​{1}}群集上,使用kerberos部署模式减少了节点启动cluster上的资源消耗。我们会看到从我们的网关节点启动一些Spark作业会导致错误,如:

spark-submit

要调查这确实是影响您的问题,请尝试在Yarn Application Master JVM上启动java.lang.OutOfMemoryError: Unable to create new native thread ,并查看您的线程的外观。如果您看到许多线程具有以下堆栈跟踪:

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) 时,每次分析新jar以在HDFS中缓存时,我们的spark.yarn.jars将增加1个线程使用的线程数。每个新线程都具有上述堆栈跟踪。在我们的例子中,我们有ApplicationMaster个实例创建一个新的hdfs.DFSClient,创建一个新的KMSClientProvider,创建新的线程,每个缓存的jar一个。对我们有用的简单解决方法是避免使用ReloadingX509TrustManager

为了完整起见,您可能还需要了解此问题https://issues.apache.org/jira/browse/HADOOP-11368