MapReduce存在的問題
1. MapReduce框架局限性
1)僅支持Map和Reduce兩種操作
2)處理效率低效。
a)Map中間結果寫磁盤,Reduce寫HDFS,多個MR之間通過HDFS交換數據; 任務調度和啟動開銷大;
b)無法充分利用內存
c)Map端和Reduce端均需要排序
3)不適合迭代計算(如機器學習、圖計算等),交互式處理(數據挖掘) 和流式處理(點擊日志分析)
2. MapReduce編程不夠靈活
1)嘗試scala函數式編程語言
Spark
1. 高效(比MapReduce快10~100倍)
1)內存計算引擎,提供Cache機制來支持需要反復迭代計算或者多次數據共享,減少數據讀取的IO開銷
2)DAG引擎,減少多次計算之間中間結果寫到HDFS的開銷
3)使用多線程池模型來減少task啟動開稍,shuffle過程中避免 不必要的sort操作以及減少磁盤IO操作
2. 易用
1)提供了豐富的API,支持Java,Scala,Python和R四種語言
2)代碼量比MapReduce少2~5倍
3. 與Hadoop集成 讀寫HDFS/Hbase 與YARN集成
