spark core 介紹

Spark Core

1、Spark架構設計

1.1 架構設計圖

在這裏插入圖片描述
1.2 相關術語名詞解釋

  • RDD (Resilient Distributed DataSet)

    • 彈性分佈式數據集,是對數據集在spark存儲和計算過程中的一種抽象。

    • 是一組只讀、可分區的的分佈式數據集合。

    • 一個RDD 包含多個分區Partition(類似於MapReduce中的InputSplit),分區是依照一定的規則的,將具有相同規則的屬性的數據記錄放在一起。

    • 橫向上可切分並行計算,以分區Partition爲切分後的最小存儲和計算單元。

    • 縱向上可進行內外存切換使用,即當數據在內存不足時,可以用外存磁盤來補充。

  • Partition(分區)

    • Partition類似hadoop的Split,計算是以partition爲單位進行的,提供了一種劃分數據的方式。
    • partition的劃分依據有很多,可以自己定義的,像HDFS文件,劃分的方式就和MapReduce一樣,以文件的block來劃分不同的partition。
    • 一個Partition交給一個Task去計算處理
  • 算子

    • 英文簡稱:Operator
    • 廣義上講,對任何函數進行某一項操作都可以認爲是一個算子
    • 通俗上講,算子即爲映射、關係、變換。
    • MapReduce算子,主要分爲兩個,即爲Map和Reduce兩個主要操作的算子,導致靈活可用性比較差。
    • Spark算子,分爲兩大類,即爲Transformation和Action類,合計有80多個。
  • Transformation類算子

    • 操作是延遲計算的,也就是說從一個RDD 轉換生成另一個 RDD 的轉換操作不是馬上執行,需要等到有 Action
      操作的時候纔會真正觸發運算。
    • 細分類
      • Value數據類型的Transformation算子
      • Key-Value數據類型的Transfromation算子
  • Action類算子

    • 會觸發 Spark 提交作業(Job),並將數據輸出 Spark系統。
  • 窄依賴

    • 如果一個父RDD的每個分區只被子RDD的一個分區使用 ----> 一對一關係
  • 寬依賴

    • 如果一個父RDD的每個分區要被子RDD 的多個分區使用 ----> 一對多關係
  • Application

    • Spark Application的概念和MapReduce中的job或者yarn中的application類似,指的是用戶編寫的Spark應用程序,包含了一個Driver功能的代碼和分佈在集羣中多個節點上運行的Executor代碼
    • 一般是指整個Spark項目從開發、測試、佈署、運行的全部。
  • Driver

    • 運行main函數並且創建SparkContext的程序。
    • 稱爲驅動程序,Driver Program類似於hadoop的wordcount程序的main函數。
  • Cluster Manager

    • 集羣的資源管理器,在集羣上獲取資源的服務。如Yarn、Mesos、Spark Standalone等。
    • 以Yarn爲例,驅動程序會向Yarn申請計算我這個任務需要多少的內存,多少CPU等,後由Cluster Manager會通過調度告訴驅動程序可以使用,然後驅動程序將任務分配到既定的Worker Node上面執行。
  • WorkerNode

    • 集羣中任何一個可以運行spark應用代碼的節點。
    • Worker Node就是物理機器節點,可以在上面啓動Executor進程。
  • Executor

    • Application運行在Worker節點上的一個進程,該進程負責運行Task,並且負責將數據存在內存或者磁盤上,每個Application都有各自獨立專享的一批Executor。
    • Executor即爲spark概念的資源容器,類比於yarn的container容器,真正承載Task的運行與管理,以多線程的方式運行Task,更加高效快速。
  • Task

    • 與Hadoop中的Map Task或者Reduce Task是類同的。
    • 分配到executor上的基本工作單元,執行實際的計算任務。
    • Task分爲兩類,即爲ShuffleMapTask和ResultTask。
      • ShuffleMapTask:即爲Map任務和發生Shuffle的任務的操作,由Transformation操作組成,其輸出結果是爲下個階段任務(ResultTask)進行做準備,不是最終要輸出的結果。
      • ResultTask:即爲Action操作觸發的Job作業的最後一個階段任務,其輸出結果即爲Application最終的輸出或存儲結果。
  • Job(作業)

    • Spark RDD裏的每個action的計算會生成一個job。
    • 用戶提交的Job會提交給DAGScheduler(Job調度器),Job會被分解成Stage去執行,每個Stage由一組相同計算規則的Task組成,該組Task也稱爲TaskSet,實際交由TaskScheduler去調度Task的機器執行節點,最終完成作業的執行。
  • Stage(階段)

    • Stage是Job的組成部分,每個Job可以包含1個或者多個Stage。

    • Job切分成Stage是以Shuffle作爲分隔依據,Shuffle前是一個Stage,Shuffle後是一個Stage。即爲按RDD寬窄依賴來劃分Stage。

    • 每個Job會被拆分很多組Task,每組任務被稱爲Stage,也可稱TaskSet,一個作業可以被分爲一個或多個階段

2、spark運行模式與用戶交互方式

2.1運行模式
即作業以什麼樣的模式去執行,主要是單機、分佈式兩種方式的細節選擇。
在這裏插入圖片描述
2.2用戶交互方式
1、spark-shell:spark命令行方式來操作spark作業。
多用於簡單的學習、測試、簡易作業操作。
2、spark-submit:通過程序腳本,提交相關的代碼、依賴等來操作spark作業。
最多見的提交任務的交互方式,簡單易用、參數齊全。
3、spark-sql:通過sql的方式操作spark作業。
sql相關的學習、測試、生產環境研發均可以使用該直接操作交互方式。
4、spark-class:最低層的調用方式,其它調用方式多是最終轉化到該方式中去提交。
直接使用較少
5、sparkR,sparkPython:通過其它非java、scala語言直接操作spark作業的方式。
R、python語言使用者的交互方式。
2.2.1重要交互方式使用介紹
重點說明spark-shell,spark-submit兩大方式,spark-sql後有專門章節介紹,其它小衆方式不做介紹。
1、spark-shell

  • 交互方式定位

    • 一個強大的交互式數據操作與分析的工具,提供一個簡單的方式快速學習spark相關的API。
  • 啓動方式

    • 前置環境:已將spark-shell等交互式腳本已加入系統PATH變量,可在任意位置使用。
    • 以本地2個線程來模擬運行spark相關操作,該數量一般與本機的cpu核數相一致爲最佳spark-shell --master local[2]
  • 相關參數

    • 1.參數列表獲取方式:spark-shell --help
    • 2.其參數非常多,但由於該方式主要是簡單學習使用,故其參數使用極少,故不做詳解。
  • 使用示例介紹

    • 交互式入口
      在這裏插入圖片描述

    • 構建一個scala列表,並輸出
      在這裏插入圖片描述

    • 通過scala列表,構造一個rdd,並進行基本操作
      在這裏插入圖片描述

    • 通過本地文本文件構建rdd,並進行基本操作
      在這裏插入圖片描述

    • 通過hdfs文本文件構建rdd,並進行基本操作
      在這裏插入圖片描述

    • 對rdd進行字符串過濾操作
      在這裏插入圖片描述

    • 對rdd進行求最大值操作

      在這裏插入圖片描述
      在這裏插入圖片描述

    • 對輸入進行wodcount計算-無排序 在這裏插入圖片描述

    • 對輸入進行wodcount計算-按詞頻降序排列輸出
      在這裏插入圖片描述

2、spark-submit

  • 交互方式定位
    • 最常用的通過程序腳本,提交相關的代碼、依賴等來操作spark作業的方式。
  • 啓動方式
    • spark-submit提交任務的模板

       spark-submit \
         --class <main-class> \
         --master <master-url> \
         --jars jar_list_by_comma \
         --conf <key>=<value> \
         ... # other options
         <application-jar> \
         [application-arguments]
      
    • spark-submit 詳細參數說明
      在這裏插入圖片描述

    • 關於–master取值的特別說明
      在這裏插入圖片描述

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