Spark作爲數據處理的核心應用,有着重要的作用和地位,那麼spark能不能取代Hadoop而存在呢?
Spark只是分佈式計算平臺,而hadoop已經是分佈式計算、存儲、管理的生態系統。
與Spark相對應的是Hadoop MapReduce。Spark是可以取代MapReduce的,從而成爲Hadoop系統中不可或缺的一部分。但是爲什麼MapReduce還在被使用呢?因爲有很多現有的應用還依賴於它,它不是一個獨立的存在,已經成爲其他生態不可替代的部分,比如pig,hive等。
至於Spark相對於Hadoop的優勢,有以下幾點:
(1)任務調度的開銷
傳統的MR系統,如Hadoop 是爲了運行長達數小時的批量作業而設計的,在某些極端情況下,提交一個任務的延遲非常高。
spark採用了事件驅動的類庫 akka來啓動任務,可以避免進程或線程啓動,以及切換開銷。
(2)數據格式和內存佈局
由於MR Schema On Read處理方式會引起較大的處理開銷。Spark抽象出分佈式內存存儲結構彈性分佈式數據集RDD,進行數據的存儲。RDD能支持粗粒度寫操作。但對於讀取操作,RDD可以精確到每條几率,這使得RDD可以用來作爲分佈式索引,Spark的特性是能夠控制數據在不同節點上的分區,用戶可以自定義分區策略,如Hash分區。Spark 和SparkSQL在Spark的基礎上實現了列存儲和列存儲壓縮
但是分佈式計算僅僅是Hadoop的一部分,所以比較Hadoop和Spark實際上是Spark和MapReduce的對比:
1、 更快
2、 更加容易使用
編程的時候沒有Map+Reduce函數,而且配置起來超級方便。除支持JAVA外,還支持Scala、Python、R。特別是Scala,很適合寫數據分析的程序,而Mapreduce用JAVA很繁瑣。
3、 巨好用的庫
4、 運行方便
Spark是可以脫離hadoop運行的,比如數據可以從數據庫或者本地文件裏面抽取。不過畢竟大數據時代,大家都習慣於將Spark和hadoop通過Mesos或者YARN結合起來用;主要用Hadoop的HDFS,當然Hbase或者Hive這種HDFS之上的組件,Spark也支持。
因此Spark是不可以取代Hadoop的,我們要區分兩者的作用和地位,纔可以更好的把握應用。我平常的時候喜歡看“大數據cn”這些微信公衆號,裏面的一些介紹也挺不錯的,大家平時可以去看看,對於改善自己的知識架構有着重要的作用。