Pyspark:java.lang.ClassNotFoundException:未能找到数据源:com.microsoft.sqlserver.jdbc.spark(SQL数据池)
我正在尝试将Kafka的流式数据加载到SQL Server大数据集群数据池中。我使用的是Spark 2.4.5(Bitnami 2.4.5 Spark图像) 如果我想将数据加载到常规表中,我会使用下面这句话,而且效果很好:Pyspark:java.lang.ClassNotFoundException:未能找到数据源:com.microsoft.sqlserver.jdbc.spark(SQL数据池),pyspark,apache-spark-sql,spark-streaming,mssql-jdbc,Pyspark,Apache Spark Sql,Spark Streaming,Mssql Jdbc,我正在尝试将Kafka的流式数据加载到SQL Server大数据集群数据池中。我使用的是Spark 2.4.5(Bitnami 2.4.5 Spark图像) 如果我想将数据加载到常规表中,我会使用下面这句话,而且效果很好: logs_df.write.format('jdbc').mode('append').option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver').option \ ('url', 'jdb
logs_df.write.format('jdbc').mode('append').option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver').option \
('url', 'jdbc:sqlserver://XXX.XXX.XXX.XXXX:31433;databaseName=sales;').option('user', user).option \
('password', password).option('dbtable', 'SYSLOG_TEST_TABLE').save()
但将数据加载到SQL数据池的同一句话给了我以下错误:
py4j.protocol.Py4JJavaError: An error occurred while calling o93.save.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 3, localhost, executor driver): java.sql.BatchUpdateException: External Data Pool Table DML statement cannot be used inside a user transaction.
py4j.protocol.Py4JJavaError: An error occurred while calling o93.save.
: java.lang.ClassNotFoundException: Failed to find data source: com.microsoft.sqlserver.jdbc.spark. Please find packages at http://spark.apache.org/third-party-projects.html
我发现将数据加载到SQL数据池的方法是使用“com.microsoft.sqlserver.jdbc.spark”格式,如下所示:
logs_df.write.format('com.microsoft.sqlserver.jdbc.spark').mode('append').option('url', url).option('dbtable', datapool_table).option('user', user).option('password', password).option('dataPoolDataSource',datasource_name).save()
但这给了我一个错误:
py4j.protocol.Py4JJavaError: An error occurred while calling o93.save.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 3, localhost, executor driver): java.sql.BatchUpdateException: External Data Pool Table DML statement cannot be used inside a user transaction.
py4j.protocol.Py4JJavaError: An error occurred while calling o93.save.
: java.lang.ClassNotFoundException: Failed to find data source: com.microsoft.sqlserver.jdbc.spark. Please find packages at http://spark.apache.org/third-party-projects.html
我使用spark submit运行脚本,如下所示:
docker exec spark245_spark_1 /opt/bitnami/spark/bin/spark-submit --driver-class-path /opt/bitnami/spark/jars/mssql-jdbc-8.2.2.jre8.jar --jars /opt/bitnami/spark/jars/mssql-jdbc-8.2.2.jre8.jar --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.5 /storage/scripts/some_script.py
有没有其他包我应该包括或一些特殊的进口我失踪
提前谢谢
编辑:我在scala中尝试了同样的结果,根据文档:“要在项目中包含连接器,请下载此存储库并使用SBT构建jar。” 因此,您需要使用存储库中的
build.sbt
构建连接器JAR文件,然后将JAR文件放入spark:your\u path\spark\jars
为此,请在此处下载SBT:。在保存
build.SBT
的目录中打开SBT,然后运行SBT包
。应在同一目录中创建target
文件夹,JAR文件位于target\scala-2.11
您需要首先使用SBT将存储库构建到JAR文件中。然后将其包含到您的spark cluster中
我知道会有很多人在构建这个jar文件时遇到困难(包括几个小时前的我),因此我将逐步指导您如何构建jar文件: