复习打卡大数据篇——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

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

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

相关文章

Java基础知识(四) -- 面向对象(下)

1.类变量和类方法 1.1 类变量背景 有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩? 思路分析: 核心在于如何让变量count被所有对象共享 public class Child {private String name;// 定义静态变量(所有Child对象共享)public static int count 0;p…

SpringBoot中使用TraceId进行日志追踪

**查询日志的痛点&#xff1a;**项目中每当我们查询日志的时候都是看前端请求什么接口&#xff0c;根据一些关键字进入服务器查询日志中是否有这个关键字&#xff0c;然而这个关键字在日志里面并不是唯一的&#xff0c;所以要生成一个唯一的标识&#xff0c;每一次请求都是唯一…

C++类与对象上

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题 例如洗衣服&#xff1a; C是基于面向对象的&#xff0c;关注的是对象&#xff0c;讲一件事拆分成不同的对象&#xff0c;靠对…

向量组学习

向量组的秩及其线性组合 线性相关性 先看a1,a2 如果这两个向量不对应成比例的话,那必然内部不可能存在多余的向量,也就是无关. 主元所在的列都是独立向量 ,最大无关组就是b1,b2,b4,但这个是初等行变换后的,题目要的是A的,与之对应的就是a1,a2,a4 方程组解的结构

使用VS Code开发ThinkPHP项目

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 ThinkPHP 8开发环境安装-CSDN博客 安装ThinkPHP项目的IDE 常用的集成开发环境&#xff08;IDE&#xff09;包括P…

软件耦合类型及相关说明

文字叙述太麻烦了&#xff0c;此内容个人觉得上图可能大家更容易接受。 ——话不多说&#xff0c;直接上图。

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后&#xff0c;Design Compiler内置的HDL Compiler工…

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 串操作 源操作数使用si&#xff0c;默认段为DS&#xff0c;可段超越 目的操作数使用di&#xff0c;默认段为ES&#xff0c;不可段超越 串方向 串方向由D…

TCP off-path exploits(又一个弄巧成拙的例子)

承接前面几篇文章的观点&#xff0c;本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题&#xff0c;会引入多么大的麻烦&#xff0c;这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit&#xff0c;序列号只有 32bit&#xff0c;这意味着在强大攻击算力面前&…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA&#xff08;自调制特征聚合模块&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。随着深度学习在计算机视觉中的不断进展&#xff0c;目标检测任务也在快速发展。YOLO系列模型&#xff08;You Onl…

大表:适用于结构化数据的分布式存储系统

大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行&#xff08;Row&#xff09;2.2 Column Families&#xff08;列族&#xff09; 2.2.1 设计2.2.2 column key 的格式&#xff1a;family:qualifier2.2.3 访问控制和磁盘/内存记账&#xff08;acco…

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中&#xff0c;咖啡早已不仅仅是提神醒脑的饮品&#xff0c;更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计&#xff0c;通过将咖啡与情感、魔法元素相结合&#xff0c;创造出一个充满想象力和治愈感…

xterm遇到的问题及解决方案

xterm遇到的问题及解决方案 /r插入终端导致的之后插入的数据覆盖了改行头部的数据 问题说明 如图所示&#xff0c;当在一行输入的候&#xff0c;输入的l插入到了改行的头部。 查看ws返回数据 可见ws返回的信息存在\r字符&#xff0c;在xterm.js中\r是回车字符的意思&…

Chrome被360导航篡改了怎么改回来?

一、Chrome被360导航篡改了怎么改回来&#xff1f; 查看是否被360主页锁定&#xff0c;地址栏输入chrome://version&#xff0c;看命令行end后面&#xff08;蓝色部分&#xff09;&#xff0c;是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步&#xff1a…

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述&#xff1a;在blender中合并的模型导出为glb&#xff0c;在threejs中导入仍显示多个mesh&#xff0c;并不是统一的整体&#xff0c;导致需要整体高亮或者使用DragControls等不能统一控制。 原因&#xff1a;模型有多个材质&#xff0c;在blender中合并的时候&#xff0c;…

C语言----输入输出

目录 输入输出 1.按格式输入输出 2. 按格式输入 3. 按字符输入输出 输入&#xff1a; 输出&#xff1a; 垃圾字符回收 1. 通过空格回收 2. %*c 3.getchar&#xff08;&#xff09; 强制类型转换 输入输出 分为按格式输入输出和按字符输入输出 1.按格式输入输出 通…

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

一维、线性卡尔曼滤波的例程(MATLAB)

这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能&#xff0c;用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出** 源代码 总结 一维线…

【Compose multiplatform教程13】【组件】Column和Row组件

查看全部组件文章浏览阅读495次&#xff0c;点赞17次&#xff0c;收藏12次。alignment。https://blog.csdn.net/b275518834/article/details/144751353 Column 功能说明&#xff1a;将子组件按照垂直方向依次排列&#xff0c;能够设置组件之间的间距、对齐方式等属性&#xff…