apache-spark - 如何在 Cloudera 集群上分发 JDBC jar?
问题描述
我刚刚在我的CDH 集群(28 个节点)上安装了来自 CSD的新Spark 2.4 ,并且正在尝试安装JDBC驱动程序,以便从 Jupyter 笔记本中的数据库中读取数据。我在一个节点上将其下载并复制到 /jars 文件夹,但似乎我必须在每台主机上都执行相同的操作(!)。否则,我会从一名工人那里得到以下错误:
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
有没有简单的方法(不编写 bash 脚本)在整个集群上分发带有包的 jar 文件?我希望 Spark 可以自己分发它(或者它可以分发,但我不知道该怎么做)。
解决方案
Spark 有一个可以使用的 jdbc 格式阅读器。
启动 scala shell 以确认您的 MS SQL Server 驱动程序在您的类路径中
例子
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
如果未显示驱动程序类,请确保将 jar 放在边缘节点上并将其包含在初始化会话的类路径中
例子
bin/spark-shell --driver-class-path postgresql-9.4.1207.jar --jars postgresql-9.4.1207.jar
通过 Spark jdbc 连接到您的 MS SQL Server
通过火花 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 ...如果您仍然无法使上述内容正常工作,请尝试通过这篇文章设置一些环境变量(虽然无法确认这是否有效)
归根结底,您真正需要的是放置在边缘节点(启动 spark 的客户端)上的驱动程序类并将其附加到您的类路径,然后建立连接并并行化您的数据帧以扩展性能,因为来自 rdbms 的 jdbc 读取数据为单线程因此 1 个分区
推荐阅读
- javascript - 如何禁用角度 6 中的特定动态复选框?
- package.json - 如何使用 package.json 文件的脚本属性在项目内部运行实时服务器
- python - 根据 R 平方值创建数据框
- javascript - 如何避免检查对象中的对象是否存在于数据Vue.js中?
- php - 数据目标数据切换不适用于 vscode
- sql - 如何优化 SQL SELECT 查询以生成用户的新闻源?
- java - 在创建新的 java maven 项目时出现错误“在当前项目和插件组中找不到前缀‘原型’的插件”
- postgresql - 可以从表中选择但不能更新它(尝试更新时获取“关系 [表名] 不存在”
- node.js - node log4j 控制台没有输出
- python - 如何使用熊猫在一列中获取数据并放入列表中?