2017-04-16 20 views
1

我使用spark進行批處理分析。爲什麼SparkSession初始化在單個應用程序中每次迭代都需要更長的時間?

我在具有128G內存和32核CPU的獨立Ubuntu服務器上運行Spark。沒有任何其他配置參數運行spark-sumbit my_code.py

在while循環中,我開始SparkSession,分析數據,然後停止上下文,並且此過程每10秒重複一次。

while True: 
    spark = SparkSession.builder.appName("sync_task").config('spark.driver.maxResultSize' , '5g').getOrCreate() 
    sc = spark.sparkContext 

    #some process and analyze 

    spark.stop() 

程序啓動時,它可以很好地工作。

但是當它工作幾個小時。火花初始化需要很長時間。 它只需10或20秒就可以初始化火花。

那麼問題是什麼?

回答

1

您使用單個JVM local運行模式。我無法解釋你的情況到底發生了什麼,但看到這個單一的JVM越來越承受內存壓力就不足爲奇了。它開始乾淨,隨着時間的推移,Spark在他們獲得GCed之前會留下一些臨時對象。

我強烈建議附加jconsole來查看JVM指標並監視內存和CPU使用情況。

+0

那麼是什麼解決方案,如果內存或CPU使用率增加,我應該怎麼做來解決這個問題? –

+1

@JacekLaskowski另外[SPARK-20352](https://issues.apache.org/jira/browse/SPARK-20352?jql=project%20%3D%20SPARK)(OP明確打開)。 – zero323

+0

@JacekLaskowski我應該在Jconsole中監視哪些度量標準以查看內存使用情況和CPU使用情況? –

相關問題