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