和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,我們可以如下配置:
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,如下:
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類的實現。