Spark_1 Spark與MapReduce對比

MapReduce的缺陷

操作複雜

開發起來:因爲MapReduce只有map、reduce兩種算子。
1. low-level 低級別的。
2. constrained 有很多限制 (雖然可以使用一些類似Hive之類的框架來彌補)
並且單元測試也很麻煩

計算效率低

  1. MapReduce是屬於進程級別:MapTask ReduceTask
    雖然有JVM複用,但還是效率不高

  2. 頻繁的IO: 因爲MapReduce的作業一般都是串起來的作業,chain,一個作業的輸出作爲下一個作業的輸入…並且作業的數據一般都會存儲在HDFS上,這樣會有頻繁的磁盤和網絡的IO。數據落地的話,是需要三個副本的。

  3. MapReduce的所有任務都需要序列化
    排序:MapReduce每個場景都需要排序的,但是很多時候都是沒有必要的
    面試題:key類型是實現什麼接口?
    writable 要執行序列化的 read方法和wirte方法
    writablecomparable 排序比較的

  4. Memory:MapReduce基於內存做處理,但是是有限的

所以說MapReduce性能是很低的,迭代次數比較多的話,性能會不好

不適合迭代處理

數據挖掘,機器學習,圖計算之類的,都需要很多迭代操作,所以不適合用 MapReduce 去做

不適合實時流式處理,只能離線處理

很多框架都各自爲戰,浪費了很多資源,開發也慢,運維也不方便

Spark的特點

綜述:Spark is a fast and general engine for large-scale data processing(數據處理)
fast + general engine
fast體現在:
write code fast :Java/Scala/Python/R並支持interactive shell;
run fast : memory / DAG / Thread Model /sort可以設置成無。

計算速度快

  1. memory RDD cash
  2. thread 基於線程
  3. sort 可以設置的
  4. pipeline(流水線) rdd.map.fliter…collect
    如果是MapReduce,maptask reducetask 遇到就執行,是立刻執行的
    而 spark 是將很多操作串起來,就是一張DAG圖(有向無環圖)
    rdd.map.fliter…這些操作再多是不會執行的,需要觸發action操作纔可以來執行。
    例如:rdd.map.fliter…collect
    遇見就執行,先執行map,讀取寫入操作完了,執行fliter,讀取寫入…
    而對於Spark來說,是基於rdd來計算的
    rdd裏有分區,每一個操作都是載依賴,有action了,直接在這個分區(partition)中kaka就執行,就減少很多中間數據落地的操作(寫入讀取)

易於使用

使用Java,Scala,Python,R開發代碼塊+測試塊

80+ high-level operator:80多種高級別的算子

nteractively 交互式命令行(測試快)

通用性

一站式處理(但是也不是萬能的,只能解決一定場景的)
Combine SQL,streaming,and complex analytics
spark powers a stack of libraries including SQL and DataFrams,MLlib for machine learning,GraphX,and Spark Streaming.

Runs Everywhere

on Hadoop(Yarn),Mesos,standalone,or in the cloud
can access diverse data sources(訪問各種數據源)
including HDFS,Cassdandra,HBase,S3(Amazon)
這些都是外部數據源,如果只是跑一個SQL在Spark之上,就太low了,主要就是外部數據源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章