spark基本概念整理


app

1 基於spark的用戶程序,包含了一個driver program和集群中多個executor
2 driver和executor存在心跳機制確保存活
3 --conf spark.executor.instances=5 --conf spark.executor.cores=8 --conf spark.executor.memory=80G

rdd

1 彈性分布式數據集
2 只讀的、分區(partition)記錄的集合
3 初代rdd處於血統的頂層,記錄任務所需的數據的分區信息,每個分區數據的讀取方法
4 子代rdd不真正的存儲信息,只記錄血統信息
5 真正的數據讀取,應該是task具體被執行的時候,觸發action操作的時候才發生的

算子

1 分為transformation和action
2 transformation: map filter flatMap union groupByKey reduceByKey sortByKey join
3 action: reduce collect count first saveAsTextFile countByKey foreach

partition

1 rdd存儲機制類似hdfs,分布式存儲
2 hdfs被切分成多個block(默認128M)進行存儲,rdd被切分為多個partition進行存儲
3 不同的partition可能在不同的節點上
4 再spark讀取hdfs的場景下,spark把hdfs的block讀到內存就會抽象為spark的partition
5 將RDD持久化到hdfs上,RDD的每個partition就會存成一個文件,如果文件小於128M,就可以理解為一個partition對應hdfs的一個block。反之,如果大於128M,就會被且分為多個block,這樣,一個partition就會對應多個block。

job

1 一個action算子觸發一個job
2 一個job中有好多的task,task是執行job的邏輯單元(猜測是根據partition划分任務)
3 一個job根據是否有shuffle發生可以分為好多的stage

stage

1 rdd中的依賴關系(血統)分為寬依賴和窄依賴
2 窄依賴:父RDD的一個分區只被一個子RDD的分區使用,不產生shuffle,即父子關系為“一對”或者“多對3 寬依賴:產生shuffle,父子關系為“一對”或者“多對4 spark根據rdd之間的依賴關系形成DAG有向無環圖,DAG提交給DAGScheduler,DAGScheduler會把DAG划分相互依賴的多個stage,划分stage的依據就是rdd之間的寬窄依賴 5 遇到寬依賴就划分stage
6 每個stage包含一個或多個task任務
7 這些task以taskSet的形式提交給TaskScheduler運行
8 stage是由一組並行的task組成
9 stage切割規則:從后往前,遇到寬依賴就切割stage。
10 一個stage以外部文件或者shuffle結果作為開始,以產生shuffle或者生成最終結果時結束
11 猜測stage與TaskSet為一一對應的關系

task

1 分為兩種:shuffleMapTask和resultTask
2 默認按照partition進行拆分task
3 --conf spark.default.parallelism=1000 設置task並行的數量
4 個人理解以上各種概念都是抽象概念,即簡單的理解為全部發生在driver端,只有task相關的信息會被序列化發送到executor去執行

 

 

參考鏈接:
https://www.cnblogs.com/jechedo/p/5732951.html
https://www.2cto.com/net/201802/719956.html
https://blog.csdn.net/fortuna_i/article/details/81170565
https://www.2cto.com/net/201712/703261.html
https://blog.csdn.net/zhangzeyuan56/article/details/80935034
https://www.jianshu.com/p/3e79db80c43c?from=timeline&isappinstalled=0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM