# Spark Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache的頂級項目,2014年5月發佈spark1.0,2016年7月發佈spark2.0,2020年6月 ...
Spark
Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache的頂級項目,2014年5月發佈spark1.0,2016年7月發佈spark2.0,2020年6月18日發佈spark3.0.0
特點
Hadoop的MapReduce作為第一代分散式大數據計算引擎,在設計之初,受當時電腦硬體條件所限(記憶體、磁碟、cpu等),為了能夠計算海量數據,需要將中間結果保存到HDFS中,那麼就要頻繁讀寫HDFS從而使得網路IO和磁碟IO成為性能瓶頸。Spark可以將中間結果寫到本地磁碟或將中間cache到記憶體中,節省了大量的網路IO和磁碟IO開銷。並且Spark使用更先進的DAG任務調度思想,可以將多個計算邏輯構建成一個有向無環圖,並且還會將DAG先進行優化後再生成物理執行計劃,同時 Spark也支持數據緩存在記憶體中的計算。性能比Hadoop MapReduce快100倍。即便是不將數據cache到記憶體中,其速度也是MapReduce10 倍以上。
• Ease of Use:簡潔易用
Spark支持 Java、Scala、Python和R等編程語言編寫應用程式,大大降低了使用者的門檻。自帶了80多個高等級操作運算元,並且允許在Scala,Python,R 的使用命令進行互動式運行,可以非常方便的在Spark Shell中地編寫spark程式。
• Generality:通用、全棧式數據處理
Spark提供了統一的大數據處理解決方案,非常具有吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減少開發和維護的人力成本和部署平臺的物力成本。 同時Spark還支持SQL,大大降低了大數據開發者的使用門檻,同時提供了SparkStream和Structed Streaming可以處理實時流數據;MLlib機器學習庫,提供機器學習相關的統計、分類、回歸等領域的多種演算法實現。其高度封裝的API 介面大大降低了用戶的學習成本;Spark GraghX提供分散式圖計算處理能力;PySpark支持Python編寫Spark程式;SparkR支持R語言編寫Spark程式。
• Runs Everywhere:可以運行在各種資源調度框架和讀寫多種數據源
Spark支持的多種部署方案:Standalone是Spark自帶的資源調度模式;Spark可以運行在Hadoop的YARN上面;Spark 可以運行在Mesos上(Mesos是一個類似於YARN的資源調度框架);Spark還可以Kubernetes實現容器化的資源調度
豐富的數據源支持。Spark除了可以訪問操作系統自身的本地文件系統和HDFS之外,還可以訪問 Cassandra、HBase、Hive、Alluxio(Tachyon)以及任何 Hadoop相容的數據源。這極大地方便了已經 的大數據系統進行順利遷移到Spark。
Spark與MapReduce的對比
面試題:MapReduce和Spark的本質區別:
- MR只能做離線計算,如果實現複雜計算邏輯,一個MR搞不定,就需要將多個MR按照先後順序連成一串,一個MR計算完成後會將計算結果寫入到HDFS中,下一個MR將上一個MR的輸出作為輸入,這樣就要頻繁讀寫HDFS,網路IO和磁碟IO會成為性能瓶頸。從而導致效率低下。
- spark既可以做離線計算,又可以做實時計算,提供了抽象的數據集(RDD、Dataset、DataFrame、DStream)
有高度封裝的API,運算元豐富,並且使用了更先進的DAG有向無環圖調度思想,可以對執行計劃優化後在執行,並且可以數據可以cache到記憶體中進行復用,shuffle時,數據可以不排序
註意:MR和Spark在Shuffle時數據都落本地磁碟