首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
2021年大数据Spark(一):框架概述
2
2021年大数据Spark(二):四大特点
3
2021年大数据Spark(三):框架模块初步了解
4
2021年大数据Spark(四):三种常见的运行模式
5
2021年大数据Spark(五):大环境搭建本地模式 Local
6
2021年大数据Spark(六):环境搭建集群模式 Standalone
7
2021年大数据Spark(七):应用架构基本了解
8
2021年大数据Spark(八):环境搭建集群模式 Standalone HA
9
2021年大数据Spark(九):Spark On Yarn两种模式总结
10
2021年大数据Spark(十):环境搭建集群模式 Spark on YARN
11
2021年大数据Spark(十一):应用开发基于IDEA集成环境
12
2021年大数据Spark(十二):Spark Core的RDD详解
13
2021年大数据Spark(十三):Spark Core的RDD创建
14
2021年大数据Spark(十四):Spark Core的RDD操作
15
2021年大数据Spark(十五):Spark Core的RDD常用算子
16
2021年大数据Spark(十六):Spark Core的RDD算子练习
17
2021年大数据Spark(十七):Spark Core的RDD持久化
18
2021年大数据Spark(十八):Spark Core的RDD Checkpoint
19
2021年大数据Spark(十九):Spark Core的​​​​​​​共享变量
20
2021年大数据Spark(二十):Spark Core外部数据源引入
21
2021年大数据Spark(二十一):Spark Core案例-SogouQ日志分析
22
2021年大数据Spark(二十二):内核原理
23
2021年大数据Spark(二十三):SparkSQL 概述
24
2021年大数据Spark(二十四):SparkSQL数据抽象
25
2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作
26
2021年大数据Spark(二十六):SparkSQL数据处理分析
27
2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
28
2021年大数据Spark(二十八):SparkSQL案例三电影评分数据分析
29
2021年大数据Spark(二十九):SparkSQL案例四开窗函数
30
2021年大数据Spark(三十):SparkSQL自定义UDF函数
31
2021年大数据Spark(三十一):Spark On Hive
32
2021年大数据Spark(三十二):SparkSQL的External DataSource
33
2021年大数据Spark(三十三):SparkSQL分布式SQL引擎
34
2021年大数据Spark(三十四):Spark Streaming概述
35
2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream
36
2021年大数据Spark(三十六):SparkStreaming实战案例一 WordCount
37
2021年大数据Spark(三十七):SparkStreaming实战案例二 UpdateStateByKey
38
2021年大数据Spark(三十八):SparkStreaming实战案例三 状态恢复 扩展
39
2021年大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
40
2021年大数据Spark(四十):SparkStreaming实战案例五 TopN-transform
41
2021年大数据Spark(四十一):SparkStreaming实战案例六 自定义输出 foreachRDD
42
2021年大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
43
2021年大数据Spark(四十三):SparkStreaming整合Kafka 0.10 开发使用
44
2021年大数据Spark(四十四):Structured Streaming概述
45
2021年大数据Spark(四十五):Structured Streaming Sources 输入源
46
2021年大数据Spark(四十六):Structured Streaming Operations 操作
47
2021年大数据Spark(四十七):Structured Streaming Sink 输出
48
2021年大数据Spark(四十八):Structured Streaming 输出终端/位置
49
2021年大数据Spark(四十九):Structured Streaming 整合 Kafka
50
2021年大数据Spark(五十):Structured Streaming 案例一实时数据ETL架构

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上执行

代码语言:javascript
复制
/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,启动命令如下:

代码语言:javascript
复制
/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依赖库:

代码语言:javascript
复制
<dependency>

            <groupId>org.apache.spark</groupId>

            <artifactId>spark-hive-thriftserver_2.11</artifactId>

            <version>${spark.version}</version>

</dependency>

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

代码语言:javascript
复制
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()
        }
    }
}
下一篇
举报
领券