2016-01-15 142 views
2

我正在構建Spark Streaming作業的度量系​​統,在系統中,度量值收集在每個執行器中,因此度量源(用於收集度量的類)需要初始化在每個執行者。spark-submit:--jars不起作用

度量來源被打包在一個jar中,當提交一個作業時,jar通過參數'--jars'從本地發送到每個執行器,但是,執行器開始在jar之前初始化度量值源類到達,結果,它拋出類沒有發現異常。

看來,如果執行者可以等待所有資源準備好,問題就會解決,但我真的不知道該怎麼做。

有沒有人面臨同樣的問題?我試過使用HDFS(將jar複製到HDFS,然後提交作業並讓執行程序從HDFS中的路徑加載類),但是它失敗了。我檢查了源代碼,看來類加載器只能解析本地路徑。

這裏是日誌,你可以看到,罐子是在2016年1月15日18時08分07秒加入到類路徑,但是在初始化18時07分26秒2016年1月15日

開始

INFO 2016-01-15 18:08:07 org.apache.spark.executor.Executor:正在添加 文件:/ var/lib/spark/worker/worker-0/app-20160115180722-0041/0 /./ datainsights度量源組件-1.0.jar 到類加載器

ERROR 2016年1月15日18時07分26秒Logging.scala:96 - org.apache.spark.metrics.MetricsSystem:源類 org.apache.spark。 metrics.PerfCounterSource不能被實例化

下面是我用命令:

spark-submit --verbose \ 
--jars /tmp/datainsights-metrics-source-assembly-1.0.jar \ 
--conf "spark.metrics.conf=metrics.properties" \ 
--class org.microsoft.ofe.datainsights.StartServiceSignalPipeline \ 
./target/datainsights-1.0-jar-with-dependencies.jar 
+0

你可以發佈你嘗試過的命令嗎? – Srini

+0

看來,該jar被加載到類路徑,但由於網絡延遲,該過程非常緩慢。結果,我遇到了另一個問題,我已經更新了這個問題。請看詳情。 –

回答

0

我能想到幾個選項中: -

  1. 創建脂肪JAR文件,其中包括主類和依賴關係。
  2. 如果依賴項僅由執行程序使用,而不是由驅動程序使用,那麼您可以使用SparkConf.setJars(....)明確添加jar文件,或者驅動程序也可以使用該文件,那麼也可以使用命令行選項​​來配置Driver類路徑。
  3. 嘗試使用下面的參數在火花default.conf進行配置: -

    spark.executor.extraClassPath=<classapth> 
    spark.executor.extraClassPath=<classapth> 
    

不管你做什麼,我會建議解決網絡延遲,否則會傷害的性能Spark工作。

+0

感謝您的回覆,我嘗試了這種方法,將jar發送給每個執行程序,但執行程序在jar到達執行程序前立即開始初始化。也許網絡確實是一個問題,但我認爲Spark應該有一個功能來確保執行程序在啓動初始化之前所有資源都到達執行程序 –