Spark 快速理解

jopen 10年前發布 | 32K 次閱讀 分布式/云計算/大數據 Spark

==是什么 ==

 

目標Scope(解決什么問題)

 

在大規模的特定數據集上的迭代運算或重復查詢檢索

 

官方定義

aMapReduce-like cluster computing framework designed for low-latency iterativejobs and interactive use from an interpreter

 

個人理解

 

首先,MapReduce-like是說架構上和多數分布式計算框架類似,Spark有分配任務的主節點(Driver)和執行計算的工作節點(Worker

 

Spark 快速理解

 

其次,Low-latency基本上應該是源于Worker進程較長的生命周期,可以在一個Job過程中長駐內存執行Task,減少額外的開銷

 

然后對interative重復迭代類查詢運算的高效支持,是Spark的出發點了。最后它提供了一個基于ScalaShell方便交互式的解釋執行任務

 

==如何實現 ==

 

核心思路,架構

 

RDDSpark的核心概念是RDD (resilientdistributed dataset),指的是一個只讀的,可分區的分布式數據集,這個數據集的全部或部分可以緩存在內存中,在多次計算間重用。

 

Lineage:利用內存加快數據加載在眾多的其它的In-Memory類數據庫或Cache類系統中也有實現,Spark的主要區別在于它處理分布式運算環境下的數據容錯性(節點實效/數據丟失)問題時采用的方案。為了保證RDD中數據的魯棒性,RDD數據集通過所謂的血統關系(Lineage)記住了它是如何從其它RDD中演變過來的。相比其它系統的細顆粒度的內存數據更新級別的備份或者LOG機制,RDDLineage記錄的是粗顆粒度的特定數據變換(Transformation)操作(filter, map, join etc.)行為。當這個RDD的部分分區數據丟失時,它可以通過Lineage獲取足夠的信息來重新運算和恢復丟失的數據分區。這種粗顆粒的數據模型,限制了Spark的運用場合,但同時相比細顆粒度的數據模型,也帶來了性能的提升。

 

總之,Spark的核心思路就是將數據集緩存在內存中加快讀取速度,同時用lineage關聯的RDD以較小的性能代價保證數據的魯棒性。

 

適用領域

 

正如其目標scopeSpark適用于需要多次操作特定數據集的應用場合。需要反復操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。

 

細節

 

使用內存緩存數據集快在哪里?主要是幾個方面:首先是磁盤IO,其次數據的序列化和反序列化的開銷也節省了,最后相對其它內存數據庫系統,粗顆粒度的內存管理機制減小了數據容錯的代價(如典型的數據備份復制機制)

 

==相關項目 ==

 

上下游項目

 

  • Discretized Streams (Spark streaming)
  • </ul>

     

    構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數據。個人理解構建在Spark上的原因大概是因為Spark的低延遲執行引擎(100ms+)勉強可以用于實時處理,而Spark的核心理念數據重用和流式數據處理本身并沒有直接的交集,相反個人感覺流式數據的無窮連續性的特性一定程度上和數據重用是沖突的。相比基于Record的其它處理框架(如Storm),RDD數據集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時兼容批量和實時數據處理的邏輯和算法。方便了一些需要歷史數據和實時數據聯合分析的特定應用場合。

     

    • Shark ( Hive on Spark)
    • </ul>

       

      Shark基本上就是在Spark的框架基礎上提供和Hive一樣的H iveQL命令接口,為了最大程度的保持和Hive的兼容性,Shark使用了HiveAPI來實現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 TaskCache對應的節點上,容錯性和計算模型方面沒有SharkRDD來得精巧和通用。

       

      Haloop:Twister類似,修改擴展了MapReduce框架,增加了循環邏輯和Data Caching

       

      ==相關文獻 ==

       

      http://spark-project.org/項目首頁

      http://shark.cs.berkeley.edu/ shark項目主頁

       

      Paper論文

      http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf

       

      ==其它 ==

       

      主要實現和編程接口基于Scala


      來自:http://blog.csdn.net/colorant/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!