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