spark-submit: --jars não funciona

Como estou construindo um sistema de métricas para o trabalho do Spark Streaming, no sistema, as métricas são coletadas em cada executor; portanto, uma fonte de métricas (uma classe usada para coletar métricas) precisa ser inicializada em cada executor.

A fonte de métricas é empacotada em um jar; ao enviar uma tarefa, o jar é enviado do local para cada executor usando o parâmetro '--jars'; no entanto, o executor começa a inicializar a classe de origem de métricas antes da chegada do jar, como um resultado, lança exceção de classe não encontrada.

Parece que se o executor puder esperar até que todos os recursos estejam prontos, o problema será resolvido, mas eu realmente não sei como fazê-lo.

Existe alguém enfrentando o mesmo problema?

PS: Tentei usar o HDFS (copie o jar para o HDFS, envie o trabalho e deixe o executor carregar a classe de um caminho no HDFS), mas ele falha. Eu verifiquei o código fonte, parece que o carregador de classes só pode resolver o caminho local.

Aqui está o log, você pode ver que o jar foi adicionado ao caminho de classe em 15-01-15 18:08:07, mas a inicialização é iniciada em 15-01-16 18:07:26

INFO 2016-01-15 18:08:07 org.apache.spark.executor.Executor: Adicionando arquivo: / var / lib / spark / worker / worker-0 / app-20160115180722-0041 / 0 /./ datainsights-metrics -source-assembly-1.0.jar no carregador de classes

ERRO 2016-01-15 18:07:26 Logging.scala: 96 - org.apache.spark.metrics.MetricsSystem: Classe de origem org.apache.spark.metrics.PerfCounterSource não pode ser instanciado

Aqui está o comando que eu uso:

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

questionAnswers(1)

yourAnswerToTheQuestion