首页 > 数据库 >03-SparkSQL入门

03-SparkSQL入门

时间:2024-03-23 20:36:07浏览次数:21  
标签:03 Shark 入门 -- Hive SparkSQL SQL Spark spark

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 SQL官网
  • 误区:Spark SQL就是一个SQL处理框架,不仅是处理 SQL

自 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。甚至可在这些数据源之间联接数据。

spark.read.format("json").load(path)
spark.read.format("text").load(path)
spark.read.format("parquet").load(path)
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 支持的不同集群管理器和部署模式:

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

常用选项:

  • --class:应用程序入口点(如org.apache.spark.examples.SparkPi
  • --master:集群的主 URLspark://23.195.26.187:7077
  • --deploy-mode: 在工作节点部署你的驱动程序 ( cluster) 还是在本地作为外部客户端 ( client) (默认: client)
  • --conf:K=V 格式的任意 Spark 配置属性。对于包含空格的值,将“key=value”括在引号中(如图所示)。多个配置应作为单独的参数传递。(如--conf <key>=<value> --conf <key2>=<value2>
  • application-jar:包含你的应用程序和所有依赖项的捆绑 jar 的路径。该 URL 必须在你的集群内全局可见,如路径hdfs://file://存在于所有节点上的路径
#!/usr/bin/env bash

# 检查Spark SQL的环境变量
if [[ -z "${SPARK_HOME}" ]]; then
  echo "SPARK_HOME is not set!" >&2
  exit 1
fi

# 设置Spark SQL的类路径
export SPARK_CLASSPATH="${SPARK_HOME}/jars/*:${SPARK_HOME}/conf"

# 启动Spark SQL的服务
exec "${SPARK_HOME}/bin/spark-submit" \
  --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 \
  --name "Spark SQL Thrift Server" \
  --master yarn \
  --deploy-mode client \
  --conf "spark.sql.hive.thriftServer.singleSession=true" \
  --conf "spark.sql.hive.thriftServer.incrementalCollect=true" \
  "${SPARK_HOME}/jars/spark-hive-thriftserver.jar" \
  "$@"
  1. 检查Spark SQL的环境变量,如果没有设置则退出脚本。
  2. 设置Spark SQL的类路径,包含了Spark的jar包和配置文件。
  3. 使用spark-submit命令启动Spark SQL的服务。
  4. 指定启动类为HiveThriftServer2,该类负责启动Spark SQL的Thrift Server。
  5. 指定服务名称为"Spark SQL Thrift Server"。
  6. 指定Spark运行模式为yarn,提交任务到yarn集群中运行。
  7. 指定部署模式为client,即客户端模式。
  8. 设置Spark SQL的配置项,例如singleSession和incrementalCollect。
  9. 指定启动的jar包为spark-hive-thriftserver.jar。
  10. 最后传入用户输入的参数。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&优惠券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

本文由博客一文多发平台 OpenWrite 发布!

标签:03,Shark,入门,--,Hive,SparkSQL,SQL,Spark,spark
From: https://www.cnblogs.com/JavaEdge/p/18091629

相关文章

  • SAR图像辐射分辨率和等效视数(CSDN_20240323)
            辐射分辨率和等效视数,是基于面目标评价SAR图像质量的两项重要指标。在介绍辐射分辨率和等效视数之前,首先介绍SAR图像的均值和方差。均值图像均值指的是SAR幅度图的统计平均,该指标反映了地物目标的平均后向散射系数,具体定义如下:其中,M和N分别表示SAR图像的......
  • Netty入门程序
    本章使用Netty开发一个入门程序,使用ServerBootstrap开发时间服务TimeServer,使用Bootstrap开发客户端TimeClient请求TimeServer获取时间。 开发TimeServer之前,先回顾一下使用NIO进行服务端开发的步骤。(1)创建ServerSocketChannel,配置它为非阻塞模式;(2)绑定监听,配置TCP参数,例......
  • 2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币,
    2024-03-23:用go语言,一张桌子上总共有n个硬币栈。每个栈有正整数个带面值的硬币,每一次操作中,你可以从任意一个栈的顶部取出1个硬币,从栈中移除它,并放入你的钱包里。给你一个列表piles,其中piles[i]是一个整数数组,分别表示第i个栈里从顶到底的硬币面值。同时给你......
  • 03天【代码随想录算法训练营34期】第二章 链表part01(203.移除链表元素 、707.设计链表
    203.移除链表元素竟然可以做个假head,学到了classListNode(object):def__init__(self,val=0,next=None):self.val=valself.next=nextclassSolution(object):defremoveElements(self,head,val):dummy_head=ListNode(-1)......
  • 中国电子学会(CEIT)2021年03月真题C语言软件编程等级考试三级(含详细解析答案)
    中国电子学会(CEIT)考评中心历届真题(含解析答案)C语言软件编程等级考试三级2021年03月编程题五道 总分:100分一、找和为K的两个元素(20分)在一个长度为n(n<1000)的整数序列中,判断是否存在某两个元素之和为k。时间限制:1000ms内存限制:65536kb输入第一行输入......
  • BUGAWAY算法小抄-树状数组(2024.03.23 更新)
    什么是树状数组?树状数组是支持单点修改和区间查询的、代码量小的数据结构。事实上,树状数组能解决的问题是线段树(一棵二叉树,每个节点表示一个区间,并存储该区间的一些相关信息。线段树可以高效地进行区间查询和区间更新操作。不是本文重点)能解决的问题的子集:树状数组能做的,线段树......
  • awk跳过#注释的行 '/^[^#]/'的作用
    awk'/^[^#]/' 这个命令是用来处理文本文件或输入流的,其中 awk 是一个强大的文本处理工具。'/^[^#]/' 是一个 awk 的模式(pattern),它告诉 awk 对哪些行执行后续的动作(在这里,我们没有指定任何动作,所以 awk 默认会打印匹配该模式的行)。具体来说,/^[^#]/ 这个正则表达式表......
  • 记录真实项目中遇到的bug--003:支付bug
    T03:支付bug:1.优先级:P02.前提条件:用户A手机浏览器打开页面选择微信支付3.预期结果:弹出二维码,根据提示文字在微信中完成支付。4.实际结果:弹出二维码,根据提示文字无法在微信中完成支付5.缺陷跟踪:后台未赋予微信外浏览器H5支付权限,因为开发与产品业务未能对齐颗粒度,最终取消手......
  • Java基础入门:数据、控制与异常全解析
    Java基础知识回顾:数据类型、控制结构、异常处理Java作为一门面向对象的编程语言,具有丰富的数据类型、灵活的控制结构和强大的异常处理机制。本篇文章将带大家回顾Java的基础知识,包括数据类型、控制结构和异常处理,希望对大家有所帮助。1.数据类型Java中的数据类型分为基......
  • 初用scrapy 报错503 Service Unavailable问题
    毕设基于Hadoop的电子产品推荐系统 系统需要大量的电子产品信息,爬取的是中关村的数据(没有像京东一样的反爬机制)使用scrapyspider爬取页面信息中,可以获取部分页面数据,但爬取一些页面时,会报错503ServiceUnavailable部分代码详情defparse(self,response):if......