Red de conocimiento informático - Problemas con los teléfonos móviles - La programación Spark MySQL no puede obtener datos

La programación Spark MySQL no puede obtener datos

Un punto a tener en cuenta aquí: el método mencionado en este artículo para resolver el problema de que Spark insertIntoJDBC no puede encontrar el controlador Mysql es para el modo independiente (es decir, el modo local). En un entorno de clúster, el siguiente método no funcionará. Esto se debe a que hay un error al cargar el paquete del controlador mysql en un entorno distribuido. Los archivos jar distribuidos por --jars en las versiones 1.3 y anteriores se cargan en el lado del ejecutor a través del cargador de clases especializado de Spark. El administrador de controladores JDBC utiliza el cargador de clases predeterminado del sistema, por lo que no se puede reconocer. Un método posible es preinstalar el controlador JDBC en todos los nodos ejecutores y colocarlo en la ruta de clases predeterminada.

Sin embargo, Spark 1.4 debería haber solucionado este problema, es decir, los archivos jar distribuidos por --jars también se incluirán en la categoría del cargador de clases de YARN.

Hoy usé DataFrame en Spark para insertar RDD en Mysql, pero se siguió informando la siguiente información de excepción:

01

[itelbog@iteblog~] $ ? bin/spark-submit --master local[2]

02

--jars lib/mysql-connector-java-5.1.35.jar

03

--class? spark.sparkToJDBC ./spark-test_2.10-1.0.jar

04

05

El ensamblaje Spark se ha creado con Hive, incluidos los archivos jar de Datanucleus en classpath

06

Excepción en el hilo "principal" java.sql.SQLException: no se encontró ningún controlador adecuado para

07

jdbc:mysql://www.iteblog.com:3306/spark?user=rootamp;password=123amp;useUnicode=

08

trueamp; caracterEncoding=utf8amp; autoReconnect=true

09

en java.sql.DriverManager.getConnection(DriverManager.java: 602)

10

en java.sql.DriverManager.getConnection(DriverManager.java:207)

11

en org.apache.spark.sql.DataFrame.createJDBCTable(DataFrame . scala: 1189)

12

en spark.SparkToJDBC$.toMysqlFromJavaBean(SparkToJDBC.scala: 20)

13

en spark .SparkToJDBC$.main(SparkToJDBC.scala: 47)

14

en spark.SparkToJDBC.main(SparkToJDBC.scala)

15

en sun.reflect.NativeMethodAccessorImpl.invoke0(Método nativo)

16

en sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

17

en sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

18

en ja

va.lang.reflect.Method.invoke(Method.java:597)

19

en org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy $SparkSubmit$

20

$runMain(SparkSubmit.scala:569)

21

en org.apache.spark.deploy .SparkSubmit$.doRunMain$1(SparkSubmit.scala:166)

22

en org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:189) p>

23

en org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110)

24

en org .apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Se siente muy extraño. Agregué el controlador Mysql al iniciar el trabajo. ¿Cómo pudo ocurrir esta excepción? Agregar Mysql al parámetro --jars es inútil. Después de buscar, descubrí que el trabajo enviado puede configurar la ruta de clases del controlador agregando el parámetro --driver-class-path. Después de intentarlo, ¡no se produjeron errores!

1

[itelbog@iteblog ~]$? bin/spark-submit --master local[2]

2

--driver-class-path lib/mysql-connector-java-5.1.35.jar

3

--class spark.SparkToJDBC ./spark-test_2.10- 1.0.jar

De hecho, también podemos configurar la variable de entorno del controlador configurando SPARK_CLASSPATH en conf/spark-env.sh del paquete de instalación de Spark, de la siguiente manera:

(Nota Aquí lo interesante es que en la versión Spark 1.3, al configurar Spark de la siguiente manera, al ejecutar el programa, se le indicará que este método de configuración está obsoleto en las versiones posteriores a Spark 1.0. Se recomienda utilizar los otros dos métodos. ; uno de ellos es el mencionado anteriormente. La otra forma es configurar spark.executor.extraClassPath en el archivo de configuración. El formato de configuración específico se agregará después de la prueba)

1

<. p>exportar SPARK_CLASSPATH=$SPARK_CLASSPATH:/ iteblog/com/mysql-connector-java-5.1.35.jar

Esto también puede resolver la excepción anterior.

Sin embargo, no podemos configurar SPARK_CLASSPATH y enviar el trabajo con el parámetro --driver-class-path en conf/spark-env.sh al mismo tiempo; de lo contrario, se producirá la siguiente excepción:

Ver código fuente imprimir ayuda

p>

01

[itelbog@iteblog~]$? bin/spark-submit --master local[2]

02

-- driver-class-path lib/mysql-connector-java-5.1.35.jar

03

--class spark.SparkToJDBC ./spark- test_2.10-1.0.jar

04

05

El ensamblaje Spark se ha creado con Hive, incluidos los jar de Datanucleus en classpath

06

Excepción en el hilo "main"org.apache.spark.SparkException:

07

Se encontraron tanto spark.driver.extraClassPath como SPARK_CLASSPATH. anterior.

08

en org.apache.spark.SparkConf$$anonfun$validateSettings$6$$anonfun$apply

09

$7.apply(SparkConf .scala: 339)

10

en org.apache.spark.SparkConf$$anonfun$validateSettings$6$$anonfun$apply

11

$7.apply(SparkConf.scala:337)

12

en scala.collection.immutable.List.foreach(List.scala: 318)

13

en org.apache.spark.SparkConf$$anonfun$validateSettings$6.apply(SparkConf.scala: 337)

14

en org.apache.spark.SparkConf$$anonfun$validateSettings$6.apply(SparkConf.scala:325)

15

en scala.Option.foreach( Option.scala:236)

16

en org.apache.spark.SparkConf.validateSettings(SparkConf.scala:325)

17

en org.apache.spark.SparkContext.lt;initgt;(SparkContext.scala:197)

18

en spark.SparkToJDBC$.main(SparkToJDBC.scala:41)

19

en spark.SparkToJDBC.main(SparkToJDBC.scala)

20 p>

en sun.reflect.NativeMethodAccessorImpl.invoke0(Método nativo)

21

en sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

22

en sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

23

en java.lang.reflect .Method .invoke(Method.java:597)

24

en org.apache.spark.deploy.SparkSubmit$.org$apache$spark$

25

implementar$SparkSubmit$$runMain(SparkSubmit.scala:569)

26

en org.apache.spark.deploy.SparkSubmit$.doRunMain $1( SparkSubmit.scala:166)

27

en org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:189)

28

en org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110)

29

en org.apache.spark. implementar.SparkSubmit.main(SparkSubmit.scala)