Spark的知識點總結

什麼是Spark
基於內存的,用於大規模數據處理(離線計算、實時計算、快速查詢(交互式查詢))的統一分析引擎。
Spark特點
快:
Spark計算速度是MapReduce計算速度的10-100倍
易用:(算法多)
MR支持1種計算模型,Spsark支持更多的算模型。
通用:
Spark 能夠進行離線計算、交互式查詢(快速查詢)、實時計算、機器學習、圖計算等
兼容性:
Spark支持大數據中的Yarn調度,支持mesos。可以處理hadoop計算的數據。
Spark運行模式
1.local本地模式(單機)–開發測試使用
2.standalone獨立集羣模式–開發測試使用
3.standalone-HA高可用模式–生產環境使用
4.on yarn集羣模式–生產環境使用
5.on cloud集羣模式–中小公司未來會更多的使用雲服務
Spark編寫代碼
1、創建一個 Sparkconf對象,設置app名稱
2、創建一個SparkContext,
3、讀取數據,對數據進行計算
4、保存數據
SparkCore
什麼是RDD
彈性分佈式數據集(數據存儲在內存),一個不可變、可分區、裏面的元素可並行計算的集合
RDD的主要屬性
1、數據集的基本組成單位是一組分片(Partition)或一個分區(Partition)列表
每個分片都會被一個計算任務處理,分片數決定並行度。
2、一個函數會被作用在每一個分區。
3、一個RDD會依賴於其他多個RDD,RDD的每次轉換都會生成一個新的RDD
RDD的算子分爲兩類:
1.Transformation轉換操作:返回一個新的RDD
2.Action動作操作:返回值不是RDD
惰性計算,遇到Transformation不計算,遇到Action在真正計算。
Rdd數據持久化什麼作用?
1、對多次使用的rdd進行緩存,緩存到內存,當後續頻繁使用時直接在內存中讀取緩存的數據,不需要重新計算。 (Persist、Cache)
2、將RDD結果寫入硬盤(容錯機制),當RDD丟失數據時,或依賴的RDD丟失數據時,可以使用持久化到硬盤的數據恢復。(MEMORY_ONLY(默認)、MEMORY_AND_DISK、DISK_ONLY)
SparkContext.setCheckpointDir(“目錄”) //HDFS的目錄
RDD.checkpoint()
cache和Checkpoint的區別
位置
Persist 和 Cache將數據保存在內存
Checkpoint將數據保存在HDFS
生命週期
Persist 和 Cache 程序結束後會被清除或手動調用unpersist方法。
Checkpoint永久存儲不會被刪除。
RDD依賴關係(血統Lineage)
Persist和Cache,不會丟掉RDD間的依賴鏈/依賴關係
Checkpoint會斬斷依賴鏈
什麼是寬窄依賴
窄依賴:父RDD的一個分區只會被子RDD的一個分區依賴
寬依賴:父RDD的一個分區會被子RDD的多個分區依賴(涉及到shuffle)
什麼是DAG
DAG:指的是數據轉換執行的過程,有方向,無閉環(其實就是RDD執行的流程)
DAG邊界
開始:通過SparkContext創建的RDD
結束:觸發Action,一旦觸發Action就形成了一個完整的DAG
說明:
一個Spark應用中可以有一到多個DAG,取決於觸發了多少次Action
一個DAG中會有不同的階段/stage,劃分階段/stage的依據就是寬依賴
一個階段/stage中可以有多個Task,一個分區對應一個Task
Spark概念
1.Application:指的是用戶編寫的Spark應用程序/代碼,包含了Driver功能代碼和分佈在集羣中多個節點上運行的Executor代碼。
2.Driver:Spark中的Driver即運行上述Application的Main()函數並且創建SparkContext,SparkContext負責和ClusterManager通信,進行資源的申請、任務的分配和監控等
3.Cluster Manager:指的是在集羣上獲取資源的外部服務,Standalone模式下由Master負責,Yarn模式下ResourceManager負責;
4.Executor:是運行在工作節點Worker上的進程,負責運行任務,併爲應用程序存儲數據,是執行分區計算任務的進程;
5.RDD:Resilient Distributed Dataset彈性分佈式數據集,是分佈式內存的一個抽象概念;
6.DAG:Directed Acyclic Graph有向無環圖,反映RDD之間的依賴關係和執行流程;
7.Job:作業,按照DAG執行就是一個作業;Job==DAG
8.Stage:階段,是作業的基本調度單位,同一個Stage中的Task可以並行執行,多個Task組成TaskSet任務集
9.Task:任務,運行在Executor上的工作單元,一個Task計算一個分區,包括pipline上的一系列操作
Spark執行任務的基本流程
1.Spark應用被提交–>SparkContext向資源管理器註冊並申請資源 (??) -->啓動Executor
2.RDD–>構建DAG–>DAGScheduler劃分Stage形成TaskSet–>TaskScheduler提交Task–>Worker上的Executor執行Task
累加器的作用
累加器accumulators:累加器支持在所有不同節點之間進行累加計算
廣播變量的作用
在每個機器上緩存一份、不可變的、只讀的、相同的變量,該節點每個任務都能訪問。起到節省資源的作用,和優化的所用。
SparkSQL基本介紹
什麼是SparkSQL?
用於處理結構化數據的Spark模塊。
SparkSQL底層的數據抽象
DataFrame和DataSet
Hive和SparkSQL的對比
Hive是將sql轉化成MapReduce進行計算(降低學習成本、提高開發效率)
SparkSQL是將sql轉化成rdd集進行計算(降低學習成本、提高開發效率)
什麼是DataFrame??
DataFrame是以RDD爲基礎的帶有Schema元信息的分佈式數據集。
什麼是DataSet??
含有類型信息的DataFrame就是DataSet
(DataSaet=DataFrame+類型= Schema+RDDn+類型)
SparkSQL查詢數據的形態
1、類似方法調用,領域特定語言(DSL)。
personDF.select("id","id",“name”,"age"+1).filter("age"+1).filter(“age”>25).show
2、SQL語句
spark.sql(“select * from personDFT where age >25”).show
添加Schema的方式
第1種:指定列名添加Schema
第2種:通過StructType指定Schema
第3種:編寫樣例類,利用反射機制推斷Schema
指定列名添加Schema代碼流程
1 創建sparksession
2 創建sc
3 讀取數據並加工
4 設置表結構 ttRDD.toDF(“id”,“name”,“age”)
5 註冊成表並查詢
6 關閉sc sparksession
通過StructType指定Schema代碼流程
1 創建sparksession
2 創建sc
3 讀取數據並加工
4 設置表結構
types.StructType(
// 字段類型 (字段名,字段類型,是否爲空)
List(StructField(“id”,IntegerType,true)
)
)
5 創建DS DF
val ttDF: DataFrame = spark.createDataFrame(RowRDD,structTable)
6 註冊成表並查詢
7 關閉sc sparksession
利用反射機制推斷Schema代碼流程
準備樣例類
1 創建sparksession
2 創建sc
3 讀取數據並加工
val PersonRDD: RDD[Person] = ttRDD.map(z=>Person(z(0).toInt,z(1),z(2).toInt))
4 RDD轉DF
val personDF: DataFrame = PersonRDD.toDF()
5 註冊成表並查詢
6 關閉sc sparksession
RDD、DF、DS三者之間的轉化
轉換成RDD .rdd
轉換成DF .toDF()
轉換成DS
RDD->DS .toDS()
DF->DS .as[Person]
Spark SQL自定義函數
spark.udf.register(“toUpperAdd123”,(str:String)=>{
//根據業務邏輯對數據進行處理
//str.toUpperCase()+ " 123"
//str.length
10
str.length*10/2/2.toDouble
})
開窗函數的作用
既顯示聚集前/排序前的原始的數據,又顯示聚集後/排序後的名次 的數據。
開窗函數的分類
1、聚和開窗函數
聚合函數(列) OVER(選項),這裏的選項可以是PARTITION BY 子句
2、排序聚和函數
排序函數(列) OVER(選項),這裏的選項可以是ORDER BY 子句,也可以是 OVER(PARTITION BY 子句 ORDER BY 子句)
聚和開窗函數
select name, class, score, count(name) over() name_count from scores
select name, class, score, count(name) over(PARTITION BY class) name_count from scores
排序聚和函數
select name, class, score, row_number() over(order by score) rank from scores
select name, class, score, row_number() over(partition by class order by score) rank from scores
RANK跳躍排序
select name, class, score, rank() over(order by score) rank from scores
select name, class, score, rank() over(partition by class order by score) rank from scores
DENSE_RANK連續排序
select name, class, score, dense_rank() over(order by score) rank from scores
NTILE分組排名
select name, class, score, ntile(6) over(order by score) rank from scores
什麼是Spark Streaming
Spark Streaming是一個基於Spark Core之上的實時計算框架
什麼是DStream
代表持續性的輸入的數據流和經過各種Spark算子操作後的輸出的結果數據流。
本質上就是按照時間間隔劃分成一批一批的連續的RDD
闡明RDD、DataFrame、DataSet、DStream數據抽象之間的關係。
DStream=RDD1(t1)+ RDD2(t2)+ RDD3(t3)+ RDD4(t4)+….
DataSet = DataFrame+類型 = RDD+結構+類型
DataFrame = RDD+結構
SparkStreaming代碼過程
1 創建sparkConf
2 創建一個sparkcontext
3 創建streamingcontext
4 接收數據並根據業務邏輯進行計算
5 開啓計算任務
6 等待關閉
窗口寬度和滑動距離的關係
0.8版本SparkStreaming集成kafka是的差異
Receiver接收方式
1、多個Receiver接受數據效率高,但有丟失數據的風險。
2、開啓日誌(WAL)可防止數據丟失,但寫兩遍數據效率低。
3、Zookeeper維護offset有重複消費數據可能。
4、使用高層次的API
Direct直連方式
1、不使用Receiver,直接到kafka分區中讀取數據
2、不使用日誌(WAL)機制。
3、Spark自己維護offset
4、使用低層次的API
什麼是Structured Streaming
Structured Streaming是一個基於Spark SQL引擎的可擴展、容錯的流處理引擎
Structured Streaming模型
是一個不斷增長的動態表格,新數據被持續不斷地添加到表格的末尾
對動態數據源進行實時查詢,就是對當前的表格內容執行一次 SQL 查詢。
Structured Streaming應用場景
將數據源映射爲類似於關係數據庫中的表,(SparkSQL中的DF/DS)
然後將經過計算得到的結果映射爲另一張表.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章