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 omitidosApó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:--jars
SparkContext.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.