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

举报
Lansonli 发表于 2021/09/28 23:27:48 2021/09/28
2.4k+ 0 0
【摘要】 目录 分布式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上执行


      /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界面:

http://node1:4040/jobs/

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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