2021年大数据Spark(三十三):SparkSQL分布式SQL引擎

举报
Lansonli 发表于 2021/09/28 23:27:48 2021/09/28
【摘要】 目录 分布式SQL引擎 Hive的SQL交互方式 ThriftServer JDBC/ODBC Server 开启sparksql的thriftserver 使用beeline 客户端连接 JDBC/ODBC 客户端 分布式SQL引擎 Hive的SQL交互方式 回顾一下,如何使用Hive进行数据分析的,提供...

目录

分布式SQL引擎

Hive的SQL交互方式

ThriftServer JDBC/ODBC Server

开启sparksql的thriftserver

使用beeline 客户端连接

JDBC/ODBC 客户端


分布式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上执行


  
  1. /export/server/spark/sbin/start-thriftserver.sh \
  2. --hiveconf hive.server2.thrift.port=10000 \
  3. --hiveconf hive.server2.thrift.bind.host=node1 \
  4. --master local[2]

停止使用:在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。

/export/server/spark/sbin/stop-thriftserver.sh

 

使用beeline 客户端连接

使用SparkSQL的beeline客户端命令行连接ThriftServer,启动命令如下:


  
  1. /export/server/spark/bin/beeline
  2. !connect jdbc:hive2://node1:10000
  3. root
  4. 123456

show database;编写SQL语句执行分析:

show tables;

select * from person;

监控WEB UI界面:

http://node1:4040/jobs/

 

JDBC/ODBC 客户端

参考文档:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC

 

SparkSQL中提供类似JDBC/ODBC方式,连接Spark ThriftServer服务,执行SQL语句,首先添加Maven依赖库:


  
  1. <dependency>
  2.             <groupId>org.apache.spark</groupId>
  3.             <artifactId>spark-hive-thriftserver_2.11</artifactId>
  4.             <version>${spark.version}</version>
  5. </dependency>

范例演示:采用JDBC方式读取Hive中db_hive.emp表的数据。


  
  1. package cn.itcast.sql
  2. import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}
  3. /**
  4.   * SparkSQL 启动ThriftServer服务,通过JDBC方式访问数据分析查询
  5.   */
  6. object SparkThriftJDBC {
  7.     def main(args: Array[String]): Unit = {
  8.         // 定义相关实例对象,未进行初始化
  9.         var conn: Connection = null
  10.         var ps: PreparedStatement = null
  11.         var rs: ResultSet = null
  12.         try {
  13.             // TODO: a. 加载驱动类
  14.             Class.forName("org.apache.hive.jdbc.HiveDriver")
  15.             // TODO: b. 获取连接Connection
  16.             conn = DriverManager.getConnection(
  17.                 "jdbc:hive2://node1:10000/default",
  18.                 "root",
  19.                 "123456"
  20.             )
  21.             // TODO: c. 构建查询语句
  22.             val sqlStr: String =
  23.                 """
  24.                   |select * from person
  25.                 """.stripMargin
  26.             ps = conn.prepareStatement(sqlStr)
  27.             // TODO: d. 执行查询,获取结果
  28.             rs = ps.executeQuery()
  29.             // 打印查询结果
  30.             while (rs.next()) {
  31.                 println(s"id = ${rs.getInt(1)}, name = ${rs.getString(2)}, age = ${rs.getInt(3)}}")
  32.             }
  33.         } catch {
  34.             case e: Exception => e.printStackTrace()
  35.         } finally {
  36.             if (null != rs) rs.close()
  37.             if (null != ps) ps.close()
  38.             if (null != conn) conn.close()
  39.         }
  40.     }
  41. }

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/115920791

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。