[Spark]-集羣與日誌監控

1.Spark的集羣模式node

  1.1 集羣中的組件apache

    1.1.1 driver 後端

      一個Spark應用自己在集羣中是做爲一個獨立進程運行的.它在main程序中經過SparkContext來進行協調.這個獨立進程就是driver端瀏覽器

    1.1.2 executor緩存

      爲了運行在集羣上.driver端的SparkContext能夠鏈接至幾種集羣調度器(Cluster Manager)(StandAlone,Mesos,YARN等).安全

      這些集羣調度器會分配資源.一旦分配成功,Spark就會獲取集羣中的用於執行的資源(Executor 進程).這些Executor進程能夠運行計算和存儲數據.服務器

      接下來,SparkContext會將應用程序代碼(jar,或者Python文件)發送給Executor用以執行網絡

  1.2 一些Spark架構上的重要點多線程

    i).每一個應用獲取到的executor進程,會一直持續到整個應用的生命週期結束.而且在executor的內部,會以多線程的形式運行多個任務(Task)架構

     優點是每一個應用之間相互隔離,在每一個應用的driver調度它本身的Task,而不一樣應用的task運行在不一樣的executor(也表明不一樣的JVM)上

     劣勢是除非將數據寫在一個第三方中,不然不一樣的Spark應用是不能實現數據共享的

    ii).Spark應用自己不知道其集羣調度器是什麼只要Spark能拿到executor並最終創建鏈接.它不關心這個executor是Mesos或者YARN調度的

    iii).由於driver的中心地位,在Spark應用的整個生命週期中.driver必須保持對全部的executor的網絡尋址.以監聽和接收來自executor的鏈接請求

    iv).由於driver負責調度集羣上的任務(Task),更好的方式應該是在相同的局域網中靠近 worker 的節點上運行。

      若是您不喜歡發送請求到遠程的集羣,倒不如打開一個 RPC 至 driver 並讓它就近提交操做而不是從很遠的 worker 節點上運行一個 driver

  1.3 Spark集羣的術語

Application 用戶構建在 Spark 上的程序。由集羣上的一個 driver 程序和多個 executor 組成
Application jar 一個包含用戶 Spark 應用的 Jar.(用戶的 Jar 應該沒有包括 Hadoop 或者 Spark 庫,由於它們將在運行時添加)
Driver program 該進程運行應用的 main() 方法而且建立了 SparkContext
Cluster manager 一個外部的用於獲取集羣上資源的服務。(例如,Standlone Manager,Mesos,YARN)
Deploy mode 根據 driver 程序運行的地方區別.Cluster模式:driver運行與集羣以內. Client模式:driver由提交者在集羣以外自行建立
Worker node 任何在集羣中能夠運行應用代碼的節點
Executor 一個爲了在 worker 節點上的應用而啓動的進程,它運行 task 而且將數據保持在內存中或者硬盤存儲。每一個應用有它本身的 Executor
Task 任務.一個將要被髮送到 Executor 中的工做單元.
Job 做業.一個由多個任務組成的並行計算,而且能從 Spark action 中獲取響應(例如 savecollect); 好比action,對用戶來講可見的基本都是Job
Stage 每一個 Job 被拆分紅更小的被稱做 stage(階段) 的 task(任務) 組,stage 彼此之間是相互依賴的(與 MapReduce 中的 map 和 reduce stage 類似)

2.Spark的集羣調度類型

  Spark目前支持如下四種集羣調度類型:

    Standalone 

    Apache Mesos

    Hadoop YARN

    Kubernetes

3.應用程序的提交

  使用 spark-submit 腳本能夠提交應用至任何類型的集羣

4.監控

  4.1 Web UI 監控

    每一個SparkContext都會啓動一個Web UI,默認端口爲4040,顯示有關應用程序的有用信息。這包括:

      i).調度器階段和任務的列表

      ii).RDD 大小和內存使用的概要信息

      iii).環境信息

      iv).正在運行的執行器的信息

         能夠經過在Web瀏覽器中打開 http://<driver-node>:4040 來訪問此界面.(若是多個SparkContexts在同一主機上運行,則它們將綁定到連續的端口從4040(4041,4042等)開始

    注意:

      默認狀況下 Web UI 中信息僅適用於運行中的應用程序

      要在過後還能經過Web UI查看,請在應用程序啓動以前,將spark.eventLog.enabled設置爲true(詳見後).

  4.2 事件日誌的持久化

    使用file-system提供的程序類(spark.history.provider)能夠對執行日誌進行持久化.

    當進行持久化時,基本日誌記錄目錄必須在spark.history.fs.logDirectory配置選項中提供,而且應包含每一個表明應用程序的事件日誌的子目錄

    Spark任務自己必須配置啓用記錄事件,並將其記錄到相同共享的可寫目錄下.

      例如,若是服務器配置了日誌目錄hdfs://namenode/shared/spark-logs,

         那麼客戶端選項將是   spark.eventLog.enabled=true 

                  spark.eventLog.dir=hdfs://namenode/shared/spark-logs

  4.3 history server

    若是在一個應用結束以後還須要查看應用的信息.能夠經過Spark的歷史服務器構建應用程序的UI, 只要應用程序的事件日誌存在,就能夠繼續查詢

      ./sbin/start-history-server.sh

      默認狀況,會在http://<server-url>:18080 建立一個WebUI,顯示未完成,完成以及其它嘗試的任務信息

  4.4 history server 的一些相關配置

    4.4.1 環境相關

SPARK_DAEMON_MEMORY history server 內存分配(默認值:1g)
SPARK_DAEMON_JAVA_OPTS history server JVM選項(默認值:無)
SPARK_PUBLIC_DNS history server 公共地址。若是沒有設置,應用程序歷史記錄的連接可能會使用服務器的內部地址,致使連接斷開(默認值:無)
SPARK_HISTORY_OPTS spark.history.* history server 配置選項(默認值:無)

      

     4.4.2 Spark配置

spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider 執行應用程序歷史後端的類的名稱。 目前只有一個實現,由Spark提供,它查找存儲在文件系統中的應用程序日誌
spark.history.fs.logDirectory file:/tmp/spark-events 要加載的應用程序事件日誌的目錄.能夠是本地文件系統或任何Hadoop支持的分佈式文件系統
spark.history.fs.update.interval 10s 在日誌目錄中檢查新的或更新的日誌間隔區間.
spark.history.retainedApplications 50 在緩存中保留UI數據的應用程序數量.若是超出此上限,則最先的應用程序將從緩存中刪除(刪除後從磁盤讀取)
spark.history.ui.maxApplications Int.MaxValue 在歷史記錄摘要頁面上顯示的應用程序數量
spark.history.ui.port 18080 history server 的Web界面綁定的端口
spark.history.kerberos.enabled false 代表 history server 是否應該使用kerberos進行登陸.若是 history server 正在訪問安全的Hadoop集羣上的HDFS文件
spark.history.kerberos.principal (none) 若是使用使用kerberos進行登陸,history server 的Kerberos主要名稱
spark.history.kerberos.keytab (none) 若是使用使用kerberos進行登陸,history server 的kerberos keytab文件的位置
spark.history.ui.acls.enable false 指定是否應檢查acls受權查看應用程序的用戶
spark.history.ui.admin.acls empty 經過逗號來分隔具備對history server中全部Spark應用程序的查看訪問權限的用戶/管理員列表
spark.history.ui.admin.acls.groups empty 經過逗號來分隔具備對history server中全部Spark應用程序的查看訪問權限的組的列表
spark.history.fs.cleaner.enabled false 指定 History Server是否應該按期從存儲中清除事件日誌
spark.history.fs.cleaner.interval 1d job history清潔程序檢查要刪除的文件的時間間隔
spark.history.fs.cleaner.maxAge 7d history保留時間,超出這個時間江北清潔程序刪除
spark.history.fs.numReplayThreads 25% of available cores history server 用於處理事件日誌的線程數

 

      注意:

      i).history server 顯示完成的和未完成的Spark做業。 若是應用程序在失敗後進行屢次嘗試,將顯示失敗的嘗試,以及任何持續未完成的嘗試或最終成功的嘗試

      ii).未完成的程序只會間歇性地更新。 更新的時間間隔由更改文件的檢查間隔 (spark.history.fs.update.interval) 定義。 在較大的集羣上,更新間隔可能設置爲較大的值。

       查看正在運行的應用程序的方式其實是查看本身的Web UI

      iii).沒有註冊完成就退出的應用程序將被列出爲未完成的,即便它們再也不運行。若是應用程序崩潰,可能會發生這種狀況

      iv).一個用於表示完成Spark做業的一種方法是明確地中止Spark Context (sc.stop()),或者在Python中使用 with SparkContext() as sc

  4.5 REST API

    Spark也提供Rest方式.這爲開發人員提供了一種簡單的方法來爲Spark建立新的可視化和監控工具

    此處略,詳見官網

  4.6 Metrics 與 Ganglia 

    略,詳見官網

相關文章
相關標籤/搜索