2016-06-30 37 views
0

我有一個Spark應用程序,內存不足,集羣有兩個節點,大約有30G的RAM,輸入數據大小約爲幾百GB。Apache Spark內存不足,分區數量較少

該應用程序是一個Spark SQL作業,它從HDFS讀取數據並創建一個表並緩存它,然後執行一些Spark SQL查詢並將結果寫回HDFS。

最初我將數據分成64個分區,然後我得到了OOM,然後我可以通過使用1024個分區修復內存問題。但爲什麼使用更多的分區幫助我解決了OOM問題?

回答

1

大數據解決方案是分區(分而治之)。由於不是所有的數據都可以放入內存中,而且也不能在一臺機器上處理。

每個分區都可以放入內存並在相對較短的時間內處理(地圖)。在爲每個分區處理數據之後。它需要合併(減少)。這是傳統map reduce

將數據拆分爲更多的分區意味着每個分區越來越小。

[編輯]稱爲彈性分佈式數據集(RDD)

火花使用革命概念。

  • 有兩種類型的操作,改造和阿克頓
  • 轉換的映射從一個RDD到另一個。這是懶惰的評估。那些RDD可以被當作我們不想得到的中間結果。
  • 當您真的想要獲取數據時使用操作。那些RDD /數據可以被視爲我們想要的,就像最重要的失敗一樣。
  • Spark將分析所有操作並在執行前創建DAG(定向非循環圖)。
  • Spark在啓動操作時從源RDD開始計算。然後忘記它。

Spark DAG

我做了一個小截屏上的Youtube Spark Makes Big Data Sparking介紹。

+0

我同意每個分區的大小都比較小,但由於我正在緩存RDD(應該在後文中提到這一點),這些分區應該仍然在內存中,對嗎?因此,無論分區的數量如何,內存中的數據大小都應該相同 – elgoog