MapReduce的执行过程(以及其中排序)

Map阶段(MapTask): 切片(Split)-----读取数据(Read)-------交给Mapper处理(Map)------分区和排序(sort)
Reduce阶段(ReduceTask): 拷贝数据(copy)------排序(sort)-----合并(reduce)-----写出(write)

1、Map task读取:
框架调用InputFormat类的子类读取HDFS中文件数据,把文件转换为InputSplit。
默认,文件的一个block对应一个InputSplit,一个InputSplit对应一个map task。
一个InputSplit中的数据会被RecordReader解析成<k1,v1>。
默认,InputSplit中的一行解析成一个<k1,v1>。
默认,v1表示一行的内容,k1表示偏移量。
map:
框架调用mapper 类中的map方法,接收<k1,v1>输出<k2,v2>,有多少个<k1,v1>,就执行多少次map分区: 框架对mapp的输出进行分区,分区的目的是确定哪些<k2,v2>进入哪个reduce task。默认只有一个分区。
排序分组:框架对不同分区中的<k2,v2>进行排序分组.排序是按照k2进行排序。分组指的是相同k2的v2分到一个组中。分组不会减少<k2,v2>的数量。(快速排序)
combiner:可以在map task中对<k2,{v2}>执行reduce归约。
写入本地:框架对map的输出写入到Linux本地磁盘
2、reduce taskshuffle:
框架根据map不同分区中的数据,通过网络copy到不同的reduce节点合并
排序分组:每个reduce会把多个map传来的<k2,{v2}>进行合并排序分组(归并排序)
reduce:框架调用reduce<k2,v2s>,有多少个分组就回执行多少回reduce
写入HDFS:
框架对reduce输出的数据写入到hdfs中

快速排序:
个人理解:
就是归位,分区,递归
比如: 4,6,9,2,1,3,8 这个数组,要对它使用快速排序
首先,选第一个 4 对它进行归位 ,依次和4进行比较得到
左边: 2,1,3
右边:6,9,8
这样我们就的得到了 2,1,3,4,6,9,8
然后在对两边进行递归的操作。

python 实现

def partition(li, left, right):tmp = li[left]# 当两边搜索并没有重合的时候就进行双向查找while left < right:# 这一级两个判断条件# 因为li[right] >= tmp退出说明在right出找到了小于tmp的值,这样填到left就行了# 因为left < right退出是因为left右侧的所有值都大于tmp,left已经和right重合了while left < right and li[right] >= tmp:  # left有空缺,需要right小于tmp的值来填补right = right - 1  # 往前一位接着找li[left] = li[right]  # 将右边的数写到左边空缺处# 找到之后,right出现空缺,应从left找比tmp大的数填到rightwhile left < right and li[left] <= tmp:left = left + 1li[right] = li[left]# 当双向查找两边重合时侯,left=right,将值写入li[left] = tmpreturn lili = [5, 7, 4, 6, 3, 1, 2, 9, 8]
result = partition(li, 0, len(li)-1)
print(result)def quick_sort(li, left, right):if left < right:  # 至少两个元素mid = partition(li, left, right)# 拿到mid之后就能对两边的部分进行相同的整理quick_sort(li, left, mid-1)quick_sort(li, mid+1, right)li = [5,7,4,6,3,1,2,9,8]
quick_sort(li, 0, len(li)-1)

归并排序:
是将数组按 left mid right 划分成两个部分,要求每个部分是有序的,然后假设有两个指针指在,两个部分的第一个位置,开始比较,较小的被放到一个临时集合中,指针移动到下一个位置,然后继续比较,直到一方没有下一个值 ,另一方剩下的就是最大的一部分直接放在临时集合最后,整个排序完成。
python 实现

# 实现一次归并的过程
# 前提是已经拿到两个有序子的列表
def merge(li, low, mid, high):""":param li:列表:param low:第一段有序子列表起始位:param mid:第一段有序子列表终止位:param high:第二段有序子列表终止位:return:一次归并操作之后的整个列表"""# i,j开始分别指向两个有序子序列的起始位i = lowj = mid + 1ltmp = []  # 存储结果用while i<=mid and j<=high:  # 只要两个有序子序列都有数if li[i] < li[j]:ltmp.append(li[i])i = i + 1else:ltmp.append(li[j])j = j + 1# 两部分中有一部分拿光了while i <= mid:  # 说明后面的拿光了ltmp.append(li[i])i = i + 1while j <= high:  # 说明前面的拿光了ltmp.append(li[j])j = j + 1li[low:high+1] = ltmp  # 将结果写回去li = [0,2,4,6,8,1,3,5,7,9]
merge(li, 0, 4, len(li)-1)

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

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

相关文章

Vue2与Vue3的语法对比

Vue2与Vue3的语法对比 Vue.js是一款流行的JavaScript框架&#xff0c;通过它可以更加轻松地构建Web用户界面。随着Vue.js的不断发展&#xff0c;Vue2的语法已经在很多应用中得到了广泛应用。而Vue3于2020年正式发布&#xff0c;带来了许多新的特性和改进&#xff0c;同时也带来…

rpc原理与应用

IPC和RPC&#xff1f; RPC 而RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;又叫做远程过程调用。它本身并不是一个具体的协议&#xff0c;而是一种调用方式。 gRPC 是 Google 最近公布的开源软件&#xff0c;基于最新的 HTTP2.0 协议&#xff0c;并支持常见…

【SQLite】SQLite3约束总结

前面学习了SQLite数据库的常见使用方法&#xff0c;其中包含许多约束&#xff0c;常见的如NOT NULL、DEFAULT、UNIQUE、PRIMARY KEY&#xff08;主键&#xff09;、CHECK等 本篇文章主要介绍这些约束在SQLite中的使用 目录 什么是约束NOT NULL 约束DEFAULT约束UNIQUE约束PRIMA…

【设计模式-3.2】结构型——适配器模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;适配器模式&#xff1b; 插头转换器 适配器模式属于结构型设计模式&#xff0c;设计思想体现在结构上的。以插头转换器为例&#xff0c;当你需要给手机充电&#xff0c;但是眼前只有一个三孔插座&#xff0…

Java基本类型的高级使用方法详解

引言 Java中的基本数据类型&#xff08;primitive types&#xff09;是构建程序的基础&#xff0c;包括整型、浮点型、字符型、布尔型等。除了直接使用这些基本类型外&#xff0c;Java还提供了一些高级的使用方法&#xff0c;使得我们能够更灵活地处理基本类型数据。本文将深入…

二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)

目录 前言 分治算法 模拟二叉树代码 结点个数计算 错误方法 不便利方法 基于分治思想的方法 叶子结点个数 树的高度 第k层结点的个数 前言 在链式二叉树的前序、中序、后续遍历中我们模拟了一棵二叉树&#xff0c;并实现了它的前、中、后序遍历&#xff0c;现在我们来…

UE4 .ini文件使用

在需要给配置文件的类中加上config标签&#xff0c;当然变量也要加 在项目的Config下&#xff0c;新建一个Default类的UCLASS中config等于的名字&#xff0c;这里结合上面截图就是DefaultTest 在下面写入 [/Script/项目名/类名] 然后写变量以及对应的值即可

【Angular 开发】Angular 信号的应用状态管理

自我介绍 做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构…

智能机器人在新材料方面遇到的挑战

智能机器人在新材料方面面临的挑战包括但不限于以下几点&#xff1a; 新材料的研发&#xff1a;机器人需要使用新材料来提高其性能和功能。然而&#xff0c;新材料的研发需要大量的时间和资金&#xff0c;同时还需要具备高超的技术和专业知识. 材料的可靠性&#xff1a;机器人…

GO面试题系列

1.GO有哪些关键字 2.GO有哪些数据类型 3.Go方法与函数的区别 在Go语言中&#xff0c;方法和函数是两个不同的概念&#xff0c;尽管它们在某些方面有相似之处。下面是它们的主要区别&#xff1a; 定义位置&#xff1a; 函数&#xff1a; 函数是独立声明的&#xff0c;它们不…

python数据分析总结(pandas)

目录 前言 df导入数据 df基本增删改查 数据清洗 ​编辑 索引操作 数据统计 行列操作 ​编辑 df->types 数据格式化 ​编辑 日期数据处理 前言 此篇文章为个人python数据分析学习总结&#xff0c;总结内容大都为表格和结构图方式&#xff0c;仅供参考。 df导入数…

Vue3使用vue-baidu-map-3x百度地图

安装vue-baidu-map-3x&#xff1a; // vue3 $ npm install vue-baidu-map-3x --save// vue2 $ npm install vue2-baidu-map --save 全局注册/局部注册&#xff1a; import { createApp } from vue import App from ./App.vue import BaiduMap from vue-baidu-map-3xconst app …

综述 2017-Genome Biology:Alignment-free sequence comparison

Zielezinski, Andrzej, et al. "Alignment-free sequence comparison: benefits, applications, and tools." Genome biology 18 (2017): 1-17. https://genomebiology.biomedcentral.com/articles/10.1186/s13059-017-1319-7 被引次数&#xff1a;476应用问题&…

curl 18 HTTP/2 stream

cd /Users/haijunyan/Desktop/CustomKit/KeepThreadAlive/KeepThreadAlive //Podfile所在文件夹 git config --global https.postBuffer 10485760000 git config --global http.postBuffer 10485760000 pod install https://blog.csdn.net/weixin_41872403/article/details/86…

linux命令积累

1.查找指定目录下第二层目录&#xff0c;一年前的文件 find $dir -maxdepth 1 -type d -mtime 365 2./data/att/dir1软连接到/data1/att/dir1 硬连接和软连接的区别 硬连接 ln file1 file2 1.硬连接不能对目录进行链接。 2.硬连接修改一个文件&#xff08;不论修改哪方文件&…

top K问题(借你五分钟)

目录 前言 top K问题 模拟数据 建堆 验证&#xff08;简单了解即可&#xff09; 最终代码 调试部分 前言 在大小堆的实现&#xff08;C语言&#xff09;中我们讨论了堆的实际意义&#xff0c;在看了就会的堆排序&#xff08;C语言&#xff09;中我们完成了堆排序&#…

银河麒麟本地软件源配置方法

软件源介绍 软件源可以理解为软件仓库&#xff0c;当需要安装软件时则会根据源配置去相应的软件源下载软件包&#xff0c;此方法的优点是可以自动解决软件包的依赖关系。常见的软件源有光盘源、硬盘源、FTP源、HTTP源&#xff0c;本文档主要介绍本地软件源的配置方法&#xff…

功能强大的屏幕录制和剪辑工具Camtasia Studio 2024 中文版

Camtasia Studio 2024 是一款功能强大的屏幕录像工具&#xff0c;集视频录制、剪辑、编辑和播放于一体的多功能屏幕录制软件&#xff0c;Camtasia Studio 2024操作简单&#xff0c;它能够轻松为您将屏幕上的所有声音、影音、鼠标移动的轨迹和麦克风声音全部录制下来&#xff0c…

分布式架构原理与实践读书笔记

分布式架构原理与实践读书笔记 IT 软件架构的更迭&#xff1a;从单体架构&#xff0c;到集群架构&#xff0c;到现在的分布式和微服务架构。 分布式架构具有分布性、自治性、并行性、全局性等特点。 为了应对请求的高并发和业务的复杂性&#xff0c;需要对应用服务进行合理拆…

springboot(ssm畅游游戏销售平台 游戏电商系统Java系统

springboot(ssm畅游游戏销售平台 游戏电商系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数…