【Spark分布式内存计算框架——Spark SQL】14. 分布式SQL引擎

第八章 分布式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。

8.1 Spark SQL CLI

SparkSQL提供spark-sql命令,类似Hive中bin/hive命令,专门编写SQL分析,启动命令如下:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-sql --master local[2] --conf spark.sql.shuffle.partitions=4 

编写SQL执行,截图如下:
在这里插入图片描述
此种方式,目前企业使用较少,主要使用下面所述ThriftServer服务,通过Beeline连接执行SQL。

8.2 ThriftServer JDBC/ODBC Server

Spark Thrift Server将Spark Applicaiton当做一个服务运行,提供Beeline客户端和JDBC方式访问,与Hive中HiveServer2服务一样的。此种方式必须掌握:在企业中使用PySpark和SQL分析数据,尤其针对数据分析行业。
在这里插入图片描述
Spark Thrift JDBC/ODBC server 依赖于HiveServer2服务(依赖JAR包),所有要想使用此功能,在编译Spark源码时,支持Hive Thrift。
在这里插入图片描述
注意:启动Spark Thrift JDBC/ODBC Server时,不需要HiveServer2服务。
在$SPARK_HOME目录下的sbin目录,有相关的服务启动命令:

SPARK_HOME=/export/server/spark
$SPARK_HOME/sbin/start-thriftserver.sh \
--hiveconf hive.server2.thrift.port=10000 \
--hiveconf hive.server2.thrift.bind.host=node1.itcast.cn \
--master local[2]

监控WEB UI界面:
在这里插入图片描述
beeline 客户端
SparkSQL类似Hive提供beeline客户端命令行连接ThriftServer,启动命令如下:

/export/server/spark/bin/beeline
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://node1.itcast.cn:10000
Connecting to jdbc:hive2://node1.itcast.cn:10000
Enter username for jdbc:hive2://node1.itcast.cn:10000: root
Enter password for jdbc:hive2://node1.itcast.cn:10000: ****

编写SQL语句执行分析:
在这里插入图片描述
在实际大数据分析项目中,使用SparkSQL时,往往启动一个ThriftServer服务,分配较多资源(Executor数目和内存、CPU),不同的用户启动beeline客户端连接,编写SQL语句分析数据。
在这里插入图片描述
JDBC/ODBC 客户端
SparkSQL中提供类似JDBC/ODBC方式,连接Spark ThriftServer服务,执行SQL语句,首先添加Maven依赖库:

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive-thriftserver_2.11</artifactId>
<version>2.4.5</version>
</dependency>

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

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

import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}
/**
* SparkSQL 启动ThriftServer服务,通过JDBC方式访问数据分析查询
* i). 通过Java JDBC的方式,来访问Thrift JDBC/ODBC server,调用Spark SQL,并直接查询Hive中的数据
* ii). 通过Java JDBC的方式,必须通过HTTP传输协议发送thrift RPC消息,Thrift JDBC/ODBC server必须通过上面命
令启动HTTP模式
*/
object SparkThriftJDBC {
def main(args: Array[String]): Unit = {
// 定义相关实例对象,未进行初始化
var conn: Connection = null
var pstmt: 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.itcast.cn:10000/db_hive",
"root",
"123456"
)
// TODO: c. 构建查询语句
val sqlStr: String =
"""
|select e.ename, e.sal, d.dname from emp e join dept d on e.deptno = d.deptno
""".stripMargin
pstmt = conn.prepareStatement(sqlStr)
// TODO: d. 执行查询,获取结果
rs = pstmt.executeQuery()
// 打印查询结果
while (rs.next()) {
println(s"empno = ${rs.getInt(1)}, ename = ${rs.getString(2)}, sal = ${rs.getDouble(3
)}, dname = ${rs.getString(4)}")
}
} catch {
case e: Exception => e.printStackTrace()
} finally {
if (null != rs) rs.close()
if (null != pstmt) pstmt.close()
if (null != conn) conn.close()
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spark 是一个基于内存分布式计算框架,它可以在大规模数据集上进行快速的数据处理。Spark 的主要特点是速度快、易用性高、支持多种编程语言和数据源,并且可以与 Hadoop 集成使用。Spark 的核心是 RDD(Resilient Distributed Datasets,弹性分布式数据集),它是一个可分区、可并行计算、可容错的数据集合。Spark 还提供了丰富的 API,包括 Spark SQLSpark Streaming、MLlib 和 GraphX 等,可以满足不同的数据处理需求。Spark分布式计算模型基于 DAG(Directed Acyclic Graph,有向无环图)执行引擎,可以实现高效的数据处理和计算Spark 的应用场景包括数据挖掘、机器学习、图计算、实时数据处理等。 ### 回答2: Spark 是一种流行的开源分布式计算框架,它用于处理大量数据。Spark 的主要目标是提高大规模数据处理的速度,并增强数据处理的可伸缩性、容错性和易用性。 Spark 的主要特点是它可以将数据集分成多个部分,并通过分布式计算来处理这些数据。Spark 支持多种数据源,如 Hadoop HDFS、Cassandra、HBase 和 Amazon S3 等,因此灵活性强。 Spark 的核心库是 Spark Core,它提供了分布式任务调度、内存管理和错误恢复等核心功能。同时 Spark 也提供了各种扩展库,如 Spark SQLSpark Streaming、Spark MLlib 和 GraphX 等,用于处理不同类型的数据。 Spark 采用 RDD(弹性分布式数据集)模型进行数据处理。RDD 代表一个分区的不可变数据集,可以并行处理在分布式环境中存储的数据。RDD 具有弹性、不可变、分区、可持久化等特性,可以有效地支持各种数据处理操作,如 map、reduce、filter、join 等等。 除了 RDD 模型,Spark 还支持DataFrame 和 DataSet 模型。DataFrame 是一种类似于关系型数据库表的数据结构,它具有优秀的优化性能和易用性。DataSet 模型是 DataFrame 的超集,它提供了静态类型检查和面向对象的编程接口等更高级的功能。 Spark 可以使用多种编程语言编写,在 Java、Scala 和 Python 等语言中都可以使用 Spark。同时,Spark 也支持在 YARN、Mesos 和 Kubernetes 等多种资源管理平台上运行。对于 Spark 用户而言,几乎可以无缝切换各种编程语言和资源管理平台。 总之,Spark 是一个非常重要和流行的分布式计算框架,它在大数据处理领域具有广泛的应用和积极的社区支持,也正在不断地发展壮大。 ### 回答3: Spark 是一款基于内存分布式计算框架,被认为是目前最流行的大数据计算框架之一。它不仅能够执行批处理作业,而且还可以处理流式数据和机器学习等任务。与 Hadoop MapReduce 相比,Spark 的优势主要在于速度。 Spark 采用了 RDD(Resilient Distributed Datasets)模型,可以自动将数据划分为多个分区并在多个节点上并行计算,从而实现高效的计算。RDD 可以在内存中缓存,减少了输入/输出的操作,同时也减少了磁盘 I/O 的使用。此外,Spark 还支持针对 RDD 转换和操作的各种 API,包括 map、reduce、filter、join 等常见操作。这使得开发人员可以轻松地构建复杂的数据流和算法。 Spark 还提供了许多组件和库,包括 Spark Streaming、Spark SQL 和 MLlib 等,为不同的任务提供了不同的解决方案。Spark Streaming 可以用于流处理,Spark SQL 可以用于 SQL 查询,而 MLlib 则提供了各种机器学习算法和工具。 总之,Spark 是一个快速、易于使用和高度可扩展的分布式计算框架,是大数据行业的热门技术之一。它可以用于处理各种形式的数据并执行各种任务,无论是批处理还是流处理,还是机器学习,都可以使用 Spark 轻松处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdnGuoYuying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值