我有一個4節點的Spark Standalone羣集,並在其上運行Spark Streaming作業。當我增加資源時Spark Streaming Job OOM
當我提交作業,每個執行人一切的7芯平穩運行:
spark-submit --class com.test.StreamingJob --supervise --master spark://{SPARK_MASTER_IP}:7077 --executor-memory 30G --executor-cores 7 --total-executor-cores 28 /path/to/jar/spark-job.jar
當我增加至執行人沒有一個批次的24個核心得到處理,我看到java.lang.OutOfMemoryError:無法在執行器日誌中創建新的本地線程。執行人則持續出現故障:
spark-submit --class com.test.StreamingJob --supervise --master spark://{SPARK_MASTER_IP}:7077 --executor-memory 30G --executor-cores 24 --total-executor-cores 96 /path/to/jar/spark-job.jar
錯誤:
17/01/12 16:01:00 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[Shutdown-checker,5,main]
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
at io.netty.util.concurrent.SingleThreadEventExecutor.shutdownGracefully(SingleThreadEventExecutor.java:534)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.shutdownGracefully(MultithreadEventExecutorGroup.java:146)
at io.netty.util.concurrent.AbstractEventExecutorGroup.shutdownGracefully(AbstractEventExecutorGroup.java:69)
at com.datastax.driver.core.NettyOptions.onClusterClose(NettyOptions.java:190)
at com.datastax.driver.core.Connection$Factory.shutdown(Connection.java:844)
at com.datastax.driver.core.Cluster$Manager$ClusterCloseFuture$1.run(Cluster.java:2488)
我發現這個question並試圖大幅加大了ulimits,但它沒有任何效果。
每個盒子有32個核心和61.8 GB的內存。流式作業是用java編寫的,運行在Spark 2.0.0上,並通過spark-cassandra-connector-java_2.10 1.5.0-M2連接到Cassandra 3.7.0。
數據是一個非常小的每秒少於100個事件的涓流,每個事件都小於200B。
數據的大小是多少?您能夠檢查羣集中每個節點的總RAM和每個節點的內核數量嗎? –
所以問題是你爲每個執行器分配24個executor核心/機器和30GB內存。所以你分配720GB的總內存。你的集羣只有247GB的內存,因此你的內存異常情況下出現:) –
@ sandeep-singh每個工人只有一個執行器。這些是每個執行者的限制。 – Kevin