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 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}" ]]; thenecho "SPARK_HOME is not set!" >&2exit 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 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/284919.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

arm 外部中断

main.c: #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1…

AugmentedReality之路-创建工程及主界面(1)

本文从零创建1个工程&#xff0c;并添加1个BasicMap和1个主界面&#xff0c;主界面包含Start AR和Stop AR两个按钮 1、创建移动端工程并打包运行 创建1个空工程&#xff0c;选择C&#xff0c;Mobile&#xff0c;Scalable&#xff0c;勾选StarterContent 通过Edit->Proje…

MySQL学习笔记(一)

1、什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f; 数据库&#xff1a;英文单词DataBase&#xff0c;简称DB。按照一定格式存储数据的一些文件的组合。顾名思义&#xff0c;存储数据的仓库&#xff0c;实际…

MySQL的基本操作与增删改查管理操作

一、MySQL数据库sql语句 1.1 sql 命令 database数据库table表row行column列user用户select从数据表中获取数据updata更新数据库中的数据delete从数据库中删除数据insert into 向数据表插入数据create database创建新数据库alter database修改数据库create table创建新表alter…

MySql实战--一条SQL查询语句是如何执行的?

平时我们使用数据库&#xff0c;看到的通常都是一个整体。比如&#xff0c;你有个最简单的表&#xff0c;表里只有一个ID字段&#xff0c;在执行下面这个查询语句时&#xff1a; select * from T where ID10&#xff1b; 我们看到的只是输入一条语句&#xff0c;返回一个结果…

WorkPlus一站式IM即时通讯解决方案,提升企业沟通效率与协作能力

在企业内部沟通与协作中&#xff0c;高效的即时通讯是实现团队协作与工作效率的重要保障。而WorkPlus以其稳定可靠的性能和全面的功能&#xff0c;为企业提供一站式的IM即时通讯解决方案&#xff0c;助力企业提升沟通效率与协作能力。IM即时通讯在企业中的重要性不言而喻。作为…

分享 | 使用Virtuoso VCPVSR工具基于标准单元的布局布线流程

​ 本节内容 导览 一、准备工作 二、运行VCP前的配置 三、VCP的布局规划 四、VCP的自动摆放 五、VSR的自动绕线 分享使用Virtuoso GXL Custom Digital Placer(VCP) & Space-based Router(VSR)工具进行基于纯数字Standard-Cell布局布线的操作流程。 VCP&VSR演…

【Nebula笔记】简介及安装

目录 一、简介 (一) 什么是图数据库 二、安装 (一) 原生安装 (二) Docker & Docker compose 1. Docker安装 Linux Window 2. 部署NebulaGraph (三) to MAC 三、Nebula Graph Studio (一) 版本兼容性 (二) 原生安装 (三) Docker compose (四) 连接Nebula Gra…

简述C语言文件操作

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分79)&#xff0c;分享…

安全工具介绍 SCNR/Arachni

关于SCNR 原来叫Arachni 是开源的&#xff0c;现在是SCNR&#xff0c;商用工具了 可试用一个月 Arachni Web Application Security Scanner Framework 看名字就知道了&#xff0c;针对web app 的安全工具&#xff0c;DASTIAST吧 安装 安装之前先 sudo apt-get update sudo…

每日学习笔记:C++ STL 容器的杂谈

三种自定义STL容器 string作为STL容器 C风格数组作为STL容器 C11以后 C11以前 容器元素类型是引用 使用智能指针存储元素 使用引用外覆器 各容器使用时机 如何分别用两种不同的排序准则来存储同批数据&#xff1f; 解决方案&#xff1a;将容器元素改为智能指针即可。 根据排…

大数据Spark--入门

文章目录 Spark 概述Spark 是什么Spark and HadoopSpark and HadoopSpark 核心模块 Spark 简单上手创建Maven项目增加 Scala 插件增加依赖关系WordCount异常处理 Spark 概述 Spark 所需资料 链接&#xff1a;https://pan.baidu.com/s/12iaW68vriL6i-xI1kmr0_g?pwdm4zc 提取码…

对话Midjourney创始人:图片仅是起步,人工智能将全面改变学习、创意和组织。

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 ​ 发布在https://it.weoknow.com 关注我 Midjourney 是一家神奇的公司&#xff0c;11 人改变世界&#xff0c;创造伟大的产品。…

小车倒立摆系统极点配置,LQR闭环控制

在之前直流电机控制仿真里有讲过状态控制的基本架构&#xff0c;有兴趣的同学可以再回去看看&#xff0c;链接如下好玩的直流电机调速实验、PID、极点配置、LQR、观测器&#xff1b;不讲大道理_lqr控制器观测器-CSDN博客 在专栏的前三篇文章 小车倒立摆物理建模与simulink仿真…

MySQL字符集与排序规则

MySQL字符集与排序规则 字符集 字符集是一组符号和编码&#xff0c; 排序规则是用于比较字符集中字符的一组规则。 可使用information_schema character_sets表或show character_set语句查看可用的字符集。 Unicode、ACCII和UTF-8的区别 Unicode 是一种字符集&#xff0c;它…

探索超净实验室:高纯电子级PFA洗瓶特氟龙材质清洗瓶的特性

PFA洗瓶&#xff0c;实验中常用的清洗工具之一&#xff0c;是一个带有弯曲管状喷嘴的柔性瓶子&#xff0c;因此可以用手挤压瓶身以产生压力&#xff0c;迫使瓶内液体通过塑料管以单滴或窄流的形式流到需要清洁的表面。 ​ 由于需要多次挤压&#xff0c;瓶体要有良好的回弹性和…

【Unity】宏定义Scripting Define Symbols

1.宏的用处 我们在使用Unity开发的时候&#xff0c;经常需要根据不同环境执行不同的代码 比如安卓手机和苹果手机获取路径代码 这个时候&#xff0c;宏就派上用场了。 代码示例&#xff1a; //获取路径public string GtePath(){//不同平台&#xff0c;取不同的存储路径string…

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论&#xff0c;在此基础上深入理解网络安全协议的工作原理&#xff0c;并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

P - Beat

题目分析 1.看数据范围&#xff0c;大概知道dfs能做 2.自0问题开始查找&#xff0c;确保之后每次查找到的问题的困难度均大于上一次 3.遍历所有情况再记录cnt即可 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring&…