什麼是Spark?,Spark?
什麼是Spark
Spark是一個基於記憶體計算的開源的叢集計算系統,目的是讓資料分析更加快速。Spark非常小巧玲瓏,由加州伯克利大學AMP實驗室的Matei為主的小團隊所開發。使用的語言是Scala,項目的core部分的代碼只有63個Scala檔案,非常短小精悍。
Spark 是一種與 Hadoop 相似的開源叢集計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了記憶體分布資料集,除了能夠提供互動式查詢外,它還可以最佳化迭代工作負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程式架構。與 Hadoop 不同,Spark 和 Scala 能夠緊密整合,其中的 Scala 可以像操作本地集合對象一樣輕鬆地操作分布式資料集。
儘管建立 Spark 是為了支援分布式資料集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 檔案系統中並行運行。通過名為Mesos的第三方叢集架構可以支援此行為。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的資料分析應用程式。
Spark 叢集計算架構
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個新的叢集計算架構。首先,Spark 是為叢集計算中的特定類型的工作負載而設計,即那些在並行操作之間重用工作資料集(比如機器學習演算法)的工作負載。為了最佳化這些類型的工作負載,Spark 引進了記憶體叢集計算的概念,可在記憶體叢集計算中將資料集緩衝在記憶體中,以縮短訪問延遲。
Spark 還引進了名為彈性分布式資料集(RDD) 的抽象。RDD 是分布在一組節點中的唯讀對象集合。這些集合是彈性的,如果資料集一部分丟失,則可以對它們進行重建。重建部分資料集的過程依賴於容錯機制,該機制可以維護 "血統"(即允許基於資料衍生過程重建部分資料集的資訊)。RDD 被表示為一個 Scala 對象,並且可以從檔案中建立它;一個並行化的切片(遍佈於節點之間);另一個 RDD 的轉換形式;並且最終會徹底改變現有 RDD 的持久性,比如請求緩衝在記憶體中。
Spark 中的應用程式稱為驅動程式,這些驅動程式可實現在單一節點上執行的操作或在一組節點上並存執行的操作。與 Hadoop 類似,Spark 支援單節點叢集或多節點叢集。對於多節點操作,Spark 依賴於 Mesos 叢集管理器。Mesos 為分布式應用程式的資源共用和隔離提供了一個有效平台。該設定充許 Spark 與 Hadoop 共存於節點的一個共用池中。
Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算架構,Spark基於map reduce演算法實現的分散式運算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料採礦與機器學習等需要迭代的map reduce的演算法。其架構如所示:
Spark與Hadoop的對比
Spark的中間資料放到記憶體中,對於迭代運算效率更高。
Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的資料集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時還提供Count, collect, reduce, lookup, save等多種actions操作。
這些多種多樣的資料集操作類型,給給開發上層應用的使用者提供了方便。各個處理節點之間的通訊模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。使用者可以命名,物化,控制中間結果的儲存、分區等。可以說編程模型比Hadoop更靈活。
不過由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的儲存或者是增量的web爬蟲和索引。就是對於那種增量修改的應用程式模型不適合。
容錯性
在分布式資料集計算時通過checkpoint來實現容錯,而checkpoint有兩種方式,一個是checkpoint data,一個是logging the updates。使用者可以控制採用哪種方式來實現容錯。
可用性
Spark通過提供豐富的Scala, Java,Python API及互動式Shell來提高可用性。
Spark與Hadoop的結合
Spark可以直接對HDFS進行資料的讀寫,同樣支援Spark on YARN。Spark可以與MapReduce運行於同叢集中,共用儲存資源與計算,資料倉儲Shark實現上借用Hive,幾乎與Hive完全相容。
Spark的適用情境
Spark是基於記憶體的迭代計算架構,適用於需要多次操作特定資料集的應用場合。需要反覆操作的次數越多,所需讀取的資料量越大,受益越大,資料量小但是計算密集度較大的場合,受益就相對較小(大資料庫結構描述中這是是否考慮使用Spark的重要因素)
由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的儲存或者是增量的web爬蟲和索引。就是對於那種增量修改的應用程式模型不適合。
總的來說Spark的適用面比較廣泛且比較通用。
運行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生態系統
Shark ( Hive on Spark): Shark基本上就是在Spark的架構基礎上提供和Hive一樣的H iveQL命令介面,為了最大程度的保持和Hive的相容性,Shark使用了Hive的API來實現query Parsing和 Logic Plan generation,最後的PhysicalPlan execution階段用Spark代替Hadoop MapReduce。通過配置Shark參數,Shark可以自動在記憶體中緩衝特定的RDD,實現資料重用,進而加快特定資料集的檢索。同時,Shark通過UDF使用者自訂函數實現特定的資料分析學習演算法,使得SQL資料查詢和運算分析能結合在一起,最大化RDD的重複使用。
Spark streaming: 構建在Spark上處理Stream資料的架構,基本的原理是將Stream資料分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分資料。Spark Streaming構建在Spark上,一方面是因為Spark的低順延強制引擎(100ms+)可以用於Realtime Compute,另一方面相比基於Record的其它處理架構(如Storm),RDD資料集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時相容批量和即時資料處理的邏輯和演算法。方便了一些需要曆史資料和即時資料聯合分析的特定應用場合。
Bagel: Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小項目。Bagel內建了一個例子,實現了Google的PageRank演算法。
Hadoop,HBase,Storm,Spark到底是什嗎?Hadoop=HDFS+Hive+Pig+...
HDFS: 儲存系統
MapReduce:計算系統
Hive:提供給SQL開發人員(通過HiveQL)的MapReduce,基於Hadoop的資料倉儲架構
Pig:基於Hadoop的語言開發的
HBase:NoSQL資料庫
Flume:一個收集處理Hadoop資料的架構
Oozie:一個讓使用者以多種語言(如MapReduce,Pig和Hive)定義一系列作業的工作流程處理系統
Ambari:一個基於web的部署/管理/監控Hadoop叢集的工具集
Avro:允許編碼Hadoop檔案的schema的一種資料序列化系統
Mahout:一個資料採礦庫,它包含了最流行的一些資料挖據演算法,並且以MapReduce模型來實現他們
Sqoop:一個從非Hadoop資料存放區(如關聯式資料庫和資料倉儲)進來的移動資料到Hadoop中的串連工具
HCatalog:一個中心化的中繼資料管理以及Apache Hadoop共用服務,它允許在Hadoop叢集中的所有資料的統一視圖,並允許不同的工具,包括Pig和Hive,處理任何資料元素,而無需知道身體在叢集中的資料存放區。
BigTop:為了創造一個更正式的程式或架構Hadoop的子項目及相關組件的目標提高Hadoop的平台,作為一個整體的封裝和互通性測試。
Apache Storm:一個分布式Realtime Compute系統,Storm是一個任務並行連續計算引擎。 Storm本身並不典型在Hadoop叢集上運行,它使用Apache ZooKeeper的和自己的主/從背景工作處理序,協調拓撲,主機和工作者狀態,保證資訊的語義。無論如何, Storm必定還是可以從HDFS檔案消費或者從檔案寫入到HDFS。
Apache Spark:一種快速,通用引擎用於大規模資料處理,Spark是一個資料並行通用批量處理引擎。工作流程中在一個類似的和懷舊風格的MapReduce中定義,但是,比傳統Hadoop MapReduce的更能幹。Apache Spark有其流API項目,該項目通過短間隔批次允許連續處理。Apache Spark本身並不需要Hadoop操作。但是,它的資料並行模式,需要穩定的資料最佳化使用共用檔案系統。該穩定源的範圍可以從S3,NFS或更典型地,HDFS。執行Spark應用程式並不需要Hadoop YARN。Spark有自己獨立的主/伺服器處理序。然而,這是共同的運行使用YARN容器Spark的應用程式。此外,Spark還可以在Mesos叢集上運行。
以上借鑒的文章:http://www.d1net.com/bigdata/news/316561.html
http://www.d1net.com/bigdata/news/316561.html
著作權聲明:歡迎轉載,希望在你轉載的同時,添加原文地址,謝謝配合