Spark Streaming 在數據平台日誌解析功能的應用
- 2019 年 11 月 28 日
- 筆記
文 | Pirate on 大數據
一、日誌解析功能的背景
通過日誌,我們可以獲得很多有用的資訊,最常見的日誌資訊包括應用產生的訪問日誌、系統的監控日誌,本文所針對的日誌是大數據離線任務產生的運行日誌。目前日誌解析功能依附於有贊大數據平台,也就是有贊的 data_platform,為該平台的一個功能。
目前支援解析的日誌類型包括:Hive 任務、Spark 任務、Datay 增量任務、導入任務、導出、MR 任務、Hbasebulk、腳本任務等。dataplatform 支援的調度類型為:批量重跑、測試類型、正常調度和手動導入任務。
做這個日誌解析部分的目的分為幾個,首先,在調度頁面主要顯示的是正常調度的任務,希望通過該功能了解不同調度類型的佔比,比如測試類型,第二,了解每種任務類型的調度情況,比如查看運行成功、失敗、重試等情況,第三,了解每種任務類型的資源佔比,比如讀寫 byte 數量。
二、設計分析
2.1 針對不同類型的任務,日誌的結構也不相同,針對這些任務進行了劃分
目前,使用 yarn 進行調度的任務,資源情況已經進行了收集,主要獲取總讀取量、總寫入量、shuffle 量、和 gc 時間等指標,進行存儲匯總和展示,解析該種類型的日誌時,需要將任務開始時間、結束時間等通用的資訊進行保存,解析之後讀取收集的指標表,進行統一封裝,存儲到快取。
Datax 任務類型是導表任務,支援Hive -> Mysql ,Mysql -> Hive , Mysql -> ElasticSearch,Datax 任務類型的日誌結構類似,主要的指標是讀出總記錄數、讀寫失敗數、任務耗時、讀取表、總比特數、使用表等資訊。
不同的任務有不同的運行情況和需求指標,但是大體邏輯和以上兩個類似。
2.2 根據調度類型進行劃分
由於不同的調度類型在存儲的時候目錄資訊不同,並且日誌的開始、結束、失敗等等標識不同,這些可以解析出來,標記任務的運行情況。根據任務類型進行分類,可以將任務分為正常調度、測試類型、手動導表和批量重跑,進而方便在後續解析過程中使用以及標記任務狀態。
2.3 使用架構
由於數據平台的任務調度日誌是實時產生,所以我們選擇流處理框架進行日誌的處理。並且日誌是從調度的集群上進行收集,目前調度數量是每日一萬以上,而在每日凌晨會是任務調度的高峰期,對於吞吐量的要求也比較高,在調研了 Spark Streaming 後,考慮 Spark 支援高吞吐、具備容錯機制的實時流數據的處理的特性,我們選擇 Spark Streaming 進行處理。
目前,我們使用Filebeat監控日誌產生的目錄,收集產生的日誌,打到logstash集群,接入kafka的topic,再由Spark Streaming 進行實時解析,將解析的結果打入Redis快取,供後續統計查詢使用。
三、功能實現
1. 實現資源統計
可以一目了然的看到,任務的運行情況,可以讓用戶一目了然的查看自己任務的運行情況,查看當天失敗、成功、重試的數量以及統計。
2. 針對失敗的任務和重試的任務進行集中的關注,進而實現 task 級別的優化,同時簡化用戶的操作成本,再這個頁面就可以集中查看。
3. 實現資源量的排名統計,可以讓 data_platform 的用戶根據自己使用的情況,尤其是一些特別注意的地方,比如 GC 時間、Shuffle 量等影響大的指標進行集中的管理和優化,同時進行實時的監測。
四、一些注意事項
1. 由於 Spark standalone 模式只支援簡單的資源分配策略,每個任務按照固定的 core 數分配資源,不夠時會出現資源等待的情況,這種簡單的模式並不適用於多用戶的場景,而 Yarn 的動態分配策略可以很好的解決這個問題,可以實現資源的動態共享以及更加靈活的調度策略,所以公司也是採用 Spark on Yarn 的模式。
但是,目前 Spark on Yarn 支援 2 種方式的提交,一種是 Client 模式,這種模 dirver 運行在客戶端,運行情況會收到啟動機器的影響,推薦使用 Cluster 模式,這種模式是將 driver 運行在 Yarn 集群上,可以在客戶端啟動進程消失後進行平穩的運行,同時運行日誌也保存在 Yarn 集群上,方便管理和問題排查。
2. 集群上分配給 Spark Streaming 的核數一定要大於接收器的數量,一個核佔據一個 core,否則的話只會接收,沒有 core 進行 process。
3. Spark 有 2 中接收器,可靠接收器和不可靠接收器,可靠接收器保存數據時帶有備份,只有可靠接收器發送 acknowledgment 給可靠的數據源才可以保證在 Spark 端不丟失數據。
擴展閱讀
-The End-