2021年大数据Spark(三十三):SparkSQL分布式SQL引擎
目录
分布式SQL引擎
Hive的SQL交互方式
回顾一下,如何使用Hive进行数据分析的,提供哪些方式交互分析???
方式一:交互式命令行(CLI)
- bin/hive,编写SQL语句及DDL语句
方式二:启动服务HiveServer2(Hive ThriftServer2)
- 将Hive当做一个服务启动(类似MySQL数据库,启动一个服务),端口为10000
- 1) 交互式命令行,bin/beeline,CDH 版本HIVE建议使用此种方式,CLI方式过时
- 2)JDBC/ODBC方式,类似MySQL中JDBC/ODBC方式
SparkSQL模块从Hive框架衍生发展而来,所以Hive提供的所有功能(数据分析交互式方式)都支持,文档:http://spark.apache.org/docs/2.4.5/sql-distributed-sql-engine.html。
ThriftServer JDBC/ODBC Server
开启sparksql的thriftserver
Spark Thrift Server将Spark Applicaiton当做一个服务运行,提供Beeline客户端和JDBC方式访问,与Hive中HiveServer2服务一样的。
在企业中使用PySpark和SQL分析数据,尤其针对数据分析行业。
在$SPARK_HOME目录下的sbin目录,有相关的服务启动命令:
node1上执行
-
-
/export/server/spark/sbin/start-thriftserver.sh \
-
-
--hiveconf hive.server2.thrift.port=10000 \
-
-
--hiveconf hive.server2.thrift.bind.host=node1 \
-
-
--master local[2]
停止使用:在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。
/export/server/spark/sbin/stop-thriftserver.sh
使用beeline 客户端连接
使用SparkSQL的beeline客户端命令行连接ThriftServer,启动命令如下:
-
-
/export/server/spark/bin/beeline
-
-
!connect jdbc:hive2://node1:10000
-
-
root
-
-
123456
show database;编写SQL语句执行分析:
show tables;
select * from person;
监控WEB UI界面:
JDBC/ODBC 客户端
参考文档:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC
SparkSQL中提供类似JDBC/ODBC方式,连接Spark ThriftServer服务,执行SQL语句,首先添加Maven依赖库:
-
-
<dependency>
-
-
<groupId>org.apache.spark</groupId>
-
-
<artifactId>spark-hive-thriftserver_2.11</artifactId>
-
-
<version>${spark.version}</version>
-
-
</dependency>
范例演示:采用JDBC方式读取Hive中db_hive.emp表的数据。
-
-
package cn.itcast.sql
-
-
import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}
-
-
/**
-
* SparkSQL 启动ThriftServer服务,通过JDBC方式访问数据分析查询
-
*/
-
object SparkThriftJDBC {
-
def main(args: Array[String]): Unit = {
-
// 定义相关实例对象,未进行初始化
-
var conn: Connection = null
-
var ps: PreparedStatement = null
-
var rs: ResultSet = null
-
-
try {
-
// TODO: a. 加载驱动类
-
Class.forName("org.apache.hive.jdbc.HiveDriver")
-
// TODO: b. 获取连接Connection
-
conn = DriverManager.getConnection(
-
"jdbc:hive2://node1:10000/default",
-
"root",
-
"123456"
-
)
-
// TODO: c. 构建查询语句
-
val sqlStr: String =
-
"""
-
|select * from person
-
""".stripMargin
-
ps = conn.prepareStatement(sqlStr)
-
// TODO: d. 执行查询,获取结果
-
rs = ps.executeQuery()
-
// 打印查询结果
-
while (rs.next()) {
-
println(s"id = ${rs.getInt(1)}, name = ${rs.getString(2)}, age = ${rs.getInt(3)}}")
-
}
-
} catch {
-
case e: Exception => e.printStackTrace()
-
} finally {
-
if (null != rs) rs.close()
-
if (null != ps) ps.close()
-
if (null != conn) conn.close()
-
}
-
}
-
}
文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。
原文链接:lansonli.blog.csdn.net/article/details/115920791
- 点赞
- 收藏
- 关注作者
评论(0)