簡體   English   中英

如何將 Spark 連接到 Zeppelin 中的 JDBC 驅動程序?

[英]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

這是我解決這個問題的方法:

  1. scp driver jar 到集群驅動節點

  2. 轉到 Zeppelin 解釋器並滾動到 Spark 部分,然后單擊編輯。

  3. 在 artifacts 下寫入 jar 的完整路徑,例如/home/Hadoop/mssql-jdbc.jar ,僅此而已。

  4. 點擊保存。

那你應該好好的!

您可以通過 Interpreter 設置中的 Web UI 添加它,如下所示:

  • 單擊菜單中的解釋器

  • 單擊 Spark 解釋器中的“編輯”按鈕

  • 在工件字段中添加 jar 的路徑

  • 然后只需保存並重新啟動解釋器。

與 Tomas 類似,您可以在解釋器中使用 maven 添加驅動程序(或任何庫):

  • 單擊菜單中的解釋器
  • 單擊 Spark 解釋器中的“編輯”按鈕
  • 在工件字段中添加 jar 的路徑
  • 添加 groupId:artifactId:version

例如,在您的情況下,您可以在工件字段中使用com.microsoft.sqlserver:mssql-jdbc:jar:8.4.1.jre8

當您重新啟動解釋器時,它會為您下載並添加依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM