MapReduce笔记

news2024/11/16 13:53:17

总计:切片就是对一个文件按逻辑进行切片,默认每128m为一个切片,不是物理切片,每个切片对应着一个mapTask进行处理。而且切片是针对每一个文件进行切片的,即一个文件一个文件切片,不是把所以待处理的文件总量放一起进行切片。

3:遍历一个文件ss.txt,这里要注意,每一个文件都是单独切片。

C:切片大小=blocksize,即128M

d:每次切片时,都会判断剩下的数据是否大于块(128M)的1.1倍,如果大于则继续切片,不大于就把剩下的数据划分为一个切片

常用的几个切片机制:

1.FileInputFormat、TextInputFormat、CombineTextInputFormat

shuffle 阶段即Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle阶段。

MapReduce是如何将数据进行分区的:

默认情况下,用户没法控制对key存储的分区,但可以继承Partitoner抽象类重写getPartiton方法,自定义控制key存储到哪个区,同时可以指定NumReduceTask的数量,如果不指定NumReduceTask的数量的话,系统默认数量为1,那么不会对key存储进行分区,都存放在一个文件里。

自定义Partitioner,重写分区代码逻辑,将手机号前三位不同进行划分区域,一共有5个分区。

job.setNumReduceTasks();设置ReduceTask的数量有规则,如下:

注意:第(4)点很重要,分区号必须从零开始,逐一累加,中间不能跳。

Combiner合并的过程是在环形缓冲区在写入磁盘过程之间的一个合并过程,将排序好的数据进行两次Combiner合并,第一次是将每一个分区排序好的数据进行第一次合并,第二次是将每一个分区排序好的数据进行第二次合并。因为第一次可能只合并了其中的一小部分,第二次将每一次合并的那一小部分再合并成总的数据。

注意:1.Combiner不能用于求数据的平均值,因为统计前和统计后进行除法会有误。但可以用于数据的加减,因为统计前和统计后不会对加减造成影响。

  1. 如果程序中没有了Reduce的话,那就别设置Combiner了,因为shuffle是在map输出和reduce输入之间的,没有reduce的话,数据直接就从map输出了,不会有shuffle的阶段。
  2. 实际上,reduce就相当于Combiner了,reduce的功能和Combiner的功能是一样的,所以直接调用reduce就可以完成Combiner的合并过程:job.setCombinerClass(wordCountReducer.class)

Reducer处理好的数据并不是直接写入文件,而是到OutPutFormat流那里,由RecordWriter方法进行写入文件中,所以我们可以自定义OutPutFormat来决定Reducer的数据是写入哪里。

MapTask的工作机制:

五个阶段:Read阶段、Map阶段、Collect阶段、溢写阶段、Merge阶段

(1)Read阶段:默认用TextInputFormat进行读取数据,用RecordReader中的reader()方法进行读取,以(K,V)的形式传入Mapper中。

(2)Map阶段:map阶段就是用户在map方法中自定义业务代码,来实现需要的业务,用context.write()写(K,V)数据。

(3)Collect阶段:map写出的数据进入环形缓冲区,环形缓冲区一半存元数据,一半存数据,默认为100M,当数据写入环形缓冲区80%的时候,开始反向写,在环形缓冲区的数据会进行分区和排序(环形缓冲区的数据是存放在内存的)。

(4)溢写阶段:当环形缓冲区的数据达到80%的时候或将数据全部读完之后,会将分区且区内有序的数据溢写到磁盘中。

(5)Merge阶段:溢写到磁盘的数据会进行归并排序,将数据排序好。

ReduceTask工作机制:

三个阶段:Copy阶段、Sort阶段、Reduce阶段

  1. Copy阶段:ReduceTask从MapTask上拉取(拷贝)数据,并对数据大小进行判断,如果超过一定阈值,则写到磁盘上,否则直接写到内存上。
  2. Sort阶段:拿到数据之后,ReduceTask会启动两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。由于各个MapTask已经对数据进行了局部的排序,所以ReduceTask只需要对所有数据进行一次归并排序即可。
  3. Reduce阶段:根据业务自定义reduce()函数,将计算的结果写到HDFS上。

过滤掉不需要的数据,留下需要的数据,这里的代码是过滤掉一行数据的长度低于11的数据。

3.8 MapReduce开发总结

1)输入数据接口:InputFormat

(1)默认使用的实现类是:TextInputFormat

(2)TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回。

(3)CombineTextInputFormat可以把多个小文件合并成一个切片处理,提高处理效率。

2)逻辑处理接口:Mapper

用户根据业务需求实现其中三个方法:setup() 初始化   map()用户的业务逻辑  cleanup () 关闭资源

3Partitioner分区

(1)有默认实现 HashPartitioner,逻辑是根据key的哈希值和numReduces来返回一个分区号;key.hashCode()&Integer.MAXVALUE % numReduces

(2)如果业务上有特别的需求,可以自定义分区。

4Comparable排序

(1)当我们用自定义的对象作为key来输出时,就必须要实现WritableComparable接口,重写其中的compareTo()方法。

(2)部分排序:对最终输出的每一个文件进行内部排序。

(3)全排序:对所有数据进行排序,通常只有一个Reduce。

(4)二次排序:排序的条件有两个,实现WritableComparable接口,重写其中的compareTo()方法。。

5Combiner合并

Combiner合并可以提高程序执行效率,减少IO传输。

但是使用时必须不能影响原有的业务处理结果。(加减可以,乘除不行,比如求平均值不行)

提前聚合map,是解决数据倾斜的一个方法

6)逻辑处理接口:Reducer

用户根据业务需求实现其中三个方法:setup() 初始化 reduce()用户的业务逻辑  cleanup () 关闭资源

7)输出数据接口:OutputFormat

(1)默认实现类是TextOutputFormat,功能逻辑是:将每一个KV对,向目标文本文件输出一行。(按行输出到文件)

(2)用户还可以自定义OutputFormat。

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

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

相关文章

游戏运营是什么?运营专员需要具备什么能力?

游戏运营主要是负责公司游戏的运营计划制定,包含通过用户对游戏的反馈和数据分析找出产品所存在的问题,并进行优化。通过各种促销活动、节假日实行游戏付费内容来刺激消费,实现游戏和品牌双赢的打造过程。 游戏运营分很多种:用户…

python获取数据类型

之前将字面量时就将到过 数据是有类型的 python的数据类型还挺多的 而现阶段 我们主要接触了 字符串 浮点数 正整数 对应的类型 都有自己的名称 字符串 string 浮点数 float 正整数 int python提供了一个type语句 用于验证数据类型 我们打开编辑工具 编写代码如下 print(typ…

每日一问-ChapGPT-20230416-中医基础-经络

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230416-中医基础-经络人体的经络有哪些,有什么规律,怎么记忆问诊的具体细节当日总结每日一问-ChapGPT系列起因 近来看了新闻,看了各种媒体,抖音,官媒&#xff0c…

FPGA与ASIC的区别

先来看张图,本图体现出了集成电路产业链:设计业、制造业、封测业。 关于制造、封装测试我们看两张图稍作了解即可: 数字IC ASIC设计流程及EDA工具: (1)了解数字IC设计:在VLSI时代&#xff…

MySQL数据库之表的增删改查(基础)

目录1 新增(Create)1.1 单行数据 全列插入1.2 多行数据 全列插入2 查询(Retrieve)2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 别名2.5 去重: DISTINCT2.6 排序: ORDER BY2.7 条件查询: WHERE2.8 分页查询: LIMIT3 修改…

基于html+css的图片展示10

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

10个有趣python模块

一、说明 Python 是一种高级、解释型和通用动态编程语言,侧重于代码的可读性。它在许多组织中使用,因为它支持多种编程范例。它还执行自动内存管理。它是世界上最受欢迎的编程语言之一。这是有很多原因的: 这很容易学习。 它超级多才多艺。 …

腾讯云轻量应用服务器性能如何?测评来了

腾讯云轻量应用服务器性能如何?CPU型号主频、内存、公网带宽和系统盘存储多维对比,轻量应用服务器会不会比云服务器CVM性能差?相对于CVM云服务器轻量服务器更适合轻量级的应用,轻量服务适合中小企或个人开发者用于搭建We网站b应用…

svn 安装 和配置idea

SVN客户端安装 一、SVN客户端安装 1、下载安装包地址:svn下载地址 此安装包是英文版的,还可以下载一个语言包,在同界面的下方 这里可以下载 一个汉化的 语言包(在下载界面向下翻即可) 下载完成之后,就会…

JavaSE异常

文章目录JavaSE异常一、异常的概念二、异常的体系结构三、异常的分类四、异常的处理五、自定义异常类JavaSE异常 一、异常的概念 在Java中,将程序执行过程中发生的不正常行为称为异常 常见逻辑异常: 算数异常 System.out.println(10 / 0); // 执行结…

关于分布式唯一ID的思考-雪花算法及美团Leaf方案详解

引言 首先&#xff0c;我们看一下日常开发中常见的雪花算法工具类&#xff1a; 引入hutool <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</version> </dependency>工具类…

推荐10个AI学习、工作用的有趣网站

来源&#xff1a;towardsai 作者&#xff1a;学姐 编辑&#xff1a;学姐 1.VERSE BY VERSE 帮你写诗 https://sites.research.google/versebyverse/ 2.Let’s Enhance 照片放大增强 https://letsenhance.io/ 让扭曲和模糊的照片变得漂亮&#xff0c;用这个网站实现增强&am…

A01-固件库开发模板

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;Silence Lamb &#x1f4d6; 本章内容&#xff1a;【固件库开发模板】 Silence-STM v1.0.0 基于固件库开发模板 一、前提准备 &#x1f680;从ST官网获取stm32f103标准例程固件库&#x1f680; 参考文档 1.1&#x1f333;…

[HAOI2011]Problem b(莫比乌斯反演)

[HAOI2011]Problem b 题目链接&#xff1a;https://www.luogu.com.cn/problem/P2522 题目描述 对于给出的 nnn 个询问&#xff0c;每次求有多少个数对 (x,y)(x,y)(x,y)&#xff0c;满足 a≤x≤ba \le x \le ba≤x≤b&#xff0c;c≤y≤dc \le y \le dc≤y≤d&#xff0c;且 …

【CE】Mac下的CE教程Tutorial:进阶篇(第7关:代码注入)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第7关&#xff1a;代码注入翻译非代码注入完成任务代码注入完成任务&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第…

PADS生成SMT坐标文件

做SMT时&#xff0c;除了“gerber文件”外&#xff0c;还要提供 “BOM文件” 和 “坐标文件”。 “gerber文件” 和 “BOM文件”&#xff0c;前面都有介绍过了&#xff0c;现在详细说一下生成“坐标文件”的方法。 贴片厂家提供了操作教程&#xff0c;如下&#xff1a; 所以&a…

Leetcode力扣秋招刷题路-0289

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 289. 生命游戏 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&a…

应届生,实力已超6年,太卷了!

你好&#xff0c;我是田哥今晚上&#xff0c;给一位朋友做模拟面试&#xff0c;原本说好的90分钟左右&#xff0c;结果整了2个多小时。很多人估计也很好奇&#xff0c;我们这两个多小时聊聊什么&#xff0c;下面我给大致总结一下&#xff1a;面试技巧面试中&#xff0c;我们回答…

企业招采系统实现方案(SRM系统)

企事业数字化转型专家&#xff0c;提供各类应用解决方案。您身边的赋能小助手&#xff01; 文章目录前言一、当下采购的痛点二、解决方案-供应商管理1.供应商管理三、解决方案-企业询价、供应商报价管理四、解决方案-采购订单五、送货、到货、订单管理总结前言 随着各类产业链…

JS实用技巧断点调试详解

调试能力是一个程序员的生存根本&#xff0c;可是很多初学者却忽视调试。今天我们就来讨究一下JS的调试技巧。本文章将会详细列举JS相关的各种实用调试技巧。 如果您是JS的初学者&#xff0c;那么这篇文章将对您有很大的帮助。为什么要调试&#xff1f;程序就是函数堆砌起来的…