天天看點

Spark(一)Spark簡介

官網位址:​​http://spark.apache.org/​​

Spark(一)Spark簡介

apache spark 是專為大規模資料處理而設計的快速通用的計算引擎。spark是uc berkeley amp lab (加州大學伯克利分校的amp實驗室)所開源的類hadoop mapreduce的通用并行計算架構,spark擁有hadoop mapreduce所具有的優點;但不同于mapreduce的是job中間輸出結果可以儲存在記憶體中,進而不再需要讀寫hdfs,是以spark能更好地适用于資料挖掘與機器學習等需要疊代的mapreduce的算法。

問題

工具隻在解決了一些問題時才有用,對吧!那麼讓我們來讨論一下 spark 能解決的問題。

我們需要(快速擷取)答案

在批處理過程中,長時間等待運作作業的結果是意料中的事,在如今的企業中,需要快速(“近實時”)擷取答案。大資料的屬性(速度、資料量和種類)使得業務問題越來越難獲得答案,但快速擷取這些答案非常重要。

資料如此之多

資料源數不勝數且仍在增加。從 iot 裝置、實時交易、單擊流、應用到社交媒體等,資料源在不斷增加。所有資料都需要經過一定的處理,這樣分析師才能了解并從中擷取業務價值。現在您需要能處理所有這些資料,以便将它們轉化為某種能使用的資訊。能夠以越來越快的速度處理從越來越多來源傳入的海量資料,這一點很重要!

a 與 b(以及 c、d 等等)有何關聯?

您擁有所有這些有用的資料,從客戶交易、社交媒體互動到地理空間資料等等。現在您需要了解所有這些次元如何互相關聯。重要的是能看到對這個資料圖的全面分析結果,進而确定哪些資料維至關重要,哪些毫無價值。

我們需要知道(何時)将會發生什麼

您擁有所有這些寶貴的曆史資料。太棒了!現在您需要分析它們,了解發生了什麼和發生的原因,以便能預測接下來會發生什麼。重要的是能夠分析所有這些資料,以便預測将會發生的業務事件。

apache spark 不是什麼

我們常常(且很容易)合并解決一組類似問題的兩種或更多相關技術,而且在不能互換使用它們時互換使用了它們。為了避免在 spark 上犯這種錯誤,讓我們讨論一下它不是什麼。

hadoop

hadoop 是一種大資料檔案存儲和資料處理架構,它使用一種稱為 mapreduce 的技術從一個龐大的磁盤叢集讀取資料,轉換資料,并将資料寫回磁盤。另一方面,spark 使用有向非循環圖 (dag) 通過一系列步驟處理記憶體中的資料,這些步驟之間互相依賴(gradle 也使用了一種 dag),而且不會像 hadoop(通過 hadoop 分布式檔案系統,hdfs)那樣處理檔案存儲本身。

mapreduce

人們很容易将 spark core 與 mapreduce 混淆,因為它們在大資料領域都很重要。mapreduce 基本來講是一種單通算法:讀入資料,mapreduce 轉換它,然後将資料寫回到磁盤。如果需要另一次轉換,則會重複這些步驟。另一方面,spark 在記憶體中執行所有處理工作(如有必要,還會執行多次疊代),并使用 dag 确定要執行步驟的最佳順序。

與 hadoop 互相排斥

spark 被設計為與 hadoop 相容,是以 hadoop 和 spark 可以緊密協作。事實上,spark 下載下傳包含用于使用 hdfs(用于存儲管理)和 yarn(用于資源管理和排程)的 hadoop 用戶端庫。

解決方案

在一開始的時候,我就介紹了 spark 能解決的一些問題。現在我将展示 spark 如何解決這些問題。

近實時的分析在一段時間内需要高性能。spark 處理來自記憶體的資料,是以處理速度很快。spark 的核心庫支援輕松地編寫優化的代碼來獲得最快的結果。最多比 mapreduce 快 100 倍!

或許使用 spark 的最大好處是它能處理實時流資料。來自交易場所、社交媒體單擊流和 iot 裝置的資料必須在傳輸到磁盤之前快速轉換。使用 hadoop hdfs 時,需要将資料寫入磁盤,然後讀回進行 map/reduce 轉換處理,接着再寫回磁盤,然後才能交到分析師手中。

spark streaming 允許在記憶體中處理傳入的資料,然後寫入磁盤供以後擴充(如有必要)和進一步分析。

來自多個來源的資料(比如交易資料、社交媒體資料、單擊流等)擁有隐藏的關聯,梳理這些關聯有助于發現資料中的新見解和洞察 - 它們從表面上看似乎處于完全不同的次元,但實際上卻緊密關聯。但要以有意義的方式實作此目的,需要靈活地轉換資料(速度快沒有壞處,對吧?),以便找到正确的方向。

spark graphx 結合了二者的優勢:多個算法的靈活性,以及以各種不同方式轉換和合并資料的速度。

在預測未來時,擁有一批曆史資料是一筆非常寶貴的資産。但預測分析需要嚴謹的軟體(當然還有硬體)。

spark 的 mlib 具有很高的性能(驚訝吧?)機器學習 (ml) 庫采用了大量經過實踐檢驗的算法(比如分類、回歸和聚類)、特制技術(比如轉換和降維)和實用工具(比如線性代數和統計學)。

都是分布式計算架構,spark基于記憶體,mr基于hdfs。spark處理資料的能力一般是mr的十倍以上,spark中除了基于記憶體計算外,還有dag有向無環圖來切分任務的執行先後順序。

官網介紹spark運作速度提高100倍。apache spark使用最先進的dag排程程式,查詢優化程式和實體執行引擎,實作批量和流式資料的高性能。

spark支援java、scala,python和r的api,還支援超過80種進階算法,使使用者可以快速建構不同的應用。而且spark支援互動式的python和scala的shell,可以非常友善地在這些shell中使用spark叢集來驗證解決問題的方法。

spark提供了統一的解決方案。spark可以用于批處理、互動式查詢(spark sql)、實時流處理(spark streaming)、機器學習(spark mllib)和圖計算(graphx)。這些不同類型的處理都可以在同一個應用中無縫使用。spark統一的解決方案非常具有吸引力,畢竟任何公司都想用統一的平台去處理遇到的問題,減少開發和維護的人力成本和部署平台的物力成本。

spark可以非常友善地與其他的開源産品進行融合。比如,spark可以使用hadoop的yarn和apache mesos作為它的資源管理和排程器,并且可以處理所有hadoop支援的資料,包括hdfs、hbase和cassandra等。這對于已經部署hadoop叢集的使用者特别重要,因為不需要做任何資料遷移就可以使用spark的強大處理能力。spark也可以不依賴于第三方的資源管理和排程器,它實作了standalone作為其内置的資源管理和排程架構,這樣進一步降低了spark的使用門檻,使得所有人都可以非常容易地部署和使用spark。此外,spark還提供了在ec2上部署standalone的spark叢集的工具。

Spark(一)Spark簡介

sparkcore:将分布式資料抽象為彈性分布式資料集(rdd),實作了應用任務排程、rpc、序列化和壓縮,并為運作在其上的上層元件提供api。

sparksql:spark sql 是spark來操作結構化資料的子產品,可以使用sql語句的方式來查詢資料,spark支援多種資料源,如hdfs,flume,kafka等。

sparkstreaming: 是spark提供的實時資料進行流式計算的元件。

mllib:提供常用機器學習算法的實作庫。

graphx:提供一個分布式圖計算架構,能高效進行圖計算。

blinkdb:用于在海量資料上進行互動式sql的近似查詢引擎。

tachyon:以記憶體為中心高容錯的的分布式檔案系統。

<col>

運作環境

模式

描述

local

本地模式

常用于本地開發測試,如在eclipse,idea中寫程式測試等。本地還分為local單線程和local-cluster多線程

standalone

叢集模式

spark自帶的一個資源排程架構,支援完全分布式。存在的master單點故障可由zookeeper來實作ha

yarn

運作在yarn資料總管架構之上,由yarn負責資源管理,spark負責任務排程和計算

mesos

運作在mesos資料總管架構之上,由mesos負責資源管理,spark負責任務排程和計算

kubernetes

運作在kubernetes資源管理的叢集上,目前kubernetes排程程式是實驗性的

術語

 application       

spark的應用程式,包含一個driver program和若幹executor

 sparkcontext   

spark應用程式的入口,負責排程各個運算資源,協調各個worker node上的executor

 driver program

運作application的main()函數并且建立sparkcontext

 executor

是為application運作在worker node上的一個程序,該程序負責運作task,并且負責将資料存在記憶體或者磁盤上。

每個application都會申請各自的executor來處理任務

 clustermanager

在叢集上擷取資源的外部服務(例如:standalone、mesos、yarn)

 worker node

叢集中任何可以運作application代碼的節點,運作一個或多個executor程序

 task

運作在executor上的工作單元

 job

sparkcontext送出的具體action操作,常和action對應

 stage

每個job會被拆分很多組task,每組任務被稱為stage,也稱taskset

 rdd

是resilient distributed datasets的簡稱,中文為彈性分布式資料集;是spark最核心的子產品和類

 dagscheduler

根據job建構基于stage的dag,并送出stage給taskscheduler

 taskscheduler

将taskset送出給worker node叢集運作并傳回結果

 transformations

是spark api的一種類型,transformation傳回值還是一個rdd, 所有的transformation采用的都是懶政策,

如果隻是将transformation送出是不會執行計算的

 action

是spark api的一種類型,action傳回值不是一個rdd,而是一個scala集合;計算隻有在action被送出的時候計算才 被觸發。

Spark(一)Spark簡介
Spark(一)Spark簡介

繼續閱讀