【问题标题】:Spark cluster mode & threadsSpark 集群模式和线程
【发布时间】:2017-09-08 05:12:47
【问题描述】:

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

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

【问题讨论】:

  • 我在 Cloudera 5.6.0 (hadoop 2.6.0) 上运行
  • 已编辑以添加更多详细信息。

标签: apache-spark hadoop-yarn


【解决方案1】:

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

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

要调查这是否确实是影响您的问题,请尝试在 Yarn Application 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 将在每次分析新 jar 以缓存在 HDFS 中时使用的线程数量增加 1。每个新线程都将具有上述堆栈跟踪。在我们的例子中,我们有hdfs.DFSClient 实例创建一个新的KMSClientProvider,创建一个新的ReloadingX509TrustManager,它创建新线程,每个缓存的jar 一个。一个对我们有用的简单解决方法是避免使用spark.yarn.jars

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多