大数据课程K20——Spark的SparkSql概述

news2024/11/20 20:26:40

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 了解Spark的SparkSQL由来;

⚪ 了解Spark的SparkSQL特点;

⚪ 了解Spark的SparkSQL优势;

⚪ 掌握Spark的SparkSQL入门;

一、SparkSQL概述

1. 概述

Spark为结构化数据处理引入了一个称为SparkSQL的编程模块。它提供了一个称为DataFrame(数据框)的编程抽象,DF的底层仍然是RDD,并且可以充当分布式SQL查询引擎。

2. SparkSQL的由来

SparkSQL的前身是Shark。在Hadoop发展过程中,为了给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,是当时唯一运行在hadoop上的SQL-on-Hadoop工具。但是,MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,运行效率较低。

后来,为了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具开始产生,其中表现较为突出的是:

1. MapR的Drill

2. Cloudera的Impala

3. Shark

其中Shark是伯克利实验室Spark生态环境的组件之一,它基于Hive实施了一些改进,比如引入缓存管理,改进和优化执行器等,并使之能运行在Spark引擎上,从而使得SQL查询的速度得到10-100倍的提升。

但是,随着Spark的发展,对于野心勃勃的Spark团队来说,Shark对于hive的太多依赖(如采用hive的语法解析器、查询优化器等等),制约了Spark的One Stack rule them all的既定方针,制约了spark各个组件的相互集成,所以提出了sparkSQL项目。

SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码。

由于摆脱了对hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

2014年6月1日,Shark项目和SparkSQL项目的主持人Reynold Xin宣布:停止对Shark的开发,团队将所有资源放SparkSQL项目上,至此,Shark的发展画上了句话。

3. SparkSQL特点

1. 引入了新的RDD类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD

2. 在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。

3. 内嵌了查询优化框架,在把SQL解析成逻辑执行计划之后,最后变成RDD的计算。

4. SparkSQL优化

主要sparkSQL在下面几点做了优化:

1. 内存列存储(In-Memory Columnar Storage)

列存储的优势:

①海量数据查询时,不存在冗余列问题。如果是基于行存储,查询时会产生冗余列,消除冗余列一般在内存中进行的。或者基于行存储的查询,实现物化索引(建立B-tree B+tree),但是物化索引也是需要耗费cpu的

②基于列存储,每一列数据类型都是同质的,好处一可以避免数据在内存中类型的频繁转换。好处二可以采用更高效的压缩算法,比如增量压缩算法,二进制压缩算法。性别:男  女  男  女  0101

  SparkSQL的表数据在内存中存储不是采用原生态的JVM对象存储方式,而是采用内存列存储,如下图所示。

该存储方式无论在空间占用量读取吞吐率上都占有很大优势。

对于原生态的JVM对象存储方式,每个对象通常要增加12-16字节的额外开销(toString、hashcode等方法),如对于一个270MB的电商的商品表数据&

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLI-labs-第四关

知识点:get双引号(")和括号注入 思路: 1、判断注入点 首先,输入?id1 --,看看正常的回显状态 接着输入?id1 --,结果还是正常回显,说明这里不存在单引号问题 试试双引号,这里爆出了sql语…

深入了解GCC编译过程

关于Linux的编译过程,其实只需要使用gcc这个功能,gcc并非一个编译器,是一个驱动程序。其编译过程也很熟悉:预处理–编译–汇编–链接。在接触底层开发甚至操作系统开发时,我们都需要了解这么一个知识点,如何…

C# 如何读取dxf档案

需求来源: 工作中,客户提供一张CAD导出的dxf 档案,然后需要机器人将其转成点位,走到对应的位置。 下面介绍一下dxf档案到底是什么?以及语法规则。 dxf 格式介绍:DXF 格式 dxf LINE 格式。 其实上述文档…

软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

软考:中级软件设计师:多媒体基础 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &am…

在公网上使用SSH远程连接安卓手机Termux:将Android手机变身为远程服务器

文章目录 前言1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 前言 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不过我们可以开启ssh,使用电脑PC端SSH远程连接手机termux。 本次教程主要实现在…

介绍OpenCV

OpenCV是一个开源计算机视觉库,可用于各种任务,如物体识别、人脸识别、运动跟踪、图像处理和视频处理等。它最初由英特尔公司开发,目前由跨学科开发人员社区维护和支持。OpenCV可以在多个平台上运行,包括Windows、Linux、Android和…

高等数学刷题

分段函数主要看在临界点处的左右极限是否相等,若相等则整段函数即为连续 (反之若是连续函数,在某一点为间断点,则可推导出一定为可去间断点) 无定义的点一定为间断点 如果该点有极限则为可去间断点 由于x的不确定导…

RK3568-spi-适配1.8寸TFT彩屏驱动芯片st7735s

RK3568-spi-适配1.8寸TFT彩屏 驱动芯片st7735s 显示分辨率128x160硬件连接 VCC -- 3.3V GND -- GND BL -- 背光控制 CS -- 片选引脚 DC -- 数据/命令控制 RES -- 屏幕复位 SCL -- i2c时钟引脚 SDA -- i2c数据引脚设备树编写 &spi0 {pinctrl-names = "default"…

docker安装Apache NIFI

说明 系统:CentOS7.9 nifi版本:1.23.2 下载镜像 nifi的镜像比较大,大概有2G左右,下载时间根据个人网速而定 docker pull apache/nifi:1.23.2 查看下载好的镜像 docker images 复制容器数据 创建挂载目录 创建挂载目录的目…

【Yolov5+Deepsort】训练自己的数据集(3)| 目标检测追踪 | 轨迹绘制 | 报错分析解决

📢前言:本篇是关于如何使用YoloV5Deepsort训练自己的数据集,从而实现目标检测与目标追踪,并绘制出物体的运动轨迹。本章讲解的为第三部分内容:数据集的制作、Deepsort模型的训练以及动物运动轨迹的绘制。本文中用到的数…

qt day 6

登录界面 #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//判断数据库对象是否包含了自己使用的数据库Student.dbif(!db.contains(&…

20230904 QT客户端服务器搭建聊天室

Ser cpp#include "app.h" #include "ui_app.h"APP::APP(QWidget *parent):QWidget(parent),ui(new Ui::APP) {ui->setupUi(this);this->resize(550,400);ui->Line->setAlignment(Qt::AlignCenter);//标签文本对齐方式 居中ui->Line->se…

爬虫源码---爬取自己想要看的小说

前言&#xff1a; 小说作为在自己空闲时间下的消遣工具&#xff0c;对我们打发空闲时间很有帮助&#xff0c;而我们在网站上面浏览小说时会被广告和其他一些东西影响我们的观看体验&#xff0c;而这时我们就可以利用爬虫将我们想要观看的小说下载下来&#xff0c;这样就不会担…

突破瓶颈:如何应对高级职位的面试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

K8S自动化运维容器Docker集群

K8S&#xff1a;K8S自动化运维容器化(Docker)集群 一.k8s概述 1.k8s是什么 &#xff08;1&#xff09;K8S全程为Kubernetes&#xff0c;由于K到S直接有8个字母简称为K8S。 &#xff08;2&#xff09;版本&#xff1a;目前一般是1.18~1.2.0&#xff0c;后续可能会到1.24-1.2…

Qt 开发 CMake工程

Qt 入门实战教程&#xff08;目录&#xff09; 为何要写这篇文章 目前CMake作为C/C工程的构建方式在开源社区已经成为主流。 企业中也是能用CMake的尽量在用。 Windows 环境下的VC工程都是能不用就不用。 但是&#xff0c;这个过程是非常缓慢的&#xff0c;所以&#xff0…

Linux 学习笔记(2)—— 关于文件和目录

目录 1、切换目录 2、查看系统信息 3、文本的创建和编辑 3-1&#xff09;创建文件 3-2&#xff09;查看文件 3-3&#xff09;输出重定向和追加重定向 3-4&#xff09;使用 vi 编辑器编辑文件 4、文件和文件夹的处理 4-1&#xff09;对文件的处理 4-2&#xff09;查看…

avue实现用户本地保存自定义配置字段属性及注意事项(基于tj-vue2-tools)

avue实现用户本地保存自定义配置字段属性及注意事项&#xff08;基于tj-vue2-tools&#xff09; tj-vue2-tools项目地址&#xff1a;https://www.npmjs.com/package/tj-vue2-tools 文档请看项目官方 依赖js-base64 安装依赖 npm install js-base64安装 npm install tj-vue2-t…

Linux代码初试__进度条

前言 在我们的日常生活中&#xff0c;进度条是十分常见的&#xff0c;比如在软件下载中&#xff0c;应用加载中等等~~~那么进度条有什么特点&#xff1f;他又如何实现。 下面我们将结合下面的图展开讲解 一、前置理论知识 1.1回车和换行的区别 在我们的日常生活中&#x…

qt连接tcp通信和连接数据库

通过数据库实现学生管理系统 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//判断数据库对象是否包含了自己使用的数据库 Studemt.dbif(!db.co…