Hadoop與Spark
行業普遍使用Hadoop來分析他們的數據集。緣由是Hadoop框架基於一個簡單的編程模型(MapReduce),它支持可擴展,靈活,容錯和成本有效的計算解決方案。這裏,主要關注的是在處理大型數據集時在查詢之間的等待時間和運行程序的等待時間方面保持速度。
Spark由Apache Software Foundation引入,用於加速Hadoop計算軟件過程。
對於一個廣泛的信念,
Spark不是Hadoop的修改版本,並非真的依賴於Hadoop,由於它有本身的集羣管理。 Hadoop只是實現Spark的方法之一。
Spark以兩種方式使用Hadoop - 一個是
存儲,另外一個是
處理。因爲Spark具備本身的集羣管理計算,所以它僅使用Hadoop進行存儲。
Apache Spark簡介
Apache Spark是一種快速的集羣計算技術,專爲快速計算而設計。它基於Hadoop MapReduce,它擴展了MapReduce模型,以有效地將其用於更多類型的計算,包括交互式查詢和流處理。 Spark的主要特性是它的
內存中集羣計算,提升了應用程序的處理速度。
Spark旨在涵蓋各類工做負載,如批處理應用程序,迭代算法,交互式查詢和流式處理。除了在相應系統中支持全部這些工做負載以外,它還減小了維護單獨工具的管理負擔。
Apache Spark的演變
Spark是Hadoop在2009年在加州大學伯克利分校的Matei Zaharia的AMPLab開發的子項目之一。它是在2010年根據BSD許可開放。它在2013年捐贈給Apache軟件基金會,如今Apache Spark已經成爲2014年2月的頂級Apache項目。
Apache Spark的特性
Apache Spark具備如下功能。
速度算法
Spark有助於在Hadoop集羣中運行應用程序,在內存中速度提升100倍,在磁盤上運行時提升10倍。這能夠經過減小對磁盤的讀/寫操做的數量來實現。它將中間處理數據存儲在存儲器中。shell
支持多種語言編程
Spark在Java,Scala或Python中提供了內置的API。所以,您可使用不一樣的語言編寫應用程序。 Spark提供了80個高級操做員進行交互式查詢。架構
高級分析框架
Spark不只支持「Map」和「reduce」。它還支持SQL查詢,流數據,機器學習(ML)和圖算法。機器學習
Spark基於Hadoop
下圖顯示瞭如何使用Hadoop組件構建Spark的三種方式。
Spark部署有三種方式,以下所述。
Standalone- Spark獨立部署意味着Spark佔據HDFS(Hadoop分佈式文件系統)頂部的位置,並明確爲HDFS分配空間。 這裏,Spark和MapReduce將並行運行以覆蓋集羣上的全部spark做業。
Hadoop Yarn- Hadoop Yarn部署意味着,spark只需運行在Yarn上,無需任何預安裝或根訪問。 它有助於將Spark集成到Hadoop生態系統或Hadoop堆棧中。 它容許其餘組件在堆棧頂部運行。
Spark in MapReduce (SIMR) - MapReduce中的Spark用於在獨立部署以外啓動spark job。 使用SIMR,用戶能夠啓動Spark並使用其shell而無需任何管理訪問。
Spark的組件
下圖說明了Spark的不一樣組件。
Apache Spark Core
Spark Core是spark平臺的基礎通用執行引擎,全部其餘功能都是基於。它在外部存儲系統中提供內存計算和引用數據集。
Spark SQL
Spark SQL是Spark Core之上的一個組件,它引入了一個稱爲SchemaRDD的新數據抽象,它爲結構化和半結構化數據提供支持。
Spark Streaming分佈式
Spark Streaming利用Spark Core的快速調度功能來執行流式分析。它以小批量獲取數據,並對這些小批量的數據執行RDD(彈性分佈式數據集)轉換。
MLlib (Machine Learning Library)工具
MLlib是Spark之上的分佈式機器學習框架,由於基於分佈式內存的Spark架構。根據基準,它是由MLlib開發人員針對交替最小二乘法(ALS)實現完成的。 Spark MLlib是基於Hadoop磁盤的
Apache Mahout版本的9倍(在Mahout得到了Spark接口以前)。
GraphX GraphX是Spark上的一個分佈式圖形處理框架。它提供了一個用於表達圖形計算的API,能夠經過使用Pregel抽象API爲用戶定義的圖形建模。它還爲此抽象提供了一個優化的運行時。