Spark 快速理解
==是什么 ==
目標Scope(解決什么問題)
在大規模的特定數據集上的迭代運算或重復查詢檢索
官方定義
aMapReduce-like cluster computing framework designed for low-latency iterativejobs and interactive use from an interpreter
個人理解
首先,MapReduce-like是說架構上和多數分布式計算框架類似,Spark有分配任務的主節點(Driver)和執行計算的工作節點(Worker)
其次,Low-latency基本上應該是源于Worker進程較長的生命周期,可以在一個Job過程中長駐內存執行Task,減少額外的開銷
然后對interative重復迭代類查詢運算的高效支持,是Spark的出發點了。最后它提供了一個基于Scala的Shell方便交互式的解釋執行任務
==如何實現 ==
核心思路,架構
RDD:Spark的核心概念是RDD (resilientdistributed dataset),指的是一個只讀的,可分區的分布式數據集,這個數據集的全部或部分可以緩存在內存中,在多次計算間重用。
Lineage:利用內存加快數據加載在眾多的其它的In-Memory類數據庫或Cache類系統中也有實現,Spark的主要區別在于它處理分布式運算環境下的數據容錯性(節點實效/數據丟失)問題時采用的方案。為了保證RDD中數據的魯棒性,RDD數據集通過所謂的血統關系(Lineage)記住了它是如何從其它RDD中演變過來的。相比其它系統的細顆粒度的內存數據更新級別的備份或者LOG機制,RDD的Lineage記錄的是粗顆粒度的特定數據變換(Transformation)操作(filter, map, join etc.)行為。當這個RDD的部分分區數據丟失時,它可以通過Lineage獲取足夠的信息來重新運算和恢復丟失的數據分區。這種粗顆粒的數據模型,限制了Spark的運用場合,但同時相比細顆粒度的數據模型,也帶來了性能的提升。
總之,Spark的核心思路就是將數據集緩存在內存中加快讀取速度,同時用lineage關聯的RDD以較小的性能代價保證數據的魯棒性。
適用領域
正如其目標scope,Spark適用于需要多次操作特定數據集的應用場合。需要反復操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。
細節
使用內存緩存數據集快在哪里?主要是幾個方面:首先是磁盤IO,其次數據的序列化和反序列化的開銷也節省了,最后相對其它內存數據庫系統,粗顆粒度的內存管理機制減小了數據容錯的代價(如典型的數據備份復制機制)
==相關項目 ==
上下游項目
- Discretized Streams (Spark streaming) </ul>
- Shark ( Hive on Spark) </ul>
構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數據。個人理解構建在Spark上的原因大概是因為Spark的低延遲執行引擎(100ms+)勉強可以用于實時處理,而Spark的核心理念數據重用和流式數據處理本身并沒有直接的交集,相反個人感覺流式數據的無窮連續性的特性一定程度上和數據重用是沖突的。相比基于Record的其它處理框架(如Storm),RDD數據集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時兼容批量和實時數據處理的邏輯和算法。方便了一些需要歷史數據和實時數據聯合分析的特定應用場合。
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的重復使用。
類似項目
Twister :http://www.iterativemapreduce.org大概的意思也是通過Cache數據,實現迭代的MapReduce過程中的數據重用,不過它的模型貌似相對簡單些,大致是通過拓展MapReduce API,分發管理緩存數據,然后通過自己的Daemon進程管理和分配MapReduce Task到Cache對應的節點上,容錯性和計算模型方面沒有Shark的RDD來得精巧和通用。
Haloop:和Twister類似,修改擴展了MapReduce框架,增加了循環邏輯和Data Caching
==相關文獻 ==
http://shark.cs.berkeley.edu/ shark項目主頁
Paper論文
http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf
==其它 ==
主要實現和編程接口基于Scala
來自:http://blog.csdn.net/colorant/