切片机制和MR工作机制
切片机制
默认的切片大小和块大小一致,切片的个数决定了MapTask的个数。
数据倾斜问题:如果某个切片的大小太小,会浪费了MapTask申请的CPU资源。
如果剩余数据长度大于128*1.1, 就切片成2份,否则就不进行切分了。
InputFormat基类
-
TextInputFormat:
TextInputFormat
是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。 -
CombineTextInputFormat:
CombineTextInputFormat
用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。 -
CombineTextInputFormat切片机制
- 虚拟存储过程:将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较;
- 小于maxSplitSize:逻辑上划分1块
- 大于2*maxSplitSize:以最大值划分一块
- 介于之间时:均分为2块
- 切片过程
- 判断虚拟文件大小是否大于max切片大小
- 大于时,单独形成一个切片
- 小于时,跟下一个虚拟存储文件进行合并,共同形成一个切片。
- 虚拟存储过程:将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较;
MapReduce工作机制
Map阶段
- 索引id是哈希和字典序的结合,形象上可以将索引id看做key来进行快排。
- 对索引id对索引进行快速排序
- 写入磁盘,需要按照分区进行写入,环形缓冲区排序后数据整体是有序的,分区写入时局部也是有序的。写入时是通过索引在环形缓冲区的右侧数据部分查找对应的数据。
- 环型缓冲区一般为100M,实际是指Map的读取数据写入缓冲区和缓冲区索引快排后溢写磁盘的那种往返行为,两者的方向是相反的,一般来说进行快排和溢写(是追加写)的速度是很快的,可以保证写入数据无需等待同时进行,提升效率。
- 先填充数据,到达80%时停止填充,进行快速排序后溢写数据到磁盘中,同时数据继续反向填充。
- Map在进行溢写后会产生很多局部有序的分区文件,将数据交付给Map前会先进行归并排序,将局部有序的分区文件合并为整体有序的分区数据。
Reduce阶段
copy
:从不同Map中拉取分区后的数据sort
:由于是不同Map中的数据,仍然是局部有序,整体无序的数据,Reduce需要将其进行归并排序成为整体有序的数据。reduce
:进行数据的计算
Shuffle机制
Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。
- Combiner操作:归并排序后有一次默认的合并操作,第二次合并需要考虑溢写的次数,由于combine合并时需要从磁盘读取数据,数据数量太少时进行合并效率并不高。
- Combiner操作是将计算过程提前到了Map阶段,由于Map阶段的数据量较少,一般情况下每次最多128M的数据,减少Reduce阶段的压力。
- 进行combiner操作后的结果会一部分放入内存,一部分放入磁盘,后续使用时需要分别进行归并排序合并总体结果,公共需要进行3次归并排序。
- 当设置reduceNum为0时,只有map阶段,没有reduce阶段,就没有shuffle阶段。
Partition分区
分区器
- 默认分区器
- 自定义分区器
机制
- 分区操作在map阶段之后
- key.hashCode() & Integer.MAX_VALUE去除负数
- reduce阶段中有默认分区器:
- 相同的key永远进入同一个分区
- 不同的key有可能进入不同分区
- 分区无论怎么算都不会有负数诞生,已经不会超过reduce的上限
- 如果对输出结果有具体的分区要求,需要定义分区,继承Partition类
- 根据业务逻辑定义分区数量
- 分区数量确定时,分区号已经确定了
- 如果分区数量大于返回的分区号,会导致reduce空转
- 如果reduce的数量小于返回的分区号,会报错
- 当分区数为1时,代码会使用默认的分区器
Combiner合并
- Combiner是MR程序中的Mapper和Reducer之外的一种组件
- Combiner组件的父类就是Reducer
- Combiner和Reducer的区别在于运行的位置
- Combiner是在每一个MapTask所在的节点运行
- Reducer是在ReduceTask节点运行 - 本质上代码都是一样的,可以直接使用原本的Reduce类作为Combiner类
- 如果将ReduceTask的数量设置为0,Combiner将直接不执行,输出结果连排序都没有做,在map阶段直接退出了。即shuffle和reduce两个过程都没有执行。
OutputFormat数据输出
基本上不需要自己实现,有很多现成的工具类,比如Flume, 除非您的公司有自己的文件系统,否则不需要自己操心。
总结
- MapTask做了什么?
- input = 切割 + 读取
- map:索引快排后缓冲区往返溢写
- sort:快排后写入磁盘
- ReduceTask做了什么?
- copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
- sort阶段:对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
- reduce阶段:进行数据的规约合并并将结果写入HDFS。
相关文章:

切片机制和MR工作机制
切片机制 默认的切片大小和块大小一致,切片的个数决定了MapTask的个数。 数据倾斜问题:如果某个切片的大小太小,会浪费了MapTask申请的CPU资源。 如果剩余数据长度大于128*1.1, 就切片成2份,否则就不进行切分了。 InputFormat基…...

【postgresql 基础入门】基础架构和命名空间层次,查看数据库对象再也不迷路
postgresql 基础架构 专栏内容: postgresql内核源码分析手写数据库toadb并发编程 开源贡献: toadb开源库 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤&…...

是的,决定放弃算法去机器学习了
可是梦想啊!~她永存心间!!! 我啊~本是执着于这些算法的怪咖,梦想是icpc,ccpc~ 可是啊~ 在以后的科研和工作中,这些算法很多都是用不到的,学习算法更重要的目的是锻炼编程能力和分析…...

Python 03(循环语句)
Python03(循环语句) 文章目录 Python03(循环语句)一、while语句二、while实现猜数字三、while循环的嵌套while循环嵌套实例需求: 四、for循环1、什么 是for循环2、语法3、执行流程4、for循环的基本使用5、range()函数6…...

安科瑞铁塔基站能耗监控解决方案
安科瑞 华楠 1 背景概述 5G发展,基站先行。5G基站的选址建设,是保证5G信号覆盖的基础,因此5G基站建设是5G产业布局的一部分,也是5G成熟的基础。 2G、3G、4G均是低频段信号传输,宏基站几乎能应付所有的信号覆盖。但由…...

操作系统-线程复用
操作系统执行线程复用的过程涉及到线程调度和管理。线程复用是指操作系统能够有效地重用现有的线程来执行新的任务,而不必每次都创建新线程。这有助于减少线程创建和销毁的开销,提高系统性能。下面是操作系统如何执行线程复用的关键步骤: 线程…...

通达信自定义副图行业指标K线指标 HYZS_QD
行业指数:HY_INDEXC,NODRAW; DRAWKLINE(HY_INDEXH,HY_INDEXO,HY_INDEXL,HY_INDEXC); MA5:MA(HY_INDEXC,5),COLORWHITE; {MA10:MA(HY_INDEXC,10),COLORYELLOW,LINETHICK2}; DRAWTEXT_FIX(1,1,1,1,STRCAT(STRCAT(CON2STR(HY_INDEXADV,0),/),STRCAT(CON2STR(HY_INDEXDEC,0), ))),…...

MDK-Keil AC6 Compiler屏蔽特定警告
最近在使用STM32CubeMX生成MDK工程是,使用了 AC6 版本的编译器进行编译代码,然后发现了一些警告,但是在 AC5 版本下编译又正常。于是研究了下怎么屏蔽特定的警告,这里记录一下。 1. Keil AC6屏蔽特定警告 遇到的警告如下&#x…...

计算机网络的故事——了解Web及网络基础
了解Web及网络基础 文章目录 了解Web及网络基础一、使用 HTTP 协议访问 Web二、HTTP 的诞生三、网络基础 TCP/IP四、与 HTTP 关系密切的协议 : IP、TCP 和 DNS 一、使用 HTTP 协议访问 Web 根据Web浏览器指定的URL,从对应的服务器中获取文件资源,从而显…...

[系统安全] 五十三.DataCon竞赛 (2)2022年DataCon涉网分析之恶意样本IOC自动化提取详解
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…...

自动驾驶——估计预瞄轨迹YawRate
1.Introduction 在ADAS控制系统中,通常根据预瞄距离x去估计横向距离y,有如下关系: y a0 a1 x a2 * x^2 a3 * x^3 ,那么现在有个需求,希望根据上述x和y的关系,去估计规划预瞄轨迹yawRate 2.How to es…...

PMP证书考下来要多少费用?
PMP考试共有三项费用:分为考前费用、考后费用和续证费用。 第一项是考前费用: 1、培训费用,在英文报名时需要填写培训公司名称和35学时的培训证明。一般的培训公司收费不一,有些公司大概是三千元左右,而有些公司可能…...

C动态分配
动态分布与静态发布: 静态分配 1、 在程序编译或运行过程中,按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区,一般以数组的形式。 4、 按计划分配。 动态分配 1、在程序运…...

C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)
了解程序环境和预处理 前言:一、程序环境二、编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 三、预处理3.1 预定义符号3.2. #define的使用3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##的用途3.2.5 带副作用的宏参数3.2.6…...

Docker部署EMQX
1、简介 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是轻量的 (Lightweight)、发布订阅模式 (Pu…...

Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon
Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon 目前主流的负载均衡方案有两种,一种是集中式均衡负载,在消费者与服务提供者之间使用独立的代理方式进行负载,比如F5、Nginx等。另一种则是客户端自己做负载均衡,根据自己的请求做负载,Ribbon就属于客户端自…...

好玩的js特效
记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下: <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…...

java实现带有html格式和附件的符合RFC822规范的eml格式的信件原文组装
1. 传递html格式的eml信件正文 html传递就是解析成带有< html>标签的字符串在正文中传递即可 From:综合运行平台 to:111qq.com // 重点是格式设置成text/html 编码的话需要设置成UTF-8,不然可能直接在正文中展示html标签,为不是解析成具体的样式…...

如何使用PyTorch训练LLM
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 像LangChain这样的库促进了上述端到端AI应用程序的实现。我们的教程介绍 LangChain for Data Engineering & Data Applications 概述了您可以使用 Langchain 做什么,包括 LangChain 解决的问题…...

uniapp 手机 真机测试 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可
uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 (启动开发者模式) 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四, 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可...

RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、…...

【List篇】使用Arrays.asList生成的List集合,操作add方法报错
早上到公司,刚到工位,测试同事就跑来说"功能不行了,报服务器异常了,咋回事";我一脸蒙,早饭都顾不上吃,要来了测试账号复现了一下,然后仔细观察测试服务器日志,发现报了一个…...

c++的类模板里,可以直接为静态变量赋值么?
一直以来,咱们学的是,给类模板里的静态变量赋值,要在类外面。但对于类常量,则可以直接在定义时赋值。起因是看STL源码时有这么的写法,又验证了一下。 但是在类模板里直接定义静态活动变量是不可以的,即去…...

【录用案例】CCF-C类,1/2区SCIEI,3个月14天录用,30天见刊,11天检索
计算机科学类SCI&EI 【期刊简介】IF:5.5-6.0,JCR1/2区,中科院2区 【检索情况】SCI&EI 双检(CCF-C类) 【征稿领域】边缘计算、算法与机器学习的结合研究 录用案例:3个月14天录用,录用…...

qt day 3
1.完成自定义的记事本文件的保存功能 ------------------------------------------------------------------------- widget.cpp ------------------------------------------------------------------------- #include "widget.h" #include "ui_widget.h"…...

SpotBugs检查java代码:在整数上进行没有起任何实际作用的位操作(INT_VACUOUS_BIT_OPERATION)
https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#int-vacuous-bit-mask-operation-on-integer-value-int-vacuous-bit-operation 在整数上进行无用的与、异或操作,实质上没有做任何有用的工作。 例如:v & 0xffffffff 再例如&…...

javaWeb录入数据异常,mysql显示错误
由于项目,需要输入 电脑的mac地址 ,在web页面中进行录入,但是某个同事录入一直有问题,数据查询时使用 in 或者 都查询不到 通过like %% 可以查询到,非常奇怪,请广大网友不吝赐教. 通过 toHex 进行显示发现 数据开头多了 E2808E...

Vue + Element UI 前端篇(十):动态加载菜单
Vue Element UI 实现权限管理系统 前端篇(十):动态加载菜单 动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的。 我们在这里就用上一篇准备好的数据格式Mock出模…...

图的应用(最小生成树,最短路径,有向无环图)
目录 一.最小生成树 1.生成树 2.无向图的生成树 3.最小生成树算法 二.最短路径 1.单源最短路径---Dijkstra(迪杰斯特拉)算法 2.所有顶点间的最短路径---Floyd(弗洛伊德)算法 三.有向无环图的应用 1.AOV网(拓扑…...

python正则表达式笔记2
由 \ 和一个字符组成的特殊序列在以下列出。 如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,\$ 匹配字符 $. \number 匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。 比如 (.) \1 匹配 the the 或…...