ToB企服应用市场:ToB评测及商务社交产业平台

标题: 03-SparkSQL入门 [打印本页]

作者: 钜形不锈钢水箱    时间: 2024-5-15 03:52
标题: 03-SparkSQL入门
0 Shark

Spark 的一个组件,用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式,可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目,利用 Hive 的元数据存储和查询语法,并基于Hive进行了性能优化和扩展。
0.1 设计

灵感来自 Google 的 Dremel 体系:
Shark 采取雷同架构并利用 Spark 作为计算引擎,使 Shark 具有很高查询性能和可扩展性。
0.2 缺陷

Shark 在 Spark 1.0 发布之后被正式弃用,Shark 的性能和可扩展性相对于 Spark SQL 来说存在一些局限性。以下是一些导致 Shark 被镌汰因素:
① 数据模子

Shark 基于 Hive 数据模子,利用 Hive 的元数据存储和查询语法,导致查询语句实验效率较低。
② 计算模子

Shark 采取雷同 Dremel 的列式存储引擎,虽能提高查询效率,但也导致更高内存开销和更复杂代码实现。
③ 性能和可扩展性

Shark性能和可扩展性相对Spark SQL存在一些局限性,如不支持流计算、新的数据源。
因此,Spark社区放弃 Shark,转而对 Spark SQL 更深入研究,以提高查询性能和可扩展性,并支持更多数据源和计算模子。因此,Spark SQL 取代 Shark 成为 Spark 生态体系的 SQL 查询引擎。
1 概述

Spark SQL,布局化数据处理的Spark模块。

自 Spark 1.0 版本(2014 年 4 月)以来成为焦点发布的一部分。

与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据和正在实验的计算的更多信息。在内部,Spark SQL利用这些额外的信息实验额外的优化。与Spark SQL交互的几种方法包括SQL和Dataset API。在计算结果时,无论利用哪种API /语言表达计算,都利用相同的实验引擎。这种同一意味着开发人员可以根据提供最自然的方式表达给定转换的API轻松切换。
2 用途

实验SQL查询。 Spark SQL也可用于从Hive读取数据。当从另一种编程语言中运行SQL时,结果将作为Dataset/DataFrame返回。还可利用下令行或通过JDBC/ODBC与SQL接口交互。
3 特性

3.1 集成性

Spark SQL可让你在Spark程序用SQL或熟悉的DataFrame API查询布局化数据。可在Java、Scala、Python和R中利用。它可使SQL查询与Spark程序无缝混合。
3.2 同一数据访问

DataFrames和SQL提供了一种通用方式访问各种数据源如Hive、Avro、Parquet、ORC、JSON和JDBC。甚至可在这些数据源之间联接数据。
  1. spark.read.format("json").load(path)
  2. spark.read.format("text").load(path)
  3. spark.read.format("parquet").load(path)
  4. spark.read.format("json").option("...","...").load(path)
复制代码
3.3 兼容Hive

Spark SQL支持HiveQL语法以及Hive SerDes和UDF,使你可以访问现有的Hive堆栈并在其上运行SQL或HiveQL查询。
如果你想把Hive的作业迁徙到Spark SQL,这样的话,迁徙成本就会低许多
3.4 标准的数据连接

Spark SQL提供了服务器模式,可为BI提供行业标准的JDBC和ODBC连接功能。通过该功能,可通过JDBC或ODBC连接到Spark SQL并进行数据查询和操作。

4 架构


5  spark-submit 启动应用程序

一旦绑定用户应用程序,就能用spark-submit启动。该脚本负责利用 Spark 及其依赖项设置类路径,并支持 Spark 支持的不同集群管理器和部署模式:
  1. ./bin/spark-submit \
  2.   --class <main-class> \
  3.   --master <master-url> \
  4.   --deploy-mode <deploy-mode> \
  5.   --conf <key>=<value> \
  6.   ... # other options
  7.   <application-jar> \
  8.   [application-arguments]
复制代码
常用选项:
  1. #!/usr/bin/env bash
  2. # 检查Spark SQL的环境变量
  3. if [[ -z "${SPARK_HOME}" ]]; then
  4.   echo "SPARK_HOME is not set!" >&2
  5.   exit 1
  6. fi
  7. # 设置Spark SQL的类路径
  8. export SPARK_CLASSPATH="${SPARK_HOME}/jars/*:${SPARK_HOME}/conf"
  9. # 启动Spark SQL的服务
  10. exec "${SPARK_HOME}/bin/spark-submit" \
  11.   --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 \
  12.   --name "Spark SQL Thrift Server" \
  13.   --master yarn \
  14.   --deploy-mode client \
  15.   --conf "spark.sql.hive.thriftServer.singleSession=true" \
  16.   --conf "spark.sql.hive.thriftServer.incrementalCollect=true" \
  17.   "${SPARK_HOME}/jars/spark-hive-thriftserver.jar" \
  18.   "$@"
复制代码
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都技能专家兼架构,多家大厂后端一线研发履历,各大技能社区头部专家博主。具有丰富的引领团队履历,深厚业务架构息争决方案的积累。
负责:
目前主攻降低软件复杂性设计、构建高可用体系方向。
参考:
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4