【发布时间】:2017-01-05 16:01:01
【问题描述】:
我正在使用 Spark 1.6.2、Hadoop 2.6、Scala 2.10.5 和 Java 1.7
我正在使用 JDBC 从 MSSQL 读取数据,这没有任何问题:
val hqlContext = new HiveContext(sc)
val url = "jdbc:sqlserver://1.1.1.1:1111;database=CIQOwnershipProcessing;user=OwnershipUser;password=Ownership123"
val driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
val df1 = hqlContext.read.format("jdbc").options(
Map("url" -> url, "driver" -> driver,
"dbtable" -> "(select * from OwnershipStandardization_PositionSequence_tbl) as ps")).load()
并且,在将数据帧回写到 MSSQL 时,我正在使用 JDBC 写入,如下所示。这在 Spark-shell 中工作正常,但当我在 Yarn-Cluster 模式下执行 spark-submit 时失败。我错过了什么?
val prop = new java.util.Properties
df1.write.mode("Overwrite").jdbc(url, "CIQOwnershipProcessing.dbo.df_sparkop",prop)
这就是我的 spark-submit 命令的样子。如您所见,我也传递了 SQLJDBC jar 路径。而且,我还在集群的所有节点上的 spark-defaults.conf 中的“spark.executor.extraClassPath”属性中指定了 jdbc jar 路径。由于 JDBC 读取工作正常,我怀疑它是否与类路径有关。
spark-submit --class com.spgmi.csd.OshpStdCarryOver --master yarn --deploy-mode cluster --conf spark.yarn.executor.memoryOverhead=2048 --num-executors 1 --executor-cores 2 --driver-memory 3g --executor-memory 8g --jars $SPARK_HOME/lib/datanucleus-api-jdo-3.2.6.jar,$SPARK_HOME/lib/datanucleus-core-3.2.10.jar,$SPARK_HOME/lib/datanucleus-rdbms-3.2.9.jar,/usr/share/java/sqljdbc_4.1/enu/sqljdbc41.jar --files $SPARK_HOME/conf/hive-site.xml $SPARK_HOME/lib/spark-poc2-17.1.0.jar
Yarn-Cluster模式抛出的错误是:
17/01/05 10:21:31 错误 yarn.ApplicationMaster: 用户类抛出 异常:java.lang.InstantiationException: org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper java.lang.InstantiationException: org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper 在 java.lang.Class.newInstance(Class.java:368) 在 org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:46) 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$2.apply(JdbcUtils.scala:53) 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$2.apply(JdbcUtils.scala:52) 在 org.apache.spark.sql.DataFrameWriter.jdbc(DataFrameWriter.scala:278) 在 com.spgmi.csd.OshpStdCarryOver$.main(SparkOshpStdCarryOver.scala:175) 在 com.spgmi.csd.OshpStdCarryOver.main(SparkOshpStdCarryOver.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:558)
【问题讨论】:
标签: sql-server scala hadoop apache-spark jdbc