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