2017-08-29 62 views
0

我正在从网关启动纱线群集模式下的spark应用程序(2.1.0),其选项为--master yarn --deploy-mode cluster。但是,我看到网关上的​​启动的进程仍在本地创建数百个线程。我预计线程将在工作节点上创建,而不是在网关中,因为集群模式已激活。群集模式由日志确认。为什么会在网关中启动数百个线程?Spark群集模式和线程

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

+0

我在Cloudera 5.6.0上运行(hadoop 2.6.0) – pgrandjean

+0

编辑添加更多详细信息。 – pgrandjean

回答

1

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

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

要调查,如果这确实是影响你,尝试对纱线的应用掌握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将每增加一个新的jar分析缓存在HDFS中时使用的线程数量增加1。每个新线程都有上述的堆栈跟踪。在我们的例子中,我们有hdfs.DFSClient实例创建一个新的KMSClientProvider,创建一个新的ReloadingX509TrustManager,创建新的线程,每个缓存的jar一个。一个简单的解决方法,为我们工作是避免使用spark.yarn.jars

为了完整起见,您可能还想看看这个问题https://issues.apache.org/jira/browse/HADOOP-11368

相关问题