spark为什么比mapreduce快?

spark为什么比mapreduce快?

首先澄清几个误区:

1:两者都是基于内存计算的,任何计算框架都肯定是基于内存的,所以网上说的spark是基于内存计算所以快,显然是错误的

2;DAG计算模型减少的是磁盘I/O次数(相比于mapreduce计算模型而言),而不是shuffle次数,因为shuffle是根据数据重组的次数而定,所以shuffle次数不能减少

所以总结spark比mapreduce快的原因有以下几点:

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

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

mapreduce,所以dag只需要在最后一个shuffle落盘,就比mapreduce少了,总shuffle次数越多,减少的落盘次数就越多

2:spark shuffle 的优化

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

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

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

4:任务级别并行度上的不同

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

作者:京东零售 吴化斌

来源:京东云开发者社区 转载请注明来源

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

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

相关文章

linux部署File Browser文件管理系统

File Browser是go语言编写的软件,可以通过浏览器对服务器上的文件进行管理 创建部署目录 /data/filebrowser mkdir -p /data/filebrowser && cd /data/filebrowser下载File Browser软件包 wget https://github.com/filebrowser/filebrowser/releases/do…

基于SSM的在线教学质量评价系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的在线教学质量评价系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spri…

远程办公利器,有哪些远程办公利器好用

远程办公利器,有哪些远程办公利器好用 有的时候需要紧急办公位,但是你的电脑、公司、办公室、酒店、网吧、家里的电脑等极为不方便,这时有远程办公利器就好了。在网上查了下,发下个好用的工具,这里分享下。 1、…

C++项目开发编译踩坑记录

git工具配置了autocrlfinput下载的代码换行符默认从CRLF转换为LF,导致在windows桌面开发时,编译C代码全文报语法错误 问题现象:使用git clone命令从库上下载下来的代码,使用VS 2022编译,全文报语法错误,但…

API关键词接口的应用范围说明

一、应用场景 适用商家批发选品,价格监控,品牌监控,实地商家进货 二、公共参数 请求地址: https://api-gw.onebound.cn/1688/item_search 三、请求参数 请求参数:q女装&start_price0&end_price0&page1&cat0&…

UE5 C++ UObject实例化

一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面,先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类,允许设计者指定伤害类型…

openai chatGPT 原理通俗介绍

引言 近年来,随着深度学习技术的不断发展,自然语言处理(NLP)领域取得了长足的进步。ChatGPT(Generative Pre-trained Transformer)作为一种先进的语言生成模型,在各类对话系统和智能助手中得到…

Stable Diffusion WebUI 常用命令行参数

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文主要讲解 Stable Diffusion WebUI 的一些常用命令行参数,内容详细的介绍了每一种参数的使用,并配有截图,非常适合初学者…

[规章规划]国家数据局-《关于开展全国数据资源调查的通知》要点解析

去年10月份国家数据局成立以后,各地方省级政府数据局纷纷快速挂牌成立。 仅以2024年1月举例,1月5日,江苏省数据局(江苏省政务服务管理办公室)挂牌成立,成为国家数据局正式揭牌后,第一个成立的省…

Web3区块链游戏:创造虚拟世界的全新体验

随着区块链技术的不断发展,Web3区块链游戏正逐渐崭露头角,为玩家带来了全新的虚拟世界体验。传统游戏中的中心化结构和封闭经济体系已经被打破,取而代之的是去中心化的游戏环境和真实所有权的数字资产。本文将深入探讨Web3区块链游戏的特点、…

基于python的家政预约管理系统

功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、详情页、用户中心、家政入驻模块。后台功能包括:总览、家政管理、分类管理…

回答一下 Spring Bean 生命周期的执行流程?

一、问题解析 Spring 生命周期全过程大致分为五个阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。 这张是 Spring Bean 生命周期完整流程图,其中对每个阶段的具体操作做了详细介绍: (把这张图按…

用冒泡排序实现快速排序(qsort函数),指针进阶实例

目录 1、qsort函数是什么 2、冒泡排序实现指针进阶 2.1 主函数 2.2 功能函数声明​编辑 2.3 my_qsort函数介绍 2.4 Swap函数 总结 1、qsort函数是什么 qsort函数是c语言自带的函数,其功能是实现快速排序。我们来看一下他的参数和返回值: 以上就是q…

springboot+flowable 使用方式

创建flowble制定流程图 登录flowalbe 制定流程图 进入建模器应用程序 创建流程图 分配用户 下载流程图 使用springboot 调用flowable /*** 导入流程图老师流程*/Testvoid startTeacherApprover(){Deployment deploy repositoryService.createDeployment().addClasspathRes…

2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年天津市安全员C证证模拟考试题库及天津市安全员C证理论考试试题是由安全生产模拟考试一点通提供,天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材,天津市安全员C证大纲整理…

linux内核视角看零拷贝

一、什么是零拷贝? 在很多性能优化方案中都有提到零拷贝,零拷贝到底是怎么回事,是真的没有数据的拷贝吗?零拷贝(Zero-copy)是一种数据传输技术,旨在减少数据在内核态和用户态之间的复制操作。其…

计算机网络概论和数据通信基础

文章目录 计算机网络概论从物理构成上看,计算机网络包括硬件、软件和协议三大部分计算机网络的功能组成计算机网络的分类网络体系结构分层与体系结构接口、协议和服务数据传送单位OSI模型TCP/IP模型 数据通信基础数字信号调制为模拟信号正交振幅调制QAM 模拟数据编码…

将指定文件夹下的所有文件内容按规则进行替换

当我们遇到想要将某个文件夹及其子文件夹下的文件内容按规矩进行批量替换时,挨个打开文件进行替换会很浪费时间,于是写了这个powershell脚本。 1、首先创建一个XXX.ps1的文件并用记事本打开。 2、将以下代码复制到创建的文件中。 $folderPath "E:&…

JNI实现一组字节数组转IP地址、IP地址转数组的函数

为什么单独实现,这是因为JAVA标准库提供的函数有性能问题,它会走DNS查询有网络IO,而且还是同步阻塞的,无论是客户端还是服务器,这都应该是不被允许的行为。 JNI实现: bytes_to_address_string(byte[] addre…

C++ 遍历map的3中方法

方法1 #include <iostream> #include <string> #include <map> using namespace std;int main() {map<string, string> nameList {{"张三丰", "武当山"},{"张无忌", "光明顶"},{"张二蛋", "…