Spark簡單瞭解

(1)內容借鑑自:http://blog.qiniu.com/archives/1836 感謝原文作者
這裏寫圖片描述
如圖所示,可以看出Spark包含了批處理、流處理、圖處理、機器學習、即時查詢與關係查詢等功能,這就意味着我們只需要一個框架就可以滿足各種使用場景的需求。如果放在以前,我們可能需要爲每個功能都準備一套框架,譬如採用Hadoop MapReduce來做批處理和採用Storm來做流式處理,這樣做帶來的結果是我們必須分別針對兩套計算框架編寫不同的業務代碼,而編寫出的業務代碼也幾乎無法重用;另一方面,爲了使系統穩定,我們還得額外投入人力去深入理解Hadoop MapReduce及Storm的原理,這將造成很大的人力開銷。當採用Spark後,我們只需要去理解Spark即可,另一個吸引人的地方在於Spark批處理與流計算的業務代碼幾乎可以完全重用,這也就意味着我們只需要編寫一份邏輯代碼就可以分別運行批處理與流計算。最後,Spark可以無縫使用存儲在HDFS上的數據,無需任何數據遷移動作。
同時,由於現存系統必須要與以HDFS爲代表的分佈式文件系統進行數據共享和交換,由此造成的IO開銷大幅度地降低了計算效率;除此之外,反覆的序列化與反序列化也是不可忽略的開銷。鑑於此,S**park中抽象出了RDD的概念,並基於RDD定義了一系列豐富的算子,MapReduce只是其中一個非常小的子集,與此同時,**RDD也可以被緩存在內存中,從而迭代計算可以充分地享受內存計算所帶來的加速效果。與MapReduce基於進程的計算模型不一樣,Spark基於的是多線程模型,這也意味着Spark的任務調度延遲可以控制在亞秒級,當任務特別多的時候,這麼做可以大幅度降低整體調度時間,並且爲基於macro batch的流式計算打下基礎。
Spark的另一個特色是基於DAG的任務調度與優化,Spark不需要像MapReduce一樣爲每一步操作都去調度一個作業,相反,Spark豐富的算子可以更自然地以DAG形式表達運算。同時,在Spark中,每個stage內部是有pipeline優化的,所以即使我們不使用內存緩存數據,Spark的執行效率也要比Hadoop高。最後Spark基於RDD的lineage信息來容錯,由於RDD是不可變的,Spark並不需要記錄中間狀態,當RDD的某些partition丟失時,Spark可以利用RDD的lineage信息來進行並行的恢復,不過當lineage較長時,還是推薦用戶適時checkpoint,從而減少恢復時間。

(2) 內容借鑑自http://www.jdon.com/bigdata/spark.html 感謝原作者
Spark是hadoop的升級版本,Hadoop作爲第一代產品使用HDFS,第二代加入了Cache來保存中間計算結果,並能適時主動推Map/Reduce任務,第三代就是Spark倡導的流Streaming。
Spark兼容Hadoop的APi,能夠讀寫Hadoop的HDFS HBASE 順序文件等。

Spark的編程模型
彈性的分佈數據集(RDD) :分佈式對象集合能夠跨集羣在內存中保存。多個並行操作,失敗自動恢復。
使用內存集羣計算, 內存訪問要比磁盤快得多。有Scala Java Python API,能夠從Scala和Python訪問。

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