大數(shù)據(jù)處理已經(jīng)進入了新時代,數(shù)據(jù)的復雜度越來越高,人們對數(shù)據(jù)實時處理的要求也越來越高。新時代帶來了很多的新改變,但是最大程度創(chuàng)造數(shù)據(jù)價值是大數(shù)據(jù)時代不變的宗旨。隨著實時數(shù)據(jù)處理的用例越來越多,實時數(shù)據(jù)處理框架也豐富起來,例如, Apache Spark、Storm、 Heron、 Flink、Apex、 Kafka Streams 等等。每一種框架都有其特定的適用場景,但是框架多樣化也帶來了一些問題,增加了數(shù)據(jù)處理的復雜性,增加了運營難度。
Apache Spark是當前最流行的數(shù)據(jù)處理技術(shù),下面我們就來回顧一下Spark的基本知識。
Spark 是什么?
Spark是大數(shù)據(jù)處理的一種通用框架,主要應用在批處理和流式數(shù)據(jù)。下面我們來看一下Spark的執(zhí)行模型以及Spark架構(gòu)的組成部分。
1.Spark Manager和Master Manager主要運行在以下模式中:
Standalone: 單一的cluster manager,管理方便。
Mesos: 公司常用模式,使用方便靈活。
Yarn:是目前最有前景的部署模式,默認配置為Hadoop 2.0。
2.Spark Worker: 運行在standalone模式下,是Spark的工作節(jié)點,用于執(zhí)行提交的作業(yè)。
3.Spark Executor: 真正執(zhí)行作業(yè)的地方,一個集群一般包含多個Executor,每個Executor接收Driver的命令Launch Task,一個Executor可以執(zhí)行一到多個Task。
4.Spark Driver: 一個Spark作業(yè)運行時包括一個Driver進程,也是作業(yè)的主進程,負責作業(yè)的解析、生成Stage并調(diào)度Task到Executor上。包括DAGScheduler,TaskScheduler。
Spark Driver會創(chuàng)建一個Spark Context,并與Manager、Master通信,在worker節(jié)點上獲取資源。Worker在本地為每個應用創(chuàng)建executor。完成之后,Driver和Executor就可以直接進行通信了。工作過程中,worker會一直監(jiān)視Executor的情況。Driver中的DAGScheduler會根據(jù)用戶程序,生成執(zhí)行計劃,并調(diào)度執(zhí)行,Driver等程序全部結(jié)束之后才會結(jié)束。
Spark應用程序的執(zhí)行是由很多組件共同協(xié)作來完成的。所以,如果要在生產(chǎn)環(huán)境中部署Spark,那么就要時刻監(jiān)控不同組件,了解組件性能參數(shù),當發(fā)生錯誤時,要能夠及時報警,合理處置。
Monitoring Spark Streaming 面臨的挑戰(zhàn)
Spark UI提供了儀表板功能,但是如果你想要投入實際生產(chǎn),僅僅安裝這個是遠遠不夠的。必須要能夠時刻監(jiān)控Spark的內(nèi)部運作和其組件的情況。
我們要分三個層面來監(jiān)控Spark:
1.Spark的基礎(chǔ)組成部分:Master、Standalone、Mesos、Yarn、Workers
2.Applications :Driver、Executors
3.Underlying hosts:Disks、CPU、網(wǎng)絡(luò)
這三個層面是相互依存、密不可分的。如果主機或者磁盤發(fā)生故障,那么Spark的基礎(chǔ)設(shè)施就會發(fā)生問題進而影響到應用程序。所以,在這三層之間建立相關(guān)的洞察是至關(guān)重要的。這時,你就需要有一套監(jiān)控系統(tǒng)來監(jiān)控錯誤發(fā)生在哪一層。如果沒有這個系統(tǒng),那么勢必得花費幾倍的時間去查找問題出在哪里。
OpsClarity成功解決了這個問題,它可以自動發(fā)現(xiàn)數(shù)據(jù)管道和應用中的全部服務的拓撲結(jié)構(gòu),并用紅,綠,橙三種顏色來標記接口,能夠更加快速的對問題做出響應。
▲OpsClarity 的界面展示
如何配置Monitoring
Spark通過不同的端點為每個組件提供metric。例如,你想查看Spark Driver的詳細信息,你只需知道它的URL,Spark就可以自動訪問該URL。在Driver中有一個典型的問題,就是如何判斷哪些worker在工作并識別出它的UI端口。其實,我們可以把客戶端的Driver當做固定的URL端點。該軟件能夠自動找出應用程序中運行的Driver,然后收集每個端口的metric。
類似于Spark這樣的框架,集群是可以動態(tài)調(diào)整大小的。所以,必須確保新增的組件也可以自動配置監(jiān)控。另外,在一個executor發(fā)生故障時,啟用另一個executor的情況下不應該出現(xiàn)警報。
檢查Spark應用程序。在Driver發(fā)生故障時,應用程序需要連接到別的application context和worker節(jié)點上仍然可以使用。在這種情況下,metric collection、port checks 和 monitor接口都需要移植到新的Driver上 。
拓撲監(jiān)測和自動配置功能能夠?qū)崟r監(jiān)測Spark基礎(chǔ)設(shè)施發(fā)生的變化,無需人為干預。
原文鏈接:
https://dzone.com/articles/monitoring-apache-spark-why-is-it-challenging