我正在從網關啓動紗線羣集模式下的spark應用程序(2.1.0),其選項爲--master yarn --deploy-mode cluster
。但是,我看到網關上的啓動的進程仍在本地創建數百個線程。我預計線程將在工作節點上創建,而不是在網關中,因爲集羣模式已激活。羣集模式由日誌確認。爲什麼會在網關中啓動數百個線程?Spark羣集模式和線程
PS:我正在使用運行Hadoop 2.6.0的加密羣集。
我正在從網關啓動紗線羣集模式下的spark應用程序(2.1.0),其選項爲--master yarn --deploy-mode cluster
。但是,我看到網關上的啓動的進程仍在本地創建數百個線程。我預計線程將在工作節點上創建,而不是在網關中,因爲集羣模式已激活。羣集模式由日誌確認。爲什麼會在網關中啓動數百個線程?Spark羣集模式和線程
PS:我正在使用運行Hadoop 2.6.0的加密羣集。
您可能遇到此處報告的問題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。
我在Cloudera 5.6.0上運行(hadoop 2.6.0) – pgrandjean
編輯添加更多詳細信息。 – pgrandjean