Spark详解
一.Spark 簡介
Spark 和Scala
1.1 Spark 是基于內存計算的大數據并行計算框架,可用于構建大型的、低延遲的數據分析應用程序;
1.2 Spark 的特點:
1.3 Scala是一門現代的多范式編程語言,可擴展式語言;
1.4 Scala 特性:
1.5 Scala 是Spark的主要編程語言,但Spark 還支持Java 、Python ,R語言編程。提供了REPL(交互式解析器),提高程序開發效率。
Spark 和Hadoop 的比較
2.1 Hadoop 是基于磁盤的大數據計算框架;Spark 性能比Hadoop 優越;
2.2 Spark 的優點:
Spark的計算模式也屬于MapReduce ,但不局限與Map 和Reduce 操作,還提供了多種數據集操作類型,編程模型比Hadoop MapReduce 更靈活。
Spark提供了內存計算,可將中間結果發放到內存中,對于迭代計算效率更高;
Spark 基于DAG 的任務調度執行機制,要優于 Hadoop MapReduce 的迭代執行機制;
二.Spark 生態系統
大數據處理主要的三個類型:
復雜的批量數據處理;基于歷史數據的交互式查詢;基于實時數據流的數據處理;
同時部署三種不同的軟件,以滿足三種不同的業務需求。
MapReduce ; Cloudera Impala; Storm;
框架
3.1 Spark 可以部署在資源管理器YARN 之上,提供一站式的大數據解決方案;
3.2 Spark 所提供的生態系統足以滿足上述三種場景即同時支持批處理、交互式查詢和流數據處理.
3.3 Spark 生態系統已經成為伯克利數據分析軟件棧BDAS的重要組成部分;
3.4 BDAS架構
Spark Core 實現了 Spark 基于內存的計算;
Spark Streaming 來實現流計算;
Saprk SQL和BlinkDB完成交互式的SQL 查詢;
GraphX:完成圖計算;
ML Base和MLlib:完成機器學習和數據挖掘;
3.5 Spark 組件應用場景
三. Spar 運行架構
基本概念
架構設計
2.1 與Hadoop MapReduce 計算框架相比,Spark 采用Excutor 的兩個有點;
–>利用多線程來執行具體的任務,減少任務的啟動開銷;
–>Excutor 中有一個BlockManager 存儲模塊,會將內存和磁盤共同作為 存儲設備,有效減少IO 開銷.
Spark 運行基本流程
3.1 為應用程序構建其基本的運行環境,即由Driver 創建一個SparkContex進行資源的申請,任務的分配和監控;
3.2 資源管理器為Excutor 分配資源,并啟動Excutor 進程;
3.3 SparkContext根據RDD 的依賴關系構建DAG圖,DAG 圖提交給DAG Schufule解析成Starge,然后把一個個TaseSet提交給底層調度器Task Schudule 處理.Excutor 向SparkContext 申請Task ,Task Schudule 將Task 發放給Excutor 運行并提供應用程序代碼;
3.4 Task 在Excutor 上運行把執行結果反饋給Task Schudule ,然后反饋給DAG Schudule ,運算完畢后寫入數據并釋放所有資源.
3.5 運行架構特點
RDD 組件
許多迭代式算法和交互式數據挖掘,不同計算階段之間會重用中間結果.MapReduce 都是把結果寫入磁盤,帶來大量數據復制,磁盤IO和序列化開銷大;
4.1 RDD概念
RDD就是為滿足這種需求而設計的,提供了一個抽象的數據結構;
不必擔心底層數據的分布式特性,只需將具體的應用邏輯表達為一系列轉換處理.
不同RDD 之間的轉換操作形成依賴關系,可以實現管道化,避免中間數據存儲;
一個RDD(彈性分布式數據集)就是一個分布式對象集合,本質上是一個只讀的分區記錄集合,每個RDD可以分為多個分區,每個分區就是一個數據集片段,并且一個RDD的不同分區可以被保存到集群中不同的節點上,從而可以在集群中的不同節點上進行并行計算.
4.2 RDD提供了一種高度受限的共享內存模型,即RDD是只讀的記錄分區集合,不能直接修改,只能基于穩定的物理存儲中的數據集創建RDD,或者通過其他RDD 上執行確定的轉換操作(如map,jion,group by)而創建得到新的RDD.
4.3 RDD的執行過程
上述圖示中的處理過程,即 DAG 拓撲排序結果,反應了不同RDD的相互依賴關系.
優點:惰性調用,管道化.避免同步等待,不需要保存中間結果,每次操作變得簡單;
4.4 RDD特性
4.5 RDD 的依賴關系和運行過程
RDD 之間的依賴關系(寬依賴,窄依賴)是劃分Stage的依據.
窄依賴:表現為一個父RDD的分區對應一個自RDD 的分區或多個父RDD 的分區對應與一個子RDD的分區;
寬依賴:表現為存在一個父RDD的分區對應一個子RDD的多個分區;
4.6 Stage 的劃分
Spark通過分析各個RDD 的依賴關系生成DAG 再通過分析各個RDD中分區之間的依賴關系來決定如何劃分Stage;
如下劃分情況:
4.7 Stage 類型
–>ShuffleMapStage
–>ResultStage
4.8 RDD 運行過程
Spark SQL組件
5.1 Spark SQL 架構
5.2 Spark SQL 與Hive關系
5.3 Spark 的部署和應用方式
5.4 Spark 編程
總結
- 上一篇: 计算机网络——速率相关的性能指标
- 下一篇: 基于IMAGE法的房间回响模型创建、C+