Spark(一)Spark簡介

1、官網介紹

1 什麼是Spark

官網地址:http://spark.apache.org/node

Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行計算框架,Spark擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。算法

問題
工具只在解決了一些問題時纔有用,對吧!那麼讓咱們來討論一下 Spark 能解決的問題。shell


咱們須要(快速獲取)答案
在批處理過程當中,長時間等待運行做業的結果是意料中的事,在現在的企業中,須要快速(「近實時」)獲取答案。大數據的屬性(速度、數據量和種類)使得業務問題愈來愈難得到答案,但快速獲取這些答案很是重要。apache


數據如此之多
數據源數不勝數且仍在增長。從 IoT 設備、實時交易、單擊流、應用到社交媒體等,數據源在不斷增長。全部數據都須要通過必定的處理,這樣分析師才能理解並從中獲取業務價值。如今您須要能處理全部這些數據,以便將它們轉化爲某種能使用的信息。可以以愈來愈快的速度處理從愈來愈多來源傳入的海量數據,這一點很重要!多線程


A 與 B(以及 C、D 等等)有何關聯?
您擁有全部這些有用的數據,從客戶交易、社交媒體交互到地理空間數據等等。如今您須要瞭解全部這些維度如何相互關聯。重要的是能看到對這個數據圖的全面分析結果,從而肯定哪些數據維相當重要,哪些毫無價值。框架


咱們須要知道(什麼時候)將會發生什麼
您擁有全部這些寶貴的歷史數據。太棒了!如今您須要分析它們,瞭解發生了什麼和發生的緣由,以便能預測接下來會發生什麼。重要的是可以分析全部這些數據,以便預測將會發生的業務事件。eclipse


Apache Spark 不是什麼
咱們經常(且很容易)合併解決一組相似問題的兩種或更多相關技術,並且在不能互換使用它們時互換使用了它們。爲了不在 Spark 上犯這種錯誤,讓咱們討論一下它不是什麼。機器學習


Hadoop
Hadoop 是一種大數據文件存儲和數據處理框架,它使用一種稱爲 MapReduce 的技術從一個龐大的磁盤集羣讀取數據,轉換數據,並將數據寫回磁盤。另外一方面,Spark 使用有向非循環圖 (DAG) 經過一系列步驟處理內存中的數據,這些步驟之間相互依賴(Gradle 也使用了一種 DAG),並且不會像 Hadoop(經過 Hadoop 分佈式文件系統,HDFS)那樣處理文件存儲自己。分佈式


MapReduce
人們很容易將 Spark Core 與 MapReduce 混淆,由於它們在大數據領域都很重要。MapReduce 基原本講是一種單通算法:讀入數據,MapReduce 轉換它,而後將數據寫回到磁盤。若是須要另外一次轉換,則會重複這些步驟。另外一方面,Spark 在內存中執行全部處理工做(若有必要,還會執行屢次迭代),並使用 DAG 肯定要執行步驟的最佳順序。ide


與 Hadoop 相互排斥
Spark 被設計爲與 Hadoop 兼容,因此 Hadoop 和 Spark 能夠緊密協做。事實上,Spark 下載包含用於使用 HDFS(用於存儲管理)和 YARN(用於資源管理和調度)的 Hadoop 客戶端庫。


解決方案
在一開始的時候,我就介紹了 Spark 能解決的一些問題。如今我將展現 Spark 如何解決這些問題。


咱們須要(快速獲取)答案
近實時的分析在一段時間內須要高性能。Spark 處理來自內存的數據,因此處理速度很快。Spark 的核心庫支持輕鬆地編寫優化的代碼來得到最快的結果。最多比 MapReduce 快 100 倍!


數據如此之多
或許使用 Spark 的最大好處是它能處理實時流數據。來自交易場所、社交媒體單擊流和 IoT 設備的數據必須在傳輸到磁盤以前快速轉換。使用 Hadoop HDFS 時,須要將數據寫入磁盤,而後讀回進行 Map/Reduce 轉換處理,接着再寫回磁盤,而後才能交到分析師手中。
Spark Streaming 容許在內存中處理傳入的數據,而後寫入磁盤供之後擴充(若有必要)和進一步分析。


A 與 B(以及 C、D 等等)有何關聯?
來自多個來源的數據(好比交易數據、社交媒體數據、單擊流等)擁有隱藏的關聯,梳理這些關聯有助於發現數據中的新看法和洞察 - 它們從表面上看彷佛處於徹底不一樣的維度,但實際上卻緊密關聯。但要以有意義的方式實現此目的,須要靈活地轉換數據(速度快沒有壞處,對吧?),以便找到正確的方向。
Spark GraphX 結合了兩者的優點:多個算法的靈活性,以及以各類不一樣方式轉換和合並數據的速度。


咱們須要知道(什麼時候)將會發生什麼
在預測將來時,擁有一批歷史數據是一筆很是寶貴的資產。但預測分析須要嚴謹的軟件(固然還有硬件)。
Spark 的 MLib 具備很高的性能(驚訝吧?)機器學習 (ML) 庫採用了大量通過實踐檢驗的算法(好比分類、迴歸和聚類)、特製技術(好比轉換和降維)和實用工具(好比線性代數和統計學)。

2 Spark與MapReduce的區別

都是分佈式計算框架,Spark基於內存,MR基於HDFS。Spark處理數據的能力通常是MR的十倍以上,Spark中除了基於內存計算外,還有DAG有向無環圖來切分任務的執行前後順序。

2、Spark的四大特性

一、高效性

官網介紹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集羣的工具。

 

3、Spark的技術棧

SparkCore:將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,併爲運行在其上的上層組件提供API。

SparkSQL:Spark Sql 是Spark來操做結構化數據的模塊,可使用SQL語句的方式來查詢數據,Spark支持多種數據源,如HDFS,FLume,Kafka等。

SparkStreaming: 是Spark提供的實時數據進行流式計算的組件。

MLlib:提供經常使用機器學習算法的實現庫。

GraphX:提供一個分佈式圖計算框架,能高效進行圖計算。

BlinkDB:用於在海量數據上進行交互式SQL的近似查詢引擎。

Tachyon:之內存爲中心高容錯的的分佈式文件系統。

 

4、Spark的運行模式

運行環境 模式 描述
Local 本地模式 經常使用於本地開發測試,如在eclipse,idea中寫程序測試等。本地還分爲local單線程和local-cluster多線程
Standalone 集羣模式 Spark自帶的一個資源調度框架,支持徹底分佈式。存在的Master單點故障可由ZooKeeper來實現HA
Yarn 集羣模式 運行在yarn資源管理器框架之上,由yarn負責資源管理,Spark負責任務調度和計算
Mesos 集羣模式 運行在mesos資源管理器框架之上,由mesos負責資源管理,Spark負責任務調度和計算
Kubernetes 集羣模式 運行在Kubernetes資源管理的集羣上,目前Kubernetes調度程序是實驗性的

 

5、Spark的經常使用術語

術語 描述
 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被提交的時候計算才 被觸發。
相關文章
相關標籤/搜索