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