![](/img/trans.png)
[英]Dataproc: how do I configure Spark driver and executor log4j properties?
[英]How do I connect Spark to JDBC driver in Zeppelin?
我正在嘗試使用 Zeppelin 筆記本中的 Spark 將數據從 SQL 服務器提取到 Hive 表。
我正在嘗試運行以下代碼:
%pyspark
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.dataframe import DataFrame
from pyspark.sql.functions import *
spark = SparkSession.builder \
.appName('sample') \
.getOrCreate()
#set url, table, etc.
df = spark.read.format('jdbc') \
.option('url', url) \
.option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver') \
.option('dbtable', table) \
.option('user', user) \
.option('password', password) \
.load()
但是,我不斷收到異常:
...
Py4JJavaError: An error occurred while calling o81.load.
: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
...
我一整天都在試圖解決這個問題,我相信我嘗試設置驅動程序的方式有問題。 我在實例上的/tmp/sqljdbc42.jar
下有一個驅動程序。 你能解釋一下我如何讓 Spark 知道這個驅動程序在哪里嗎? 我通過 shell 和解釋器編輯器嘗試了許多不同的方法。
謝謝!
編輯
我還應該注意,我使用 Zeppelin 的 shell (%sh) 將 jar 加載到我的實例
curl -o /tmp/sqljdbc42.jar http://central.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
pyspark --driver-class-path /tmp/sqljdbc42.jar --jars /tmp/sqljdbc42.jar
這是我解決這個問題的方法:
scp
driver jar 到集群驅動節點
轉到 Zeppelin 解釋器並滾動到 Spark 部分,然后單擊編輯。
在 artifacts 下寫入 jar 的完整路徑,例如/home/Hadoop/mssql-jdbc.jar
,僅此而已。
點擊保存。
那你應該好好的!
您可以通過 Interpreter 設置中的 Web UI 添加它,如下所示:
單擊菜單中的解釋器
單擊 Spark 解釋器中的“編輯”按鈕
在工件字段中添加 jar 的路徑
然后只需保存並重新啟動解釋器。
與 Tomas 類似,您可以在解釋器中使用 maven 添加驅動程序(或任何庫):
例如,在您的情況下,您可以在工件字段中使用com.microsoft.sqlserver:mssql-jdbc:jar:8.4.1.jre8
。
當您重新啟動解釋器時,它會為您下載並添加依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.