1. 程式人生 > >Spark:一個高效的分散式計算系統

Spark:一個高效的分散式計算系統

概述

什麼是Spark

  • Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的平行計算框架,Spark基於map reduce演算法實現的分散式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的map reduce的演算法。其架構如下圖所示:spark-framwork

Spark與Hadoop的對比

  • Spark的中間資料放到記憶體中,對於迭代運算效率更高。
    • Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。
  • Spark比Hadoop更通用。
    • Spark提供的資料集操作型別有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如mapfilterflatMapsamplegroupByKeyreduceByKeyunionjoincogroup,mapValuessort,partionBy等多種操作型別,Spark把這些操作稱為Transformations。同時還提供Countcollectreducelookupsave等多種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是基於記憶體的迭代計算框架,適用於需要多次操作特定資料集的應用場合。需要反覆操作的次數越多,所需讀取的資料量越大,受益越大,資料量小但是計算密集度較大的場合,受益就相對較小
  • 由於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+)可以用於實時計算,另一方面相比基於Record的其它處理框架(如Storm),RDD資料集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時相容批量和實時資料處理的邏輯和演算法。方便了一些需要歷史資料和實時資料聯合分析的特定應用場合。
  • Bagel: Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小專案。Bagel自帶了一個例子,實現了Google的PageRank演算法。

在業界的使用

  • Spark專案在2009年啟動,2010年開源, 現在使用的有:Berkeley, Princeton, Klout, Foursquare, Conviva, Quantifind, Yahoo! Research & others, 淘寶等,豆瓣也在使用Spark的python克隆版Dpark。

Spark核心概念

Resilient Distributed Dataset (RDD)彈性分佈資料集

  • RDD是Spark的最基本抽象,是對分散式記憶體的抽象使用,實現了以操作本地集合的方式來操作分散式資料集的抽象實現。RDD是Spark最核心的東西,它表示已被分割槽,不可變的並能夠被並行操作的資料集合,不同的資料集格式對應不同的RDD實現。RDD必須是可序列化的。RDD可以cache到記憶體中,每次對RDD資料集的操作之後的結果,都可以存放到記憶體中,下一個操作可以直接從記憶體中輸入,省去了MapReduce大量的磁碟IO操作。這對於迭代運算比較常見的機器學習演算法, 互動式資料探勘來說,效率提升比較大。
  • RDD的特點:

    1. 它是在叢集節點上的不可變的、已分割槽的集合物件。
    2. 通過並行轉換的方式來建立如(map, filter, join, etc)。
    3. 失敗自動重建。
    4. 可以控制儲存級別(記憶體、磁碟等)來進行重用。
    5. 必須是可序列化的。
    6. 是靜態型別的。
  • RDD的好處

    1. RDD只能從持久儲存或通過Transformations操作產生,相比於分散式共享記憶體(DSM)可以更高效實現容錯,對於丟失部分資料分割槽只需根據它的lineage就可重新計算出來,而不需要做特定的Checkpoint。
    2. RDD的不變性,可以實現類Hadoop MapReduce的推測式執行。
    3. RDD的資料分割槽特性,可以通過資料的本地性來提高效能,這與Hadoop MapReduce是一樣的。
    4. RDD都是可序列化的,在記憶體不足時可自動降級為磁碟儲存,把RDD儲存於磁碟上,這時效能會有大的下降但不會差於現在的MapReduce。
  • RDD的儲存與分割槽

    1. 使用者可以選擇不同的儲存級別儲存RDD以便重用。
    2. 當前RDD預設是儲存於記憶體,但當記憶體不足時,RDD會spill到disk。
    3. RDD在需要進行分割槽把資料分佈於叢集中時會根據每條記錄Key進行分割槽(如Hash 分割槽),以此保證兩個資料集在Join時能高效。
  • RDD的內部表示
    在RDD的內部實現中每個RDD都可以使用5個方面的特性來表示:

    1. 分割槽列表(資料塊列表)
    2. 計算每個分片的函式(根據父RDD計算出此RDD)
    3. 對父RDD的依賴列表
    4. 對key-value RDD的Partitioner【可選】
    5. 每個資料分片的預定義地址列表(如HDFS上的資料塊的地址)【可選】
  • RDD的儲存級別
    RDD根據useDisk、useMemory、deserialized、replication四個引數的組合提供了11種儲存級別:

    123456789101112val NONE=newStorageLevel(false,false,false)val DISK_ONLY=newStorageLevel(true,false,false)val DISK_ONLY_2=newStorageLevel(true,false,false,2)val MEMORY_ONLY=newStorageLevel(false,true,true)val MEMORY_ONLY_2=newStorageLevel(false,true,true,2)val MEMORY_ONLY_SER

    相關推薦

    Spark一個高效分散式計算系統

    概述 什麼是Spark Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的平行計算框架,Spark基於map reduce演算法實現的分散式計算,擁有Hadoop MapReduce所具有的優點;但不同

    【技術世界】分享大資料領域技術、包括但不限於Storm、Spark、Hadoop等分散式計算系統,Kafka、MetaQ等分散式訊息系統, MongoDB等NoSQL,PostgreSQL等RDBMS,SQL優

    技術世界 分享大資料領域技術、包括但不限於Storm、Spark、Hadoop等分散式計算系統,Kafka、MetaQ等分散式訊息系統, MongoDB等NoSQL,PostgreSQL等RDBMS,SQL優...

    THULAC一個高效的中文詞法分析工具包(z'z)

    bsp 準確率 ext 效果 python3 nlp org 集成 的人 網址:http://thulac.thunlp.org/ THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與社會人文計算實驗室研制推出的一套中文詞

    學習大資料課程 spark 基於記憶體的分散式計算框架(二)RDD 程式設計基礎使用

    學習大資料課程 spark 基於記憶體的分散式計算框架(二)RDD 程式設計基礎使用   1.常用的轉換 假設rdd的元素是: {1,2,2,3}   很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完

    億級流量系統架構之如何設計高容錯分散式計算系統【石杉的架構筆記】

    歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! 億級流量架構專欄: 億級流量系統架構之如何支撐百億級資料的儲存與計算 億級流量系統架構之如何設計高容錯分散式計算系統 億級流量系統架構之如何設計承載百億流量的高效能架構【敬請期待】 億級流

    FastDHT-高效分散式Hash系統

    FastDHT是一個基於鍵值對(Key Value Pair)的高效的分散式Hash系統,她可以用來儲存大量的Key Value Pair,比如可以用來儲存檔名對映表、session資料、使用者相關資料等等。 FastDHT伺服器端底層儲存採用Berkeley DB,支援大資

    簡介分散式計算系統的硬體架構

    作者:朱金燦         一個分散式計算系統的硬體應該如何配置?個人愚見,應該根據分散式計算的計算型別來配置。分散式並行處理系統從磁碟I/O角度可以分為弱I/O和強I/O兩種。一般的網際網路大資料分析為弱I/O,這樣儲存可以採用分散式儲存,具體為一個計算節點上掛一個大硬碟

    如何設計一個實時流計算系統

    實時流計算的場景歸納起來多半是: 業務系統根據實時的操作,不斷生成事件(訊息/呼叫),然後引起一系列的處理分析,這個過程是分散在多臺計算機上並行完成的,看上去就像事件連續不斷的流經多個計算節點處理,形成一個實時流計算系統。市場上流計算產品有很多,主要是通過訊息中樞結合工人模式實現,大致過程如下: 1、開

    鷹眼海量級分散式日誌系統上雲的架構和實踐

    ​導語 | 鷹眼是由騰訊PCG技術運營部負責的海量級分散式實時監控和日誌分析系統,為響應公司戰略要求,將原先的業務遷移上雲,最終產生了可喜的變化。本文將介紹分散式日誌系統(鷹眼)的整體上雲方案,希望與大家一同交流。 一、鷹眼平臺介紹   鷹眼是由PCG技術運營部負責的海量級分散式實時監

    淺析HBase高效的可擴充套件大規模分散式系統而生

    什麼是HBase Apache HBase是執行在Hadoop叢集上的資料庫。為了實現更好的可擴充套件性(scalability),HBase放鬆了對ACID(資料庫的原子性,一致性,隔離性和永續性)的要求。因此HBase並不是一個傳統的關係型資料庫

    Druid一個用於大資料實時處理的開源分散式系統

    Druid是一個用於大資料實時查詢和分析的高容錯、高效能開源分散式系統,旨在快速處理大規模的資料,並能夠實現快速查詢和分析。尤其是當發生程式碼部署、機器故障以及其他產品系統遇到宕機等情況時,Druid仍能夠保持100%正常執行。建立Druid的最初意圖主要是為了解決查詢延遲問題,當時試圖使用Hadoop來實現

    一臉懵逼學習Storm的搭建--(一個開源的分散式實時計算系統

    1:安裝一個zookeeper叢集,之前已經部署過,這裡省略,貼一下步驟; 安裝配置zooekeeper叢集:         1.1:解壓             tar -zxvf zooke

    ANGEL一個新型的分散式機器學習系統

    引言 當前,人工智慧在多個領域的強勢崛起,讓人們領略到人工智慧技術的巨大潛力。在未來,人工智慧技術還將會改變包括金融、醫療、通訊、教育、交通、能源在內的所有行業[1]。現階段的人工智慧主要依賴機器學習技術和大資料,通過對海量資料進行抽象表示和建模,來幫助人們做出判斷和決策。 機器學習模型的求解方法大致分為

    Bigtable一個分散式的結構化資料儲存系統

    修正了alex翻譯版的幾個欠妥之處 Bigtable:一個分散式的結構化資料儲存系統 摘要 Bigtable是一個管理結構化資料的分散式儲存系統,它被設計用來處理海量資料:分佈在數千臺通用伺服器上的PB級的資料。Google的很多專案將資料儲存在Bigtable中,包

    Inxi一個功能強大的獲取Linux系統信息的命令行工具

    linux查看系統配置Inxi 最初是為控制臺和 IRC(網絡中繼聊天)開發的一個強大且優秀的命令行系統信息腳本。可以使用它獲取用戶的硬件和系統信息,它也用於調試或者社區技術支持工具。使用 Inxi 可以很容易的獲取所有的硬件信息:硬盤、聲卡、顯卡、網卡、CPU 和 RAM 等。同時也能夠獲取大量的操作系統

    一臉懵逼學習Storm---(一個開源的分布式實時計算系統

    在線 協調 深入 tor grouping 分配 有一點 cbo con 1:什麽是Storm?  Storm是一個開源的分布式實時計算系統,可以簡單、可靠的處理大量的數據流。被稱作“實時的hadoop”。Storm有很多使用場景:如實時分析,在線機

    【轉】TeXmacs一個真正“所見即所得”的排版系統

    min 重新 -c href .org 所見 思維 pac acs TeXmacs:一個真正“所見即所得”的排版系統 好久沒有推薦過自己喜歡的軟件了,現在推薦一款我在美國做數學作業的私家法寶:TeXmacs。我恐怕不可能跟以前那麽有閑心寫個長篇的 TeXmacs 說明文

    分布式計算系統導論原理與組成pdf

    單元 ext 安全 kerberos 服務器 互連 令牌 ID AS 下載地址:網盤下載 內容提要《分布式計算系統導論:原理與組成/普通高等教育“十一五”國家級規劃教材》較全面地介紹分布式計算系統的原理與組成,包括命名、進程、通信、同步與互斥和多副本一致性技術,以及網絡存儲

    ResNeXt——與 ResNet 相比,相同的參數個數,結果更好一個 101 層的 ResNeXt 網絡,和 200 層的 ResNet 準確度差不多,但是計算量只有後者的一半

    模式 這樣的 cap dfa 不同 dual 重復 ORC 但是 from:https://blog.csdn.net/xuanwu_yan/article/details/53455260 背景 論文地址:Aggregated Residual Transformati

    C++程設實驗項目二用正則表達式制作一個簡易的SQL系統

    search linux c++ AC 2.0 地方 文件的 由於 font 本文將盡可能簡單地概括如何搭起這個SQL系統的框架。 一、正則表達式分析語句 首先需要使用c++的regex庫: #include <regex> 推薦到菜鳥教程上了解正則表達