复习打卡大数据篇——Hadoop MapReduce

目录

1. MapReduce基本介绍

2. MapReduce原理


1. MapReduce基本介绍

什么是MapReduce

MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。


MapReduce思想

核心思想是:先分再合,分而治之,就是把一个复杂的问题先分为若干个小问题,计算后再汇总。map负责“分”,reduce负责“和”,这样做的好处是若干个小问题可以并行同时处理,彼此几乎无依赖关系,每个任务处理完都是一个局部的结果,最后reduce进行全局汇总计算,以此提升效率。不过前提是任务可以拆分,拆分之后没有依赖关系。


该思想在大数据上的应用

对相互间不具有计算依赖关系的大数据计算任务,实现并行最自然的办法就是采取MapReduce分而治之的策略。首先Map阶段进行拆分,把大数据拆分成若干份小数据,多个程序同时并行计算产生中间结果;然后是Reduce聚合阶段,通过程序对并行的结果进行最终的汇总计算,得出最终的结果。需要特别注意不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算。

MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行。MapReduce处理的数据类型是<key,value>键值对。实际使用中考虑每个阶段输入输出 key和value是什么。


MapReduce优点与缺点

  • 优点:易于编程、良好的扩展性、高容错性、适合海量数据的离线处理
  • 缺点:实时计算性能差、不能进行流式运算

MapReduce官方word count案例演示

首先在HDFS的/wordcount/input里准备一份单词数据


里面是几行单词:

现在任务是统计每个单词出现了几次,而且要使用mapreduce实现,在Hadoop的share/hadoop/mapreduce目录下官方提供了hadoop-mapreduce-examples-3.3.0.jar的jar包来实现简单的示例。执行下行代码,执行wordcount案例:

hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount/input /wordcount/output

可以看到首先是Connecting to ResourceManager连接yarn的RM申请资源,然后执行mapreduce,而且是map先100%了reduce才100%。

在指定的目标目录下生成了2个文件,一个是成功标识,一个是分区文件,这里只有一个分区,点开后可以看到已经完成了单词计数。

在word count案例中map阶段把输入的数据经过切割,全部标记1,输出就是<单词,1>。中间还有个shuffle阶段,经过默认的排序分区分组,key相同的单词会作为一组数据构成新的kv对。reduce阶段处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数。

读取数据组件,写出数据组件MR框架已经封装好,读取数据组件InputFormat、输出数据组件OutputFormat。

2. MapReduce原理

mapreduce超详细全流程:

  1. 把输入所有文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认情况下,切片个数 = block块的个数,一个块默认是128M,每一个切片由一个MapTask处理,因此MapTask个数=切片个数=block块个数,其最终还是由文件个数和大小综合决定。
  2. 接下来每个map都相同,以一个map为例,其中读取数据的组件TextInputFormat是按照行进行读取的,一次读取一行数据,默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(单位是字节),value是本行的文本内容。
  3. 调用Mapper类中的map方法转换成我们的自己想要的kv结果 上阶段中每解析出来的一个<k,v>,调用一次map方法。每次调用map方法会输出零个或多个键值对。
  4. 按照一定的规则对第三阶段输出的键值对进行分区。默认是只有1个reducetask,只要用户不设置永远默认1个,用户也可以通过代码job.setNumReduceTasks(N)进行设置 。map输出的结果默认按照HashPartitoner哈希取模来分配分区编号,也就是map输出key的hashcode和reducetask个数取模的余数就是分区编号,虽然不能保证平均分配,但key一样的会分到一个区。
  5. 将MapTask的结果输出到默认大小为100M的环形缓冲区,保存的是key/value,Partition分区信息等,缓冲区数据大于0.8阈值触发溢写操作,将数据写入本地磁盘,溢写操作单独的线程进行处理的,如果单条数据过大超过80M则不经过缓冲区直接写入磁盘,在将数据写入磁盘之前需要对每个分区数据按key进行一次排序的操作(快速排序)。
  6. 把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件,合并小文件的时候同样进行排序(归并排序),最终产生一个有序的大文件,如果设置了combinclass(需要算法满足结合律),先在map端对数据进行一个压缩,再进行传输,map任务结束,reduce任务开始。
  7. ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定的阀值的时候,就会将数据写到磁盘之上。根据我们的hash取模规则相同的key会拉取到同一个Reduce节点,但是一个Reduce节点可以有多个key。
  8. 在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作,同时进行排序(归并排序),先基于内容做合并排序 , 当达到阈值溢写磁盘与spill溢写类似。
  9. 执行用户提供的reduce计算,键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到HDFS文件中。一个reduce输出一个文件。

Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

Python学习(2):注释、数字、文本、列表

1 关于注释 Python 使用井号#作为单行注释的符号&#xff0c; 使用三个连续的单引号’’或者三个连续的双引号"""注释多行内容。 2 数字 2.1 基本运算 解释器像一个简单的计算器&#xff1a;你可以输入一个表达式&#xff0c;它将给出结果值。 表达式语法很直观…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09;写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09; 平时处理Excel表格…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统&#xff1a; 数据来源是可以动态api配置的&#xff1a; 配置上面的api接口后&#xff0c;在数据过滤中进行数据格式的转化。 以上内容&#xff0c;来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下&#xff0c;需要更改…

ADC相关算法以及热敏电阻测温

目录 前言 一、平均值滤波算法 二、快速排序算法的使用 三、中位值滤波算法 四、二分查找法 4.1 二分查找法查找某个元素是否存在 4.2 二分查找法查找接近目标数值的元素的下标 五、NTC热敏电阻实现测温 5.1 分层设计 5.2 软件流程图 ​编辑 5.3 API接口及数据结构 5…

计算机的错误计算(一百九十四)

摘要 用两个大模型计算 其中&#xff0c;一个大模型通过化简&#xff0c;得出正确结果 0&#xff1b;而另外一个在化简过程中出现错误&#xff0c;得出了错误结果。 例1. 计算 下面是一个大模型的推导化简过程。 以上为一个大模型的回答。 下面是另外一个大模型的回复。 点评…

任意文件包含漏洞原理解析及演示

原理 文件包含漏洞&#xff1a;即file inclusion&#xff0c;意思是文件包含&#xff0c;是指当服务器开启allow_url_include选项时&#xff0c;就可以通过PHP的某些特性函数&#xff08;include()&#xff0c;require()和include_once()&#xff0c;requir_once()&#xff09;…

Linux系统之tree命令的基本使用

Linux系统之tree命令的基本使用 一、tree命令介绍二、tree工具安装三、tree命令帮助3.1 查询帮助信息3.2 tree命令帮助解释 四、tree命令的基本使用4.1 直接使用4.2 *限制显示的层级4.3 仅显示目录4.4 不显示隐藏文件4.5 显示文件大小4.6 彩色输出4.7 输出到文件4.8 输出不同格…

微信小程序性能优化、分包

性能优化是任何应用开发中的重要组成部分&#xff0c;尤其是在移动环境中。对于微信小程序而言&#xff0c;随着用户量的增加和应用功能的丰富&#xff0c;性能优化显得尤为关键。良好的性能不仅提升用户体验&#xff0c;还能增加用户留存率和应用的使用频率。我们将探讨如何在…

【星海随笔】删除ceph

cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献&#xff1a; https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表&#xff0c;在不同情况下显示不同的内容&#xff0c;按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种&#xff0c;单选项交互&#xff0c;一般使用射线检测&#xff1b;多选项交互&#xff0c;一般使用范围检测。第一人…

DVWA安装

这里讲的很清楚&#xff0c;如果是win10的话可能会出现端口80占用的情况&#xff0c; 使用管理员身份运行 cmdnet stop http //停止系统http服务sc config http start disabled //禁用服务的自动启动&#xff0c;此处注意等号后面的空格不可少

Oracle考试多少分算通过?

OCP和OCM认证的考试及格分数并不是固定的&#xff0c;而是根据考试的难度和考生的整体表现来确定。对于OCP认证&#xff0c;考生需要全面掌握考试要求的知识和技能&#xff0c;并在考试中表现出色才有可能通过。而对于OCM认证&#xff0c;考生则需要在每个模块中都达到一定的水…

18_HTML5 Web IndexedDB 数据库 --[HTML5 API 学习之旅]

HTML5 Web IndexedDB API 是一种在用户浏览器中存储大量结构化数据的机制&#xff0c;它允许存储和检索键值对&#xff0c;其中键可以是任何有效的JavaScript对象。IndexedDB 主要用于需要复杂查询的数据密集型Web应用。 IndexedDB 的特点&#xff1a; HTML5 Web IndexedDB A…

【Seata】分布式事务问题和理论基础

目录 1.分布式事务问题 1.1本地事务 1.2分布式事务 2.理论基础 2.1CAP定理 2.1.1一致性 2.1.2可用性 2.1.3分区容错 2.1.4矛盾 2.2BASE理论 2.3解决分布式事务的思路 1.分布式事务问题 1.1本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中…

【数据库初阶】Linux中库的基础操作

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 Linux…

数据结构与算法Python版 图

文章目录 一、图二、抽象数据类型图三、图的实现-邻接列表法 一、图 表示图的英文单词 painting&#xff1a;用画刷画的油画drawing&#xff1a;用硬笔画的素描/线条画picture&#xff1a;真实形象所反映的画&#xff0c;如照片等&#xff0c;如take pictureimage&#xff1a…

Word表格另起一页解决办法

Word表格另起一页解决办法 表格设置根据内容自动调整&#xff0c;取消指定高度第1步 第2步

Python数据可视化案例——折线图

目录 json介绍&#xff1a; Pyecharts介绍 安装pyecharts包? 构建一个基础的折线图 配置全局配置项 综合案例&#xff1a; 使用工具对数据进行查看?&#xff1a; 数据处理 json介绍&#xff1a; json是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的…