2016-11-22 35 views
1

我已經設置了一個spark-jobserver以在精簡數據集上啓用複雜查詢。Spark JobServer,發佈的內存設置

的jobserver執行兩個操作:

  • 同步與主遠程數據庫,這使得一些服務器的表的轉儲,減少和聚合數據,並將結果保存爲實木複合地板的文件,並將它緩存作爲內存中的sql表。這項行動將每天完成;
  • 查詢,當同步操作完成時,用戶可以對聚合數據集執行SQL複雜查詢,(最終)將結果導出爲csv文件。每個用戶在一次只能做一個查詢,並等待其完成。

最大的表格(減少之前和之後,其中還包括一些連接)有近30M的行,至少有30個字段。

其實我正在開發32GB ram專用於作業服務器的開發機器,並且一切都很順利。問題在於,在生產環境中,我們擁有與PredictionIO服務器共享的相同數量的ram。

我在問如何確定內存配置,以避免內存泄漏或火花崩潰。

我是新來的,所以每一個參考或建議都被接受。

謝謝

回答

1

拿一個例子, 如果你有32克RAM的服務器。 設置以下參數:

spark.executor.memory = 32g 

拿一張紙條:

的可能首先想到的是使用--num執行人6 --executor核芯15 --executor - 內存63G。但是,這是錯誤的方法,因爲:

63GB +執行程序內存開銷不適合NodeManager的63GB容量 。應用程序主節點將在節點的一個 上佔用核心,這意味着該節點上的15核執行程序 不會有空間。每個執行程序15個內核可能會導致HDFS I/O 吞吐量不佳。

更好的選擇是使用--num-executors 17 --executor-cores 5 --executor-memory 19G。爲什麼?

該配置會導致在除了一個 AM之外的所有節點上執行三個執行程序,其中有兩個執行程序。 - 執行程序的內存爲 ,導出爲(每個節點63/3個執行程序)= 21.21 * 0.07 = 1.47。 - 21 1.47 〜19

此,如果你想知道更多的是在這裏解釋: http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/