如何在 Cloudera 集群上分发 JDBC jar?
How to distribute JDBC jar on Cloudera cluster?
我刚刚在我的 CDH 集群(28 个节点)上安装了来自 CSD 的新 Spark 2.4,我正在尝试安装 JDBC 驱动程序,以便从 Jupyter notebook 中的数据库读取数据。
我将它下载并复制到一个节点上的 /jars 文件夹中,但似乎我必须在每台主机上都执行相同的操作 (!)。否则我会从其中一名工人那里收到以下错误:
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
有没有简单的方法(无需编写 bash 脚本)在整个集群上分发带有包的 jar 文件?我希望 Spark 可以自行分发它(或者它可以分发但我不知道该怎么做)。
Spark 具有 jdbc 格式 reader 您可以使用。
启动 scala shell 以确认您的 MS SQL 服务器驱动程序在您的 class 路径
中
例子
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
如果驱动程序 class 未显示,请确保将 jar 放在边缘节点上并将其包含在初始化会话的 class 路径中
例子
bin/spark-shell --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar
通过 Spark jdbc
连接到您的 MS SQL 服务器
示例来自 spark python
# option1
jdbcDF = spark.read \
.format("jdbc") \
.option("url", "jdbc:postgresql:dbserver") \
.option("dbtable", "schema.tablename") \
.option("user", "username") \
.option("password", "password") \
.load()
# option2
jdbcDF2 = spark.read \
.jdbc("jdbc:postgresql:dbserver", "schema.tablename",
properties={"user": "username", "password": "password"})
可以在此处找到编译连接字符串的细节和其他方法
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
你提到了 jupyter ...如果你仍然不能让上面的方法工作,请尝试通过这个设置一些环境变量 post(虽然无法确认这是否有效)
在一天结束时,您真正需要的是将驱动程序 class 放置在边缘节点(您启动 spark 的客户端)并将其附加到您的 class path 然后建立连接并并行化数据帧以扩展性能,因为来自 rdbms 的 jdbc 将数据读取为单线程,因此 1 个分区
我刚刚在我的 CDH 集群(28 个节点)上安装了来自 CSD 的新 Spark 2.4,我正在尝试安装 JDBC 驱动程序,以便从 Jupyter notebook 中的数据库读取数据。 我将它下载并复制到一个节点上的 /jars 文件夹中,但似乎我必须在每台主机上都执行相同的操作 (!)。否则我会从其中一名工人那里收到以下错误:
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
有没有简单的方法(无需编写 bash 脚本)在整个集群上分发带有包的 jar 文件?我希望 Spark 可以自行分发它(或者它可以分发但我不知道该怎么做)。
Spark 具有 jdbc 格式 reader 您可以使用。
启动 scala shell 以确认您的 MS SQL 服务器驱动程序在您的 class 路径
中例子
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
如果驱动程序 class 未显示,请确保将 jar 放在边缘节点上并将其包含在初始化会话的 class 路径中
例子
bin/spark-shell --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar
通过 Spark jdbc
连接到您的 MS SQL 服务器示例来自 spark python
# option1
jdbcDF = spark.read \
.format("jdbc") \
.option("url", "jdbc:postgresql:dbserver") \
.option("dbtable", "schema.tablename") \
.option("user", "username") \
.option("password", "password") \
.load()
# option2
jdbcDF2 = spark.read \
.jdbc("jdbc:postgresql:dbserver", "schema.tablename",
properties={"user": "username", "password": "password"})
可以在此处找到编译连接字符串的细节和其他方法
https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
你提到了 jupyter ...如果你仍然不能让上面的方法工作,请尝试通过这个设置一些环境变量 post(虽然无法确认这是否有效)
在一天结束时,您真正需要的是将驱动程序 class 放置在边缘节点(您启动 spark 的客户端)并将其附加到您的 class path 然后建立连接并并行化数据帧以扩展性能,因为来自 rdbms 的 jdbc 将数据读取为单线程,因此 1 个分区