apache-spark - maxretries - spark ui retainedjobs
Spark lanza la excepción ClassNotFoundException cuando usa la opción--jars (2)
¿Está su clase SimpleApp en algún paquete específico? Parece que necesita incluir el nombre completo del paquete en la línea de comandos. Por lo tanto, si la clase SimpleApp se encuentra en com.yourcompany.yourpackage, deberá enviar el trabajo Spark con --class "com.yourcompany.yourpackage.SimpleApp" en lugar de --class "SimpleApp". Tuve el mismo problema y cambiar el nombre al paquete completo y el nombre de la clase lo solucionó. ¡Espero que ayude!
Estaba tratando de seguir el ejemplo de aplicación independiente de Spark que se describe aquí https://spark.apache.org/docs/latest/quick-start.html#standalone-applications
El ejemplo funcionó bien con la siguiente invocación:
spark-submit --class "SimpleApp" --master local[4] target/scala-2.10/simple-project_2.10-1.0.jar
Sin embargo, cuando intenté introducir algunas bibliotecas de terceros a través de --jars
, se --jars
ClassNotFoundException
.
$ spark-submit --jars /home/linpengt/workspace/scala-learn/spark-analysis/target/pack/lib/* /
--class "SimpleApp" --master local[4] target/scala-2.10/simple-project_2.10-1.0.jar
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Exception in thread "main" java.lang.ClassNotFoundException: SimpleApp
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:300)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Eliminando la opción --jars
y el programa se ejecuta de nuevo (aún no empecé a usar esas bibliotecas). ¿Cuál es el problema aquí? ¿Cómo debo añadir los frascos externos?
De acuerdo con --help
spark-submit
, la opción --jars
espera que una lista separada por comas de archivos jar locales se incluya en las rutas de clase del controlador y del ejecutor.
Creo que lo que está sucediendo aquí es que /home/linpengt/workspace/scala-learn/spark-analysis/target/pack/lib/*
está expandiendo en una lista de tarros separados por espacios y el segundo JAR en la lista está siendo tratado como el tarro de aplicación.
Una solución es usar su shell para construir una lista de archivos separados por comas; Esta es una forma rápida de hacerlo en bash, basada en esta respuesta en (vea esa respuesta para enfoques más complejos que manejan nombres de archivos que contienen espacios):
spark-submit --jars $(echo /dir/of/jars/*.jar | tr '' '' '','') /
--class "SimpleApp" --master local[4] path/to/myApp.jar