2017-03-09 66 views
0

我有以下DAG爲什麼要堅持RDD DISK不會提高性能?

  1. 生成一個RDD用200萬條記錄
  2. 堅持的RDD到磁盤(StorageLevel.DISK_ONLY())
  3. 篩選每個偶數記錄在RDD(的50%記錄)
  4. 存儲到磁盤(saveAsNewAPIHadoopDataset
  5. 過濾器在RDD每個奇數記錄(的記錄50%)
  6. 存儲到磁盤(saveAsNewAPIHadoopDataset

的RDD的磁盤上的大小是實現第一個動作所花費的時間100GB

總數(步驟4)10分鐘

我會想到對於第二個操作(步驟6),RDD將從磁盤加載過濾等。花費更短的時間。

但實際上它需要相同的時間量10分鐘

從磁盤加載100GB rdd是否真的花費了與生成rdd相同的時間?

有什麼可以解釋這一點?我是否遇到某種IO瓶頸?如何解決這個問題?

回答

0

作業鏈:您想在一個作業中運行多個作業,具體取決於以前的輸出。

的MapReduce pardigm:1MR工作=>在HDFS =>從HDFS 2 MR工作來節省輸出=> .......

星火=>嘗試在內存來容納儘可能多的數據可能,否則我們會陷入MapReduce範例的低效率。

現在來到你的問題:

  1. 星火會做一些優化,同時節省磁盤上的數據,但它沒有比在內存中。
  2. Spark生成MapTask和Reduce Task的鏈。我們應該儘量在內存中保存儘可能多的數據,最好的情況是儘量只在一個MR任務中完成 任務。

對於深入understaning請按照

http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/