5-2 用戶行爲分析

Spark Shuffle 解析

爲何要Shuffle?

寬依賴和窄依賴

  • 窄依賴
    • 沒有數據shuffling
    • 所有父RDD中的Partition均會一一映射到子RDD的Partition中
      在這裏插入圖片描述
  • 寬依賴
    • 有數據shuffling
    • 所有父RDD中的Partition會被切分,根據key的不同劃分到子RDD的Partition中
      在這裏插入圖片描述

回顧Stage

  • 什麼是Stage
    • 一個Job會被拆分爲多組Task,每組Task被稱爲一個Stage
  • 劃分依據
    • 以shuffle操作作爲邊界,遇到一個寬依賴就分一個stage
      在這裏插入圖片描述

引起shuffle的算子

在這裏插入圖片描述

MapReduce Shuffle 回顧

  • Map端完成之後會暴露一個Http Server共Reduce端獲取數據
  • Reduce啓動拷貝線程從各個Map端拷貝結果
    • 有大量的網絡I/O開銷
  • 一邊拷貝一邊進行Merge操作(歸併排序)
    在這裏插入圖片描述

Spark Shuffle 兩階段

在這裏插入圖片描述

Shuffle 是個昂貴的操作

在這裏插入圖片描述

Shuffle 實現進化歷史

在這裏插入圖片描述

Shuffle 相關組件

  • ShuffleManager
    • 管理與Shuffle相關的組件
    • 實現
      • org.apache.spark.shuffle.hash.HashShuffleManager (1.6)
      • org.apache.spark.shuffle.sort.SortShuffleManager
  • ShuffleWriter
    • 處理Shuffle輸出相關邏輯
    • 實現
      • org.apache.spark.shuffle.hash.HashShuffleWriter (1.6)
      • org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter
      • org.apache.spark.shuffle.sort.SortShuffleWriter
      • org.apache.spark.shuffle.sort.UnsafeShuffleWriter
  • ShuffleReader
    • 處理讀取ShuffleWriter輸出相關邏輯
    • 實現
      • org.apache.spark.shuffle.BlockStoreShuffleReader

Hash Shuffle

在這裏插入圖片描述

Hash Shuffle 存在的問題?

在這裏插入圖片描述

Sort Shuffle

在這裏插入圖片描述

Sort Shuffle 存在的問題?

在這裏插入圖片描述

Sort Shuffle 改進 Tungsten 計劃

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
But 使用Tungsten限制條件

  1. 在shuffle階段不能有aggregate:例如reduceByKey
  2. 分區數不能超過2^24 − 1

Shuffle調優

  1. 調整spill頻率
  • spark.shuffle.file.buffer
    • map task的內存緩衝調節參數,默認是32kb
  • spark.shuffle.memoryFraction
    • reduce端聚合內存佔比,默認0.2
  • 如何調整?
    • 通過監控平臺觀察shuffle write和shuffle read的運行次數
  1. 儘量減少Shuffle次數
    在這裏插入圖片描述

Spark SQL 原理

Spark一個模塊,用於處理結構化數據

在這裏插入圖片描述

Spark SQL Example

在Spark程序中無縫集成SQL查詢
在這裏插入圖片描述

Spark SQL 原理

在這裏插入圖片描述
求大於18歲的同學總成績平均分

原理
在這裏插入圖片描述
SQL Parser
在這裏插入圖片描述

SQL Analyzer

  1. 經過Parser之後的LogicalPlan並不知道如何執行
  2. 需要綁定不確定的屬性和關係
  • 解析表名
    • 臨時表
    • 臨時view
    • hive table
    • hive view
  • 解析具體的schema結構
    • 字段類型
    • 存儲位置
      在這裏插入圖片描述

SQL Optimizer

在這裏插入圖片描述

SQL Optimizer 謂詞下推

在這裏插入圖片描述

SQL Optimizer 列值裁剪

在這裏插入圖片描述

SQL Planner

在這裏插入圖片描述

RDD DataFrame

  • Spark本身並不清楚RDD中Person內部的結構
    • 執行時無法優化
  • DataFrame提供了詳細的結構信息
    • 分佈式Row對象集合
    • 算子更加豐富
    • 執行計劃優化
      在這裏插入圖片描述

Spark SQL 實戰

  • 創建DataFrame
    在這裏插入圖片描述
  • 執行業務邏輯
    在這裏插入圖片描述

Spark SQL 實戰 1.6

  1. 初始化SparkContext
    在這裏插入圖片描述
  2. 初始化SQLContext
    在這裏插入圖片描述
  3. 生成DataFrame
    在這裏插入圖片描述
  4. 使用算子執行業務邏輯
    • 使用標準SQL執行業務邏輯
    在這裏插入圖片描述
    • 使用DataFrame API執行業務邏輯
    在這裏插入圖片描述

Spark SQL 實戰 2.0

在這裏插入圖片描述

  1. 初始化SparkSession
    在這裏插入圖片描述
  2. 加載數據
    在這裏插入圖片描述
  3. Enjoy Computing

Spark SQL 數據傾斜

  1. Spark 1.6 使用MapJoin
    CACHE TABLE xx AS select * from xx
  2. Spark 2.2 使用MapJoin Hint
    SELECT /*+ MAPJOIN(b) */ …
  3. 調整Spark SQL相關參數
    • spark.sql.autoBroadcastJoinThreshold
    被廣播表的大小小於該值時啓動BroadcastJoin,默認10MB。
    • spark.sql.broadcastTimeout
    廣播等待超時時間(秒),默認300s。
    • spark.sql.shuffle.partitions
    join或者aggregation是使用多少分區,默認200。

Spark MLlib 實戰

MLlib是Spark機器學習庫,包含了許多通用的機器學習算法和工具。

什麼是機器學習?

讓機器從數據中學習,進而得到一個更加符合現實規律的模型,通過對模型的使用使得機器比以往表現的更好,這就是機器學習。

MLlib 究竟能幹啥?

  • 算法
    • 迴歸 Regression
    • 分類 Classification
    • 聚類 Clustering
    • 決策樹 Decision trees
    • 協同過濾 Collaborative filtering
  • 特徵工程
    • 特徵抽取 Feature extraction
    • 降維 Dimensionality reduction
  • 持久化
  • 常用工具
    • 線性代數工具集
    • 統計工具集
      在這裏插入圖片描述

邏輯迴歸預測乳腺癌

在這裏插入圖片描述
數據來源:https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Original)

邏輯迴歸模型

在這裏插入圖片描述

Sigmoid函數

在這裏插入圖片描述

LR分類Example

在這裏插入圖片描述

Spark MLlib 訓練模型流程

在這裏插入圖片描述

乳腺癌數據源

在這裏插入圖片描述

Step 1 清洗數據

在這裏插入圖片描述

Step 2 分割訓練集和測試集

在這裏插入圖片描述

Step 3 訓練模型

在這裏插入圖片描述

Step 4 評估模型

在這裏插入圖片描述

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