Así que he estado usando sbt con la asamblea para el paquete de todos mis dependencias en un solo frasco para mi la chispa de puestos de trabajo. Tengo varios trabajos donde yo estaba usando c3p0 para la conexión de configuración de la piscina de la información, de difusión que fuera, y, a continuación, utilizar foreachPartition en la RDD para, a continuación, tomar una conexión, e insertar los datos en la base de datos. En mi sbt script de generación, que incluyen

"mysql" % "mysql-connector-java" % "5.1.33"

Esto se asegura de que el conector JDBC está empaquetado con el trabajo. Todo funciona de maravilla.

Hace tan poco que empecé a jugar con SparkSQL y se dio cuenta de que es mucho más fácil simplemente tomar un dataframe y guardarlo en un jdbc fuente de las nuevas características en 1.3.0

Me da el siguiente excepción :

java.sql.SQLException: No controlador apropiado para encontrar
jdbc:mysql://algunos.dominio.com/myschema?usuario=usuario&password=contraseña
java.sql.DriverManager.getConnection(DriverManager.java:596) en
java.sql.DriverManager.getConnection(DriverManager.java:233)

Cuando se ejecuta este local me tiene a su alrededor mediante el establecimiento de

SPARK_CLASSPATH=/path/where/mysql-connector-is.jar

En definitiva, lo que estoy queriendo saber es, ¿por qué el trabajo no es capaz de encontrar el controlador debe ser empaquetado con él? Mis otros puestos de trabajo nunca había tenido este problema. Por lo que puedo decir tanto c3p0 y el dataframe código de tanto hacer uso de la java.sql.DriverManager (el cual se encarga de la importación de todo, desde lo que puedo decir), así que debería funcionar bien?? Si hay algo que impide que el método de la asamblea de trabajo, ¿qué debo hacer para que esto funcione?

  • ¿Cómo lanzar tu trabajo? ¿Has comprobado que tu reunidos frasco incluye el driver de MySQL?
  • Reviso el frasco, contiene el driver de MySQL. Puedo iniciar mi trabajo con bin/spark-presentar –clase «com.mypackage.MyJob» –verbose chispa://lugar.donde.este.existe.com:7077 MyJob.jar
  • Tengo el mismo problema, también tratando de salvar a mysql. ¿Alguna vez llegar al fondo de esto?
InformationsquelleAutor Adam Ritter | 2015-04-10

10 Comentarios

  1. 31

    Esta persona estaba teniendo problema similar: http://apache-spark-user-list.1001560.n3.nabble.com/How-to-use-DataFrame-with-MySQL-td22178.html

    Ha actualizado su conector de drivers a la versión más reciente? También hizo que especificar la clase de conductor cuando se llama load()?

    Map<String, String> options = new HashMap<String, String>();
    options.put("url", "jdbc:mysql://localhost:3306/video_rcmd?user=root&password=123456");
    options.put("dbtable", "video");
    options.put("driver", "com.mysql.cj.jdbc.Driver"); //here
    DataFrame jdbcDF = sqlContext.load("jdbc", options); 

    En la chispa de la/conf/spark-defaults.conf, también puede establecer la chispa.el controlador.extraClassPath y chispa.ejecutor.extraClassPath a la ruta de su driver de MySql .jar

    • Montones de gracias por tu «//aquí» !!!
    • Muchas gracias por el «//aquí» puntero
  2. 18

    Tanto chispa conductor y el ejecutor de la necesidad de driver de mysql en la ruta de clases para especificar

    spark.driver.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
    spark.executor.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
    
    • Usando python esto resuelve el problema para mí
    • o SparkSession.builder.config('spark.driver.extraClassPath', '/path/to/mysqlconnector.jar').config('spark.executor.extraClassPath', '/path/to/mysqlconnector.jar').getOrCreate(). Si usted intenta esto DESPUÉS de haber creado una sesión como esta ya (pero sin las configuraciones para el MySQL connector jar), a continuación, reinicie el all-spark-cuaderno ventana acoplable contenedor si el uso de la chispa a través de eso, y vuelva a intentar la construcción de la chispa de la sesión, incluyendo la configuración de las declaraciones.
  3. 12

    Estas opciones se menciona claramente en chispa docs: --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar

    El error que estaba haciendo era mencionar estas opciones después de mi solicitud de la jarra.

    Sin embargo, la forma correcta es especificar estas opciones inmediatamente después de chispa a presentar:

    spark-submit --driver-class-path /somepath/project/mysql-connector-java-5.1.30-bin.jar --jars /somepath/project/mysql-connector-java-5.1.30-bin.jar --class com.package.MyClass target/scala-2.11/project_2.11-1.0.jar

    • Usted es un protector de la vida. Gracias
    • Estoy construyendo un uber-jar con toda la clase de conductor en allí también. ¿Tengo que proporcionar manualmente el controlador de la jarra con la chispa-enviar comando?
    • Estoy asumiendo que si usted ha proporcionado un maestro de frasco, a continuación, todos los frascos en su interior deben estar disponibles en el classpath. ¿Has probado este enfoque?
    • ¿Cómo hacer esto correctamente al enviar un trabajo a EMR?
    • No han trabajado en EMR – necesidad de comprobar.
    • Si se utiliza a través de spark-shell en windows se puede utilizar de la siguiente manera : spark-shell –controlador de clase de la ruta «C:\Program Files\Microsoft JDBC Driver 6.0 para SQL Server\sqljdbc_6.0\enu\jre8\sqljdbc42.jar» –frascos «C:\Program Files\Microsoft JDBC Driver 6.0 para SQL Server\sqljdbc_6.0\enu\jre8\sqljdbc42.jar»

  4. 7

    Con chispa 2.2.0, el problema fue corregido por mí mediante la adición de la clase extra de información de la ruta para SparkSession sesión en la secuencia de comandos de python :

        spark = SparkSession \
            .builder \
            .appName("Python Spark SQL basic example") \
            .config("spark.driver.extraClassPath", "/path/to/jdbc/driver/postgresql-42.1.4.jar") \
            .getOrCreate()
    

    Ver la documentación oficial https://spark.apache.org/docs/latest/configuration.html

    En mi caso, la chispa no es lanzado desde el comando de la cli, pero a partir de django framework https://www.djangoproject.com/

    • Alguna idea de si esto iba a funcionar cuando la presentación de un trabajo de Amazon EMR?
  5. 6

    chispa.el controlador.extraClassPath no funciona en modo-cliente:

    Nota: En el modo cliente, esta configuración no debe ser fijado a través de la SparkConf directamente en su aplicación, debido a que el conductor de la JVM ya ha comenzado en ese momento. En su lugar, por favor, ajuste esto a través de la –controlador de clase de la ruta de opción de línea de comandos o en su defecto un archivo de propiedades.

    Env variable SPARK_CLASSPATH ha sido desaprobado en Spark 1.0+.

    Primero debe copiar el jar del controlador jdbc en cada ejecutor bajo el mismo sistema de ficheros local ruta de acceso y, a continuación, utilice las siguientes opciones usted chispa a presentar:

    --driver-class-path "driver_local_file_system_jdbc_driver1.jar:driver_local_file_system_jdbc_driver2.jar"
    --class "spark.executor.extraClassPath=executors_local_file_system_jdbc_driver1.jar:executors_local_file_system_jdbc_driver2.jar"
    

    Por ejemplo en el caso de TeraData necesita tanto terajdbc4.jar y tdgssconfig.jar .

    Lo prefiere, puede modificar compute_classpath.sh en todos los nodos de trabajo, la Chispa de la documentación dice:

    El controlador JDBC de la clase debe ser visible para el primordial de la clase loader en la sesión del cliente y en todos los ejecutores. Esto es debido a que Java de la clase DriverManager hace una comprobación de seguridad que resulta de ignorar a todos los conductores que no son visibles a primordiales de la clase loader cuando uno va a abrir una conexión. Una forma muy cómoda de hacerlo es modificar compute_classpath.sh en todos los nodos de trabajo para incluir su jar del controlador.

  6. 3

    Existe un Java simple truco para resolver su problema. Usted debe especificar Class.forName() instancia. Por ejemplo:

     val customers: RDD[(Int, String)] = new JdbcRDD(sc, () => {
           Class.forName("com.mysql.jdbc.Driver")
           DriverManager.getConnection(jdbcUrl)
          },
          "SELECT id, name from customer WHERE ? < id and id <= ?" ,
          0, range, partitions, r => (r.getInt(1), r.getString(2)))
    

    Comprobar la docs

    • En Scala he usado: nuevo JdbcRDD(sc, () => { Clase.forName(driverName).newInstance; DriverManager.getConnection(url, usuario, contraseña) }, «SELECT * FROM stats_20151230», 0, 0, 1) Gracias!
  7. 1

    Tuve el mismo problema al ejecutar trabajos de más de un Mesos de cluster server en modo de clúster.

    El uso de un controlador JDBC es necesario añadir la dependencia para el sistema classpath no el marco de la ruta de clases. Sólo he encontrado la forma de hacerlo mediante la adición de la dependencia en el archivo spark-defaults.conf en cada instancia del clúster.

    Las propiedades de agregar spark.driver.extraClassPath y spark.executor.extraClassPath y la ruta de acceso debe ser en el sistema de archivos local.

    • he probado todas las soluciones aquí, no funciona nada, sigo recibiendo «no apto» controlador de error. ideas?
  8. 1

    Puedo agregar el archivo jar a la SPARK_CLASSPATH en spark-env.sh funciona.

    export SPARK_CLASSPATH=$SPARK_CLASSPATH:/local/spark-1.6.3-bin-hadoop2.6/lib/mysql-connector-java-5.1.40-bin.jar
    
  9. 1

    Simple manera fácil es copiar «mysql-connector-java-5.1.47.jar» en «la chispa-2.4.3\frascos\» directorio

  10. -1

    Me estaba enfrentando el mismo problema cuando yo estaba tratando de ejecutar la chispa-comando de shell de mi máquina windows. La ruta que pase por la ubicación del controlador, así como para la jarra que se va a utilizar debe estar en la doble cita de lo contrario se malinterprete y no obtener el resultado exacto que desea.

    usted también tendría que instalar el controlador JDBC de SQL server desde el link : Controlador JDBC

    He utilizado el siguiente comando para que esto funcione bien para mí en mi máquina windows:

    chispa-shell –controlador de clase de la ruta «C:\Program Files\Microsoft JDBC Driver 6.0 para SQL Server\sqljdbc_6.0\enu\jre8\sqljdbc42.jar» –frascos «C:\Program Files\Microsoft JDBC Driver 6.0 para SQL Server\sqljdbc_6.0\enu\jre8\sqljdbc42.jar»

    • Podría usted por favor, cambiar la imagen del enlace a la realidad de enlace para el enlace en la imagen? Sólo pegar la URL sería suficiente, no hay necesidad de ninguna de las imágenes en absoluto. 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here