Adicionar jars a uma tarefa do Spark - spark-submit

É verdade ... já foi discutido bastante.

No entanto, há muita ambiguidade e algumas das respostas fornecidas ... incluindo a duplicação de referências de jar nas opções ou na configuração de jars / executor / driver.

Os detalhes ambíguos e / ou omitidos

Após a ambiguidade, detalhes obscuros e / ou omitidos devem ser esclarecidos para cada opção:

Como o ClassPath é afetadoMotoristaExecutor (para tarefas em execução)Ambosde modo nenhumCaractere de separação: vírgula, dois pontos, ponto e vírgulaSe os arquivos fornecidos forem distribuídos automaticamentepara as tarefas (para cada executor)para o driver remoto (se executado no modo de cluster)tipo de URI aceito: arquivo local, hdfs, http, etcSe copiadopara dentro um local comum, em que local (hdfs, local?)As opções às quais isso afeta:--jarsSparkContext.addJar(...) métodoSparkContext.addFile(...) método--conf spark.driver.extraClassPath=... ou--driver-class-path ...--conf spark.driver.extraLibraryPath=...ou--driver-library-path ...--conf spark.executor.extraClassPath=...--conf spark.executor.extraLibraryPath=...para não esquecer, o último parâmetro do envio de spark também é um arquivo .jar.

Estou ciente de onde posso encontrar odocumentação principal do spark, e especificamente sobrecomo enviar, aopções disponível, e também oJavaDoc. No entanto, isso deixou para mim ainda alguns buracos, embora respondesse parcialmente também.

Espero que não seja tão complexo e que alguém possa me dar uma resposta clara e concisa.

Se eu fosse adivinhar pela documentação, parece que--jars, e asSparkContext addJar eaddFile Os métodos são os que distribuem os arquivos automaticamente, enquanto as outras opções apenas modificam o ClassPath.

Seria seguro assumir que, por simplicidade, eu posso adicionar arquivos jar adicionais de aplicativos usando as 3 opções principais ao mesmo tempo:

spark-submit --jar additional1.jar,additional2.jar \
  --driver-library-path additional1.jar:additional2.jar \
  --conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar

Encontrei um bom artigo sobreuma resposta para outra postagem. No entanto, nada de novo aprendeu. O pôster faz uma boa observação sobre a diferença entre o driver local (cliente-fio) e o driver remoto (cluster de fios). Definitivamente importante ter em mente.

questionAnswers(3)

yourAnswerToTheQuestion