Agregar frascos a un trabajo Spark - spark-submit

Es cierto ... se ha discutido bastante.

Sin embargo, hay mucha ambigüedad y algunas de las respuestas proporcionadas ... incluida la duplicación de referencias jar en la configuración u opciones de jar / ejecutor / controlador.

Los detalles ambiguos y / u omitidos

Después de la ambigüedad, se deben aclarar los detalles poco claros y / u omitidos para cada opción:

Cómo se afecta ClassPathConductorEjecutor (para tareas en ejecución)AmbosDe ningún modoCarácter de separación: coma, dos puntos, punto y comaSi los archivos provistos se distribuyen automáticamentepara las tareas (a cada ejecutor)para el controlador remoto (si se ejecuta en modo de clúster)tipo de URI aceptado: archivo local, hdfs, http, etc.Si copiadodentro una ubicación común, donde está esa ubicación (hdfs, local?)Las opciones a las que afecta:--jarsSparkContext.addJar(...) métodoSparkContext.addFile(...) método--conf spark.driver.extraClassPath=... o--driver-class-path ...--conf spark.driver.extraLibraryPath=...o--driver-library-path ...--conf spark.executor.extraClassPath=...--conf spark.executor.extraLibraryPath=...Sin olvidar que el último parámetro del envío de chispas también es un archivo .jar.

Soy consciente de dónde puedo encontrar eldocumentación de chispa principal, y específicamente sobrecomo enviar, elopciones disponible, y también elJavaDoc. Sin embargo, eso me dejó todavía algunos agujeros, aunque también respondió parcialmente.

Espero que no sea tan complejo y que alguien pueda darme una respuesta clara y concisa.

Si tuviera que adivinar a partir de la documentación, parece que--jars, y elSparkContext addJar yaddFile Los métodos son los que distribuirán automáticamente los archivos, mientras que las otras opciones simplemente modifican la ClassPath.

¿Sería seguro asumir que, por simplicidad, puedo agregar archivos jar de aplicaciones adicionales usando las 3 opciones principales al mismo tiempo:

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

Encontré un buen artículo sobreuna respuesta a otra publicación. Sin embargo, nada nuevo aprendido. El póster hace un buen comentario sobre la diferencia entre el controlador local (cliente de hilo) y el controlador remoto (grupo de hilo). Definitivamente importante tener en cuenta.

Respuestas a la pregunta(3)

Su respuesta a la pregunta