2017-02-02 35 views
1

我們已經編寫了一些代碼,通過使用Spark 1.6.1和Scala 2.10在Scala中編寫的GraphX連接和鏈接數據集。Spark GraphX spark-shell vs spark-submit性能差異

如果我們在spark-shell中運行此代碼,它將在30分鐘內完成10個執行程序,每個執行程序10個內存& 5 cpu。

如果我們在一個帶有spark-submit的胖罐子裏運行這個過程,那麼這個過程會因爲內存不足錯誤而失敗,並且需要一個半小時才能到達那個點。

有沒有人有任何想法可能會導致此?

有誰知道如何在shell中設置SparkContext和SQLContext,並且如果我們錯過了設置我們自己的上下文的任何內容,這可能會導致spark-submit運行如此糟糕的問題?

回答

0

我想通了這一點而回,只是碰到了我的問題一次。所以想到會更新與我如何解決它。這個問題與spark-submit和spark-shell沒有區別,但是我們執行的代碼結構有所不同。

在Shell中,我將代碼解綁並逐行執行,這導致Spark生成的代碼快速高效。

使用Spark Submit,我們已經打包了代碼並將其轉換爲帶有Inheritence的類,以使代碼更易於共享和重用,但這導致Spark生成的代碼變得混亂且效率低下。當我們刪除了大部分的繼承並編寫了更簡單更實用的代碼時,性能又回到了快速高效的程度。

所以這裏的教訓是要確保你不會太多的OOP你的應用程序,並且小繼承是可以的,但是你應該盡力讓你的代碼儘可能簡單和功能強大,以便使Spark更容易生成快速高效的代碼在集羣上執行。

0

應該沒有區別。

檢查​​設置 - 可能其中一些是不正確的,並且​​具有較少數量的執行程序或內存。

打開星火Web UI中,檢查數據不歪斜,如果一切配置正確

+0

我們檢查了它們是相同的設置,即使我們提供了比shell更多的資源提交資源,它仍然會遇到問題。另外如果數據傾斜,它應該會影響shell並以相同的方式提交? –

+0

@AndyLong你可以檢查Spark Web UI中的參數值嗎? –

+0

也許有些設置被覆蓋,這就是爲什麼我想檢查來自Web UI的信息 –