使用 JDBC(例如 Squirrel SQL)用 Spark SQL 查询 Cassandra
Posted
技术标签:
【中文标题】使用 JDBC(例如 Squirrel SQL)用 Spark SQL 查询 Cassandra【英文标题】:Use JDBC (eg Squirrel SQL) to query Cassandra with Spark SQL 【发布时间】:2015-12-10 12:33:44 【问题描述】:我有一个 Cassandra 集群和一个位于同一位置的 Spark 集群,我可以通过编译、复制它们并使用 ./spark-submit 脚本来运行常用的 Spark 作业。我写了一个接受 SQL 作为命令行参数的小作业,将其作为 Spark SQL 提交给 Spark,Spark 针对 Cassandra 运行该 SQL 并将输出写入 csv 文件。
现在我觉得我在兜圈子,试图弄清楚是否可以直接在 JDBC 连接中通过 Spark SQL 查询 Cassandra(例如从 Squirrel SQL)。 Spark SQL 文档说
Connect through JDBC or ODBC.
A server mode provides industry standard JDBC and ODBC connectivity for
business intelligence tools.
Spark SQL 编程指南说
Spark SQL can also act as a distributed query engine using its JDBC/ODBC or
command-line interface. In this mode, end-users or applications can interact
with Spark SQL directly to run SQL queries, without the need to write any
code.
这样我就可以运行 Thrift Server,并向其提交 SQL。但我想不通的是,如何让 Thrift Server 连接到 Cassandra?我是否只是在 Thrift Server 类路径上弹出 Datastax Cassandra 连接器?如何告诉 Thrift 服务器我的 Cassandra 集群的 IP 和端口?有没有人已经这样做了,可以给我一些指导吗?
【问题讨论】:
【参考方案1】:在 spark-default.conf 文件中配置这些属性
spark.cassandra.connection.host 192.168.1.17,192.168.1.19,192.168.1.21
# if you configured security in you cassandra cluster
spark.cassandra.auth.username smb
spark.cassandra.auth.password bigdata@123
使用 spark-cassandra-connector 依赖项和 mysql-connector 依赖项启动您的 thrift 服务器,并使用您将通过 JDBC 或 Squirrel 连接的某个端口。
sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.bind.host 192.168.1.17 --hiveconf hive.server2.thrift.port 10003 --jars <shade-jar>-0.0.1.jar --driver-class-path <shade-jar>-0.0.1.jar
要获取 cassandra 表,请运行 Spark-SQL 查询,例如
CREATE TEMPORARY TABLE mytable USING org.apache.spark.sql.cassandra OPTIONS (cluster 'BDI Cassandra', keyspace 'testks', table 'testtable');
【讨论】:
“USING”可能是我无法弄清楚的缺失链接 - 我会试一试,看看它是否有效! 打开 Thrift 服务器后,我可以使用 JDBC UI(例如 Squirrel SQL)直接连接到它吗?我是否需要在我的 JDBC UI 类路径上使用特定的客户端 jar 才能连接到 thrift 服务器? spark/bin/beeline -u jdbc:hive2://192.168.1.14:10000 抱歉,我在 12 月的大部分时间都在旅行,所以才有机会尝试一下。直线连接完美!添加 jars 很烦人,因为有许多依赖项(cassandra-connector、guava、cassandra-core 等),所以我用 maven 创建了一个大的阴影包,瞧! 现在看看我是否可以从 Squirrel SQL 连接到它 :)【参考方案2】:为什么不使用 spark-cassandra-connector 和 cassandra-driver-core?只需添加依赖项,在 Spark 上下文中指定主机地址/登录名,然后您就可以使用 sql 读取/写入 cassandra。
【讨论】:
我已经在作业 jar 中完成了这项工作,但我仍然需要使用 spark-submit 脚本将我的 SQL 作业提交到 spark 上,这需要命令行访问。是否可以直接从 PC 运行 SQL,连接到 Spark/Cassandra?以上是关于使用 JDBC(例如 Squirrel SQL)用 Spark SQL 查询 Cassandra的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java JDBC squirrel-sql 驱动程序连接到 Netezza 失败
Apache Drill 0.9 和 SQuirreL SQL 客户端 - 无法列出 JDBC 驱动程序
使用 SQuirrel SQL 连接到 SQL Server