Spark Metrics配置詳解

筆尖的痕發表於2016-03-13
和Hadoop類似,在Spark中也存在很多的Metrics配置相關的引數,它是基於Coda Hale Metrics Library的可配置Metrics系統,我們可以通過配置檔案進行配置,通過Spark的Metrics系統,我們可以把Spark Metrics的資訊報告到各種各樣的Sink,比如HTTP、JMX以及CSV檔案。

  Spark的Metrics系統目前支援以下的例項:
  (1)、master:Spark standalone模式的master程式;
  (2)、worker:Spark standalone模式的worker程式;
  (3)、executor:Spark executor;
  (4)、driver:Spark driver程式;
  (5)、applications:master程式裡的一個元件,為各種應用作彙報。

  在Spark的Metrics系統主要支援Sink和Source兩種,其中,Sink指定metrics資訊傳送到哪裡,每個instance可以設定一個或多個Sink(這點和Flume很類似)。Sink的原始碼位於org.apache.spark.metrics.sink包中;而Source也是指資訊的來源,它主要分為兩大類:
  (1)、Spark內部source,比如MasterSource、WorkerSource等,它們會接收Spark元件的內部狀態;
  (2)、通用source,如:JvmSource,它收集低階別的狀態。

支援的Sink類別

ConsoleSink

  ConsoleSink是記錄Metrics資訊到Console中。

名稱 預設值 描述
class org.apache.spark.metrics.sink.ConsoleSink Sink類
period 10 輪詢間隔
unit seconds 輪詢間隔的單位

CSVSink

定期的把Metrics資訊匯出到CSV檔案中。

名稱 預設值 描述
class org.apache.spark.metrics.sink.CsvSink Sink類
period 10 輪詢間隔
unit seconds 輪詢間隔的單位
directory /tmp CSV檔案儲存的位置

JmxSink

可以通過JMX方式訪問Mertics資訊

名稱 預設值 描述
class org.apache.spark.metrics.sink.JmxSink Sink類

MetricsServlet

名稱 預設值 描述
class org.apache.spark.metrics.sink.MetricsServlet Sink類
path VARIES* Path prefix from the web server root
sample false Whether to show entire set of samples for histograms ('false' or 'true') |

這個在Spark中預設就開啟了,我們可以在4040埠頁面的URL後面加上/metrics/json檢視

GraphiteSink

名稱 預設值 描述
class org.apache.spark.metrics.sink.GraphiteSink Sink類
host NONE Graphite伺服器主機名
port NONE Graphite伺服器埠
period 10 輪詢間隔
unit seconds 輪詢間隔的單位
prefix EMPTY STRING Prefix to prepend to metric name

GangliaSink

由於Licene的限制,預設沒有放到預設的build裡面,如果需要使用,需要自己編譯(這個會在後面專門介紹)

名稱 預設值 描述
class org.apache.spark.metrics.sink.GangliaSink Sink類
host NONE Ganglia 伺服器的主機名或multicast group
port NONE Ganglia伺服器的埠
period 10 輪詢間隔
unit seconds 輪詢間隔的單位
ttl 1 TTL of messages sent by Ganglia
mode multicast Ganglia網路模式('unicast' or 'multicast')

如何使用

  在Spark安裝包的$SPARK_HOME/conf路徑下有個metrics.properties檔案(如果不存在,請將metrics.properties.template重新命名為metrics.properties即可),Spark啟動的時候會自動載入它。

  當然,如果想修改配置檔案位置,我們可以使用-Dspark.metrics.conf=xxx進行修改。

例項

  下面我將簡單地介紹如何使用Spark Metrics。我只想簡單地開啟ConsoleSink,我們可以如下配置:

01 # User: 過往記憶
02 # Date: 2015-05-05
03 # Time: 上午01:16
06 # 過往記憶部落格,專注於hadoop、hive、spark、shark、flume的技術部落格,大量的乾貨
07 # 過往記憶部落格微信公共帳號:iteblog_hadoop
08  
09 *.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
10 *.sink.console.period=10
11 *.sink.console.unit=seconds

period是ConsoleSink的輪詢週期,unit是ConsoleSink的輪詢週期時間單位。上面是配置所有的例項,如果想單獨配置可以如下:

1 master.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
2 master.sink.console.period=15
3 master.sink.console.unit=seconds

這個配置可以覆蓋通用配置符(也就是上面的*號)

我們為master、worker、driver和executor開啟jvm source,如下:

01 # User: 過往記憶
02 # Date: 2015-05-05
03 # Time: 上午01:16
06 # 過往記憶部落格,專注於hadoop、hive、spark、shark、flume的技術部落格,大量的乾貨
07 # 過往記憶部落格微信公共帳號:iteblog_hadoop
08  
09 master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
10 worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
11 driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
12 executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource

  當然,我們還可以自定義Source,這個需要繼承自org.apache.spark.metrics.source.Source類。關於如何自定義Source,我這裡不介紹了,需要的同學可以去參照Spark原始碼,比如JvmSource類的實現。

相關文章