八股文系列Spark

news2024/11/15 20:51:36

为什么Spark 比 MapReduce 更快

DAG相比hadoop的mapreduce在大多数情况下可以减少磁盘I/O次数

        因为mapreduce计算模型只能包含一个map和一个reduce,所以reduce完后必须进行落盘,而DAG可以连续shuffle的,也就是说一个DAG可以完成好几个mapreduce,所以DAG只需要在最后一个shuffle落盘,就比mapreduce减少了落盘次数

spark shuffle 的优化

        mapreduce在shuffle时默认进行排序,spark在shuffle时则只有部分场景才需要排序(bypass技师不需要排序),排序是非常耗时的,这样就可以加快shuffle速度

spark支持将需要反复用到的数据进行缓存

        所以对于下次再次使用此rdd时,不再再次计算,而是直接从缓存中获取,因此可以减少数据加载耗时,所以更适合需要迭代计算的机器学习算法

任务级别并行度上的不同

        mapreduce采用多进程模型,而spark采用了多线程模型,多进程模型的好处是便于细粒度控制每个任务占用的资源,但每次任务的启动都会消耗一定的启动时间,即mapreduce的map task 和reduce task是进程级别的,都是jvm进程,每次启动都需要重新申请资源,消耗不必要的时间,而spark task是基于线程模型的,通过复用线程池中的线程来减少启动,关闭task所需要的开销(多线程模型也有缺点,由于同节点上所有任务运行在一个进行中,因此,会出现严重的资源争用,难以细粒度控制每个任务占用资源)

Spark 的 shuffle介绍

Spark 与 MapReduce 的 shuffle 的区别

整体功能

        两者并没有大的差别。 都是将 mapper(Spark 里是 ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到数据 aggregate 好以后进行 reduce(Spark 里可能是后续的一系列操作)。

实现流程

        两者差别不小。 Hadoop MapReduce 是 sort-based,进入 combine和 reduce的 records 必须先 sort。这样的好处在于 combine/reduce可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。以前 Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行合并,不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey的操作。在Spark 1.2之后,sort-based变为默认的Shuffle实现。

计算流程

        两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几个阶段:map, spill, merge, shuffle, sort, reduce等。每个阶段各司其职,可以按照过程式的编程思想来逐一实现每个阶段的功能。在 Spark 中,没有这样功能明确的阶段,只有不同的 stage 和一系列的 transformation,所以 spill, merge, aggregate 等操作需要蕴含在 transformation中。

Spark 3.0的新特性对比Spark2.0

动态分区裁剪

        即Dynamic Partition Pruning,在3.0以前不支持动态分区,所谓的动态分区是针对分区表中多个表进行join的时候运行时(runtime)推断出来的信息,在on后面的条件语句满足一定的要求后就会进行自动动态分区裁剪优化。

3.0以前:

3.0以后:

自适应查询执行

        即Adaptive Query Execution,指对执行计划按照实际数据分布和组织情况,评估其执行所消耗的时间和资源,从而选择代价最小的计划执行。

  • 减少 Reducer 的数量
  • 将 Sort Merge Join 转换为 Broadcast Hash Join
  • 处理数据倾斜
3.0以前:

3.0以后:

加速器感知调度

        即Accelerator-aware Scheduling,在Spark3.0版本,支持在Standalone、YARN以及Kubernetes资源管理器下支持GPU,并且对现有正常的作业基本没影响。后续将支持TPU    

Spark 3.0 在 Kubernetes 上有更多的功能:
  • 支持使用 pod 模板来定制化 driver 和 executor 对应的 pods
  • 支持动态资源申请,资源空闲的时候,减少 executor 数量,资源紧张的时候,动态的加入一些 executor
  • 支持外置的 shuffle 服务,将 shuffle 服务放在独立的 pod 里,能够解耦成一个架构

谈谈你对RDD 的理解

        它翻译过来就叫做弹性分布式数据集,是一种数据结构,可以理解成是一个集合。在代码中的话,RDD 是一个抽象类。还有一个非常重要的特点: RDD是不保存数据的,仅仅封装了计算逻辑,也就是你直接打印 RDD 是看不见具体值的。

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

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

相关文章

vue 应用测试(一) --- 介绍

vue 应用测试(一) ---介绍 前端测试简介组件测试Jest 测试框架简介其他测试框架 第一个测试避免误报如何组织测试代码 组件挂载Vue2 组件挂载的方式Vue3 的挂载方式vue-test-utils挂载选项 如何调试测试用例参考小结 前端测试简介 软件测试:…

康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(一)

功能模型接口FMI(Functional Mock-up Interface)是一个开放且与工具解耦的标准。FMI包含了一个C-API(接口),一个用于描述接口的XML文件以及可交换的功能模型单元FMU(Functional Mock-up Unit)&a…

通过nerdctl+buildctl编译发布go程序docker镜像

1 nerdctl安装 下载: wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-full-1.7.6-linux-amd64.tar.gz 解压: tar -zxf nerdctl-full-1.7.6-linux-amd64.tar.gz -C /usr/local/nerdctl 配置: /usr/local/nerdctl/…

6月报名 | 海克斯康Actran风机类气动噪声分析培训

您好!感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加海克斯康Actran风机类气动噪声分析培训,特邀海克斯康原厂讲师将以实操为基础,结合真实案例,手把手帮您解锁噪声仿真关键技术。 活动主题: 海…

【架构之路】微服务中常用的几种通信方式

2024年,计算机相关专业还值得选择吗? 强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 引言 微服务架构由于其灵活性、高可扩展性和易维护性&am…

mysql打开远程访问

这里写目录标题 1.使用navicat进入命令控制板,进入use mysql;2.查询用户表3.更新user表中root用户域属性,%表示允许外部访问4.执行以上语句之后再执行,FLUSH PRIVILEGES;5. 执行授权语句 1.使用navicat进入命令控制板,进入use mysql; use mysql;2.查询用…

NOSQL -- MOGODB

Mogodb简介: 是一个开源的, 高性能, 无模式的文档型数据库. NoSql数据库产品当中的一种, 也是最像关系型数据库的非关系型数据库 使用场景: 针对不同的应用场景, 以及其对应的修改对应数据的频率, 我们可以以此选择需要哪一种类型的数据库 Mongo的使用: 启动: 在解压完成之后…

动手学操作系统(六、获取物理内存容量)

动手学操作系统(六、获取物理内存容量) 在上一节中,我们介绍了保护模式和实模式的区别,保护模式的最大特点是“大”,“大”是指寻址空间大,在进入保护模式之后,我们还将要接触虚拟内存、内存管…

基于pytorch实现的DenseUnet医学图像分割(腹部多脏器)

1、前言 本章将介绍将densenet的主干网络引入unet中 官方实现的代码:kits19-challenge/network at master nitsaick/kits19-challenge (github.com) 本章实现的项目目录如下: 主要代码有train、evaluate、predict脚本 2、代码介绍 数据预处理脚本 数据…

全能型施耐德可编程控制器M241介绍

施耐德M241是一款通信强大、定位控制、丰富扩展于一身的全能型可编程控制器,适用于具有速度控制和位置控制功能的高性能一体型设备。其内置以太网通信端口,可以提供FTP和网络服务器功能,能够更为便捷地整合到控制系统架构中,通过智…

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法,它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特,强大,而且使用更为方便,目前检测少,强烈推荐!!&a…

Spark Streaming 概述及入门案例

一、介绍 1. 不同的数据处理 从数据处理的方式: 流式数据处理(Streaming)批量数据处理(Batch) 从数据处理的延迟: 实时数据处理(毫秒级别)离线数据处理(小时或天级别) 2. 简介 SparkStreaming 是一个准实时(秒或分钟级别)、微批量的数据处理框架Spa…

了解侧信道攻击基础知识

人们通常认为特洛伊木马、恶意软件和其他形式的黑客攻击等漏洞是的威胁;然而,从 EE 的角度来看,安全性具有全新的含义。  事实上,许多的安全威胁都是基于硬件的,攻击者可以直接从运行我们的安全加密软件的硬件中窃取…

根据mooc 数据库旧代码 实现剥离数据库链接单独成类,并进行测试

数据源详情链接,SQLserver 2019 代码复制粘贴可产生数据 数据库JDBC 查询sqlserver 2019 利用模板实现输入查询-CSDN博客 效果如下 剥离的链接模块 Slinkv2.java package SQLadd;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Re…

CentOS-内网搭建FTP-Server

一、镜像选择 1、 Centos-everting或者DVD 2、7.5 7.6 7.9 均可 二、安装步骤 1、其余步骤和普通安装一致。 2、最重要的一步为“软件选择” 1、勾选FTP、文件以及存储服务器、性能以及开发工具。 三、FTPServer搭建 1、关闭防火墙 systemctl stop firewalld or 通过21和20…

PS教程系统17

橡皮擦工具 主要配合画笔工具来使用 选择画笔工具新建图层试验擦除线条 如果直接在背景图片上进行擦除 会有背景颜色补充 背景橡皮擦 将其白色背景擦除掉shift相关键,进行工作区域切换吸取样点一次采样、两次采样连续、不连续等功能 在进行涂擦的过程一…

为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…

通过ClangFormat进行格式设置时出现错误

1、打开工具->选项 2、文本编辑器->C/C->格式设置->启动ClangFormat支持(去掉勾选)

六种图算法的python实现

六种图算法的python实现 1. Prim 算法 基本原理 Prim算法是一种求解最小生成树的贪心算法。所谓最小生成树,就是对于给定的连通图,找到一棵包含所有顶点的树,且树上所有边的权重之和最小。Prim算法从一个顶点开始,每次选择与当…

[CUDA编程] cuda graph优化心得

CUDA Graph 1. cuda graph的使用场景 cuda graph在一个kernel要多次执行,且每次只更改kernel 参数或者不更改参数时使用效果更加;但是如果将graph替换已有的kernel组合,且没有重复执行,感觉效率不是很高反而低于原始的kernel调用…