Spark core 總結


Spark

 

 


RDD五大特性
  1、RDD由一組partition組成
  2、每一個分區由一個task來處理
  3、RDD之間有一些列依賴關系
  4、分區類算子必須作用在kv格式得RDD上
  5、spark為task執行提供了最佳計算位置,盡量將task發送到數據所在節點執行


spark 快的原因
  1、spark 盡量將數據放在內存
    spark容易出現OOM
  2、粗粒度資源申請
    在應用程序啟動的時候就會申請所有資源
  3、DAG有向無環圖
    優化轉換過程


Driver
  spark 程序的主程序
    1、負責申請資源
      new SparkContext
    2、負責任務調度
      發送task到Excutor中執行


Excutor
  spark應用程序執行器
  standalone
    worker所在節點啟動
  yarn
    NodeManager所在節點啟動
  執行task任務,向Driver匯報task執行情況


環境搭建
  local
    本地測試
    需要本地安裝hadoop
  standalone
    使用spark自帶資源管理框架
      Driver向Master申請資源
    節點組成
      master
        管理資源和分配資源
        存在單點問題
    client
      在本地打印運行日志
      一般用於上線前測試
      Driver在本地(提交任務的節點)啟動
      Driver即負責資源申請也負責任務調度
    cluster
      日志不再本地打印
      Driver在集群中啟動
      隨便選擇一個Worker中啟動Driver
      一般用於上線運行
  yarn
    使用hadoop的yarn作為資源管理框架
    提交任務 Driver去ResourceManasger中申請資源
    通過實現applicationMaster接口往yarn里面提交任務
    yarn-client
      在本地打印運行日志
      一般用於上線前測試
      Driver在本地(提交任務的節點)啟動
      Driver只負責任務調度
      啟動ApplicationMaster 為spark應用程序申請資源

 

 


    yarn-cluster
      日志不再本地打印
      一般用於上線運行
      Driver(ApplicationMaster)在集群啟動
      Driver即負責資源申請也負責任務調度

 

常用算子

  transformations算子
  map
    傳入一個對象返回一個對象
  flatMap
  Filter
    返回true保留數據,返回false過濾數據
  groupByKey,groupBy
  reduceBykey
    reduceByKey在map端進行預聚合
  union
  join
  sample
  sortBy, sortByKey
  rePartition ,partitionBy(自定義分區器)
    重新分區,會產生shuffle
  mapValues
  action算子
    foreach
    reduce
      在map預聚合
    save
    collect collectAsMap


分區
    1、第一個RDD分區數有block數量決定(和mr一樣), inputformat
    2、后續rdd分區數量
      1、默認數去數量等於前一個rdd分區數量
      2、在使用shuffle類算子得時候可以執行分區數量


緩存
    1、RDD默認不保存數據 2,懶執行
    cache
      是一個轉換算子,不會觸發job,需要接收
      將數據放Excutor內存中, persist(StorageLevel.MEMORY_ONLY)
    persist
      可以指定緩存級別
        1、是否放內存
        2、是否放磁盤
        3、是否放堆外內存
        4、是否序列化
          壓縮
          1、好處:數據量變小,占用空間更小
          2、缺點:序列化和反序列化需要浪費cpu執行時間
        5、副本數
      選擇緩存級別
        1、內存充足
          MEMORY_ONLY
        2、內存不是很多
          MEMORY_AND_DISK_SER
          盡量將數據壓縮之后i放內存
        3、內存不足
          DISK_ONLY
          既然已經放磁盤了,就不必要壓縮了
checkpoint
      1、將RDD得數據寫入hdfs
      2,checkpoing會切斷RDD依賴關系
      3、從最后一個RDD向前回溯,對checkpoint的RDD進行標記,另啟動一個job重新計算rdd的數據,並rdd數據寫入hdfs(也就是遇到actions算子后啟動一個job進行回溯,遇到checkpoint再次啟動一個job)
      優化:在checkpoint之前先進行cache(避免重讀計算)

 

 


pagerank
      網頁排名
      計算過程
        1、每個網頁一個初始值
        2、通過不斷迭代計算新的pr值

 

資源調度和任務調度
      資源調度
        1、細粒度資源調度
          MapReduce
          每一個task都需要單獨申請資源
          task啟動速度較慢
          資源充分利用
        2、粗粒度資源調度
          spark
          在應用程序啟動的時候就會將所有需要的資源全部申請下來,后面task執行變快
          資源浪費(資源沒有充分的利用,在執行的過程中無法進行釋放,只有當作業全部進行完畢后才釋放
        3、spark資源調度流程 yarn-cluster
          1、通過spark-submit提交任務
          2、在本地啟動Driver val sc = new SparkContext(conf)
          3、Driver發請求給RM 啟動AM
          4、RM分配資源啟動AM
          5、AM向RM申請資源啟動Excutor
          6、AM分配資源啟動Excutor
          7、Excutor反向注冊給Driver
          8、開始任務調度(action算子觸發)
      任務調度
        1、當遇到一個action算子,啟動job,開始任務調度
        2、構建DAG有向無環圖
        3、DAGScheduler 根據寬窄依賴切分Stage (stage是一個可以並行計算的task)
        4、DAGScheduler 將stage以taskSet的形式發送給TaskScheduler
        5、TaskScheduler 根據本地化算法將task發送到數據所在節點去執行
        6、TaskScheduler收集tasK執行情況
          如果task失敗TaskScheduler默認重試3次
          如果重試3次之后還失敗,由DAGScheduler重試stage 默認重試4次
          如果是因為shuffle過程中拉去文件失敗發生的異常,TaskScheduler不負責重試task,而是由DAGScheduler重試上一個stage
        TaskScheduler 推測執行
          如果有一個task執行很慢,TaskScheduler會在啟動一個task去競爭,誰先執行完,以誰的為准

  
廣播變量
    如果不使用廣播變量變量副本等於task數量
    如果使用廣播變量變量副本等於Executor數量
    廣播變量只能在Driver定義,在Executor端讀取

    rdd 算子里面不能使用其它rdd

 

累加器
  全局累加變量
    1、只能在Driver端定義
    2、只能Executor端累加
    3、只能在Driver讀取


spark shuffle
  hash shuffle
    產生小文件的數量:m*r
  hash shuffle manager
    產生小文件的數量:c*r
  sort shuffle 默認
    產生小文件的數量:2*m
  sort shuffle bypass機制

    產生小文件的數量:2*m
    數據在map端不會排序
    當 reduce數量小於 spark.shuffle.sort.bypassMergeThreshold=200觸發bypass機制


快的原因
    盡量將數據放到內存里面進行計算
    粗粒度資源調度
    DAG有向無環圖
      切分Stoge

RDD五大特性
    1、RDD由一組partition組成
    2、函數操作實際是作用在每個partition上
    3、RDD之間由一系列依賴關系
    4、分區類算子必須作用在kv格式的rdd上
      reducebeykey,groupbykey
    5、spark為task執行提供了最佳計算位置

BlockManager
  每個Executor中都有一個
  管理數據
    1、RDD緩存數據
    2、shuffle數據
    3、廣播變量和累加器

 

 


免責聲明!

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



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