1. 程式人生 > >[0.0.0] 大型spark專案實戰

[0.0.0] 大型spark專案實戰

參考

場景

在專案實戰中理解:
1、spark core、sql、streaming以及機器學習與圖計算相關的知識點
2、效能調優、troubleshooting與資料傾斜解決方案
當然,隨便發發牢騷,關於生活。

前言

關於spark大型專案實戰

話說Snail n個月前,因工作需要準備自學spark,走大資料開發之路。n個月後的今天,自我感覺該學的spark知識點都學的差不多了:scala程式語言從零基礎到對其高階特性,比如,隱式轉換、型別類有比較深刻的認識;基本從頭至尾過濾了一遍spark官網相關文件;以相對真實的實驗環境(2臺阿里雲主機)對spark官網以及《DT大資料夢工廠》王家林老師授課的案例進行了實驗 - 當然,這其中遇到了不少問題 - 然而,“用蓬勃的生命力戰勝人性的悲劇性”,人活著的意義,不就在於探索未知領域,不就在於瞎折騰,不就在於體驗人生百態、世間冷暖嗎?

現在,Snail急需要做一個大型spark專案來進一步鞏固與理解前面所學的 - 當然,更重要的是,面試的時候的可以裝逼,以精湛的spark技術直接kill面試官(注:snail一前同事堪稱麵霸,‘kill面試官’這個詞語正是出自他那裡)! 都是猿,大家靜下心裡討論技術,互相學習多好啊,為何一定要‘編’專案經驗,大談各種自己都沒有實際使用過的技術甚至一點都不瞭解的技術名字?其實,也挺好?!王教主說,I love pains 。

好的,反正在網上一頓亂搜尋後,Snail最終找到了《Spark大型專案實戰:電商使用者行為分析大資料平臺》這個專案,果斷花幾百大洋買下了整套視訊,並且一口氣學到了68課:中華石杉講的確實很不錯,相當不錯,極有條例,深入淺出 ,特別是spark效能調優這一部分,結合專案全面解讀了 spark Shuffle機制。 《大型spark專案實戰》旨在以博文的形式記錄與再現Snail所理解的《Spark大型專案實戰:電商使用者行為分析大資料平臺》課程經典。廢話先說到這裡,本系列博文共分為三大部分:準備篇、開發篇與效能調優篇,let’s rock and spark !

一、準備篇

該部分主要解讀專案開發流程、資料流轉與公共元件的開發,旨在找準spark工程師在整個專案開發過程中的位置。具體包括配置管理元件、JDBC輔助元件、日誌元件、異常處理元件,以及常用工具類(日期轉換、字串處理等)與測試環境資料模擬程式的開發以及專案開發流程、資料流轉圖。

二、開發篇

包括四大spark業務模組的開發:

  1. 使用者訪問session分析
  2. 頁面單跳轉化率
  3. 各區域熱門商品統計
  4. 廣告點選流量實時統計

按照中華石杉的說話,這四大模組用到了spark core、spark sql以及spark streaming 90%以上的知識點 ,至於spark其他子框架:機器學習,圖計算並沒有涉及到。Snail決定在以後的工作中為該專案加上機器學習,圖計算等,以期完整。

三、效能調優篇

效能調優篇部分又包括效能調優、troubleshooting與資料傾向解決方案三大子模組

效能調優模組

以spark業務程式碼模組為背景,不止於通過配置各種引數讓spark應用程式更快速的輸出結果,而是詳解效能調優背後的故事。Snail按其對效能影響的程度將其總結為調優三部曲:

  • 巨集觀調優
    包括分配更過資源,調節並行度,重構RDD架構以及RDD持久化三種手段;

  • Shuffle調優
    包括合併map端輸出檔案、調節map端記憶體緩衝與reduce端記憶體佔比、權衡HashShuffleManager、SortShuffleManager與Tungsten-sort ShuffleManager。

  • 3、微觀調優
    微觀調優包括配置檔案類調優與運算元類調優。其中,配置檔案類調優包括:廣播大變數、使用Kryo序列化、使用fastutil優化資料存取格式、調節資料本地化等待時長、降低cache操作的記憶體佔比、調節executor堆外記憶體與連線等待時長; 運算元類調優包括:使用MapPartitions提升Map類操作效能、filter過後使用coalesce減少分割槽數量、使用foreachPartition優化寫資料庫效能、使用repartition解決Spark SQL低並行度的效能問題、reduceByKey本地聚合介紹。

Troubleshooting模組

主要包括控制shuffle reduce端緩衝大小以避免OOM、JVM GC導致的shuffle檔案拉取失敗、YARN佇列資源不足導致的application直接失敗、各種序列化導致的報錯、運算元函式返回NULL導致的問題、yarn-client模式導致的網絡卡流量激增問題、yarn-cluster模式的JVM棧記憶體溢位問題、持久化方式以及checkpoint的使用等生產環境常見問題的解決方案。

資料傾斜部分

旨在分析資料傾斜解決方案的原理以及現象,解讀提高shuffle操作reduce並行度、使用隨機Key實現雙重聚合、將reduce join轉換為map join、sample取樣傾斜key單獨進行join、使用隨機數以及擴容表進行join等資料傾斜問題的解決方案。

總結

不知不覺到了 00:04 該洗洗碎了
good night , spark