2014-05-07 98 views
5

我是新來的火花,我們在紗線上運行火花。我可以很好地運行我的測試應用程序。我正在嘗試在Graphite中收集火花指標。我知道對metrics.properties文件所做的更改。但是我的火花應用程序將如何看到這個conf文件?紗線上的火花;如何向石墨匯發送指標?

/xxx/spark/spark-0.9.0-incubating-bin-hadoop2/bin/spark-class org.apache.spark.deploy.yarn.Client --jar /xxx/spark/spark-0.9.0-incubating-bin-hadoop2/examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar --addJars "hdfs://host:port/spark/lib/spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar" --class org.apache.spark.examples.Test --args yarn-standalone --num-workers 50 --master-memory 1024m --worker-memory 1024m --args "xx" 

我應該在哪裏指定metrics.properties文件?

我做了這些改變它:

*.sink.Graphite.class=org.apache.spark.metrics.sink.GraphiteSink 
*.sink.Graphite.host=machine.domain.com 
*.sink.Graphite.port=2003 

master.source.jvm.class=org.apache.spark.metrics.source.JvmSource 

worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource 

driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource 

executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource 

回答

6

我同樣的事情掙扎。我有工作使用這些標誌:

--files=/path/to/metrics.properties --conf spark.metrics.conf=metrics.properties

這是棘手,因爲--files標誌使得它讓你/path/to/metrics.properties文件中的每一個執行程序的本地磁盤空間作爲metrics.properties結束; AFAIK沒有辦法指定更復雜的目錄結構,或者有兩個相同的文件basename

相關,我提交了SPARK-5152關於讓spark.metrics.conf文件從HDFS中讀取,但似乎需要一個相當侵入性的改變,所以我並不屏住呼吸。

+0

實際上是否需要將這些標誌添加到提交腳本中?該文檔指出,如果可以在'$ SPARK_HOME/conf /' – fedragon

+0

好點,@Freidereikhs中找到'metric.properties',它將自動被選中。我認爲'--files'仍然是必要的,因爲你需要'metrics.properties'文件被髮送給每個執行者;基於原始問題,似乎默認的'$ SPARK_HOME/conf /'行爲對@ user3614090不起作用,但是我會在我的答案中記下這一點。謝謝! –

+0

進一步思考它,似乎只有每個執行者都有'conf /'目錄,這些'metrics.properties'文件存在,那麼默認纔會起作用。我會留下答案,因爲它更明確而且,正如我之前提到的那樣,似乎默認行爲有點棘手,並且已經不適用於OP。 –

4

我發現了針對同一問題的不同解決方案。看起來Spark也可以從其配置屬性中獲取這些度量標準設置。例如從metrics.properties下列行:

*.sink.Graphite.class=org.apache.spark.metrics.sink.GraphiteSink 

也可以被指定爲與鍵spark.metrics.conf.*.sink.graphite.class和值org.apache.spark.metrics.sink.GraphiteSink一個火花屬性。您只需要爲每個密鑰添加spark.metrics.conf.

我已經結束了把所有這些設置在這樣的代碼:

val sparkConf = new spark.SparkConf() 
.set("spark.metrics.conf.*.sink.graphite.class", "org.apache.spark.metrics.sink.GraphiteSink") 
.set("spark.metrics.conf.*.sink.graphite.host", graphiteHostName) 
// etc. 
val sc = new spark.SparkContext(sparkConf) 

這樣,我已經得到了指標水槽設置爲駕駛者和執行者兩種。我使用的是Spark 1.6.0。

+0

這工作很好。我正在使用Spark 2.2.0。 – jyu