1

運行約10小時後,我的Spark驅動程序運行內存不足,錯誤爲Exception in thread "dispatcher-event-loop-17" java.lang.OutOfMemoryError: GC overhead limit exceeded。爲了進一步調試,我使用了G1GC模式和GC日誌選項,使用spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties -XX:+PrintFlagsFinal -XX:+PrintReferenceGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -XX:+UnlockDiagnosticVMOptions -XX:+G1SummarizeConcMark -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp ,但它看起來不會對驅動程序起作用。Apache Spark:驅動程序的垃圾回收日誌

工作在10小時後再次卡在驅動程序上,我在驅動程序節點上的標準輸出下看不到任何GC日誌,在/var/log/hadoop-yar/userlogs/[application-id]/[container-id]/stdout之下 - 所以不確定在哪裏尋找。根據Spark GC tuning docs,它看起來像這些設置只發生在工人節點上(我可以看到在這種情況下,以及工作人員在使用spark.executor.extraJavaOptions下的相同配置之後在stdout中有GC日誌)。無論如何,啓用/從驅動程序獲取GC日誌?在Spark UI - > Environment下,我看到這些選項在spark.driver.extraJavaOptions下列出,這就是我認爲它會起作用的原因。

環境: 集羣是在谷歌Dataproc運行,我用/usr/bin/spark-submit --master yarn --deploy-mode cluster ...從主提交作業。

編輯 在​​命令出廠設定爲駕駛相同的選項,我能夠看到在標準輸出上GC日誌驅動程序。只需通過SparkConf以編程方式設置選項似乎不會因某種原因而生效。

回答

2

我認爲spark.driver.extraJavaOptions是由SparkSubmit.scala處理,需要在調用時傳遞。要使用Dataproc完成此操作,您可以將其添加到the properties field--propertiesgcloud dataproc jobs submit spark)。

而不是-Dlog4j.configuration=log4j.properties您可以使用this guide配置詳細的日誌記錄。

我可以看到GC驅動程序日誌與: gcloud dataproc jobs submit spark --cluster CLUSTER_NAME --class org.apache.spark.examples.SparkPi --jars file:///usr/lib/spark/examples/jars/spark-examples.jar --driver-log-levels ROOT=DEBUG --properties=spark.driver.extraJavaOptions="-XX:+PrintFlagsFinal -XX:+PrintReferenceGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -XX:+UnlockDiagnosticVMOptions -XX:+G1SummarizeConcMark -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp" --

你可能不需要--driver-log-levels ROOT=DEBUG,但可以在你的日誌記錄配置從log4j.properties複製。如果您真的想使用log4j.properties,您可以使用--files log4j.properties

+0

感謝您的快速響應。我們設置工作的方式,我們重複使用相同的JAR來提交具有不同屬性的多個運行,這些屬性是JAR本身資源的一部分。因此,使用spark-submit有助於我們推送一次JAR並多次重複使用它。另外,我們在gcloud提交過程中遇到了一些隨機問題,這就是爲什麼我們開始使用spark-submit(我們有內部的Google案例,這些案例沒有多大用處)。 –

+0

你對提交流程的一部分的建議解釋了它爲什麼與spark-submit一起工作 - 所以我想這可以解決問題。謝謝您的幫助 –