原来这就是MapReduce!

MapReduce shuffle过程详解! 目录一、MR的shuffle过程二、Map shuffle三、Reduce shuffle 一、MR的shuffle过程 MR的shuffle过程: input -> map -> shuffle -> reduce ->output MR的原理图: 二、Map shuffle 1.map()的数据会写入到内存(环形缓冲区:默认大小:100mb),当数据达到缓冲区总容量的80%(阈值)时,会将我们的数据spill到本地磁盘 1)分区(partitioner):分 阅读详情

本文公众号来源:互联网侦察   作者:channingbreeze


最近我也在入门大数据相关的基础,这篇文章非常通俗易懂讲解了什么是MapReduce,推荐阅读!

640?wx_fmt=jpeg


找到工作后的一小段时间是清闲的,小史把新租房收拾利索后,就开始找同学小赵,小李和小王来聚会了。


吃过午饭后,下午没事,四个人一起商量来打升级。打升级要两副扑克牌,小史就去找吕老师借牌去了。


640?wx_fmt=jpeg


【多几张牌】


640?wx_fmt=jpeg

吕老师给小史拿出一把牌。


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

【map-reduce】


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

(注意,如果有两幅完整的牌,那么小赵手中的黑桃A一定不少于2张,因为其他人手中已经不可能有黑桃A了,图中的数据只是演示。)

640?wx_fmt=jpeg

【hadoop中的map-reduce】

640?wx_fmt=jpeg

吕老师:过程看上去很简单,但是要实现并不简单,要考虑很多异常情况,幸好开源项目hadoop已经帮我们实现了这个模型,我们用它很简单就能实现map-reduce。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

吕老师:hadoop是一个分布式计算平台,我们只要开发map-reduce的作业(job),然后提交到hadoop平台,它就会帮我们跑这个map-reduce的作业啦。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

map阶段:


 
public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> {  protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException {    String card = value.toString();    context.write(new Text(card), new LongWritable(1L));  };}static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
  protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException {
    String card = value.toString();
    context.write(new Text(card), new LongWritable(1L));
  };
}

(友情提示:可左右滑动)


640?wx_fmt=jpeg

吕老师:申明不用看,主要看map方法,它有三个参数,key、value和context,逻辑也很简单,其实就是用context.write往下游写了一个(card,1)的映射关系。

640?wx_fmt=jpeg

reduce阶段:


 
public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> {  protected void reduce(Text key, java.lang.Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException {    long count = 0L;    for (LongWritable value : values) {      count += value.get();    }    context.write(key, new LongWritable(count));  };}static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
  protected void reduce(Text key, java.lang.Iterable<LongWritable> values, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException {
    long count = 0L;
    for (LongWritable value : values) {
      count += value.get();
    }
    context.write(key, new LongWritable(count));
  };
}

(友情提示:可左右滑动)

640?wx_fmt=jpeg

吕老师:reduce也很简单,方法中三个参数,key、values和context,因为到了reduce阶段,一个key可能有多个value,所以这里传进来的是values,函数逻辑其实就是简单地将values累加,然后通过context.write输出。

640?wx_fmt=jpeg

小史:我明白了,hadoop其实把map-reduce的流程已经固定下来并且实现了,只留给我们自定义map和自定义reduce的接口,而这两部分恰好是和业务强相关的。

640?wx_fmt=jpeg

小史:也就是说业务方只需要告诉hadoop怎么进行map和怎么进行reduce,hadoop就能帮我们跑map-reduce的计算任务啦。

640?wx_fmt=jpeg

【分区函数】

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

小史:我明白了,这样一来,最后reduce完成之后,我这边多出来的牌全是红心的,其他人多出来的牌也算是同一花色,就不用进行二次统计了,这真是个好办法。

640?wx_fmt=jpeg

吕老师:没错,这就是分区函数的作用,在hadoop中,虽然shuffle阶段有默认规则,但是我们可以自定义分区函数来改变这个规则,让它更加适合我们的业务。


【合并函数】


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

吕老师:如果你不合并,那么传给shuffle阶段的就有两个数据,如果你预合并了,那么传给shuffle阶段的就只有一个数据,这样数据量减少了一半。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

吕老师:hadoop当然考虑到了这个点,你可以自定义一个合并函数,hadoop在map阶段会调用它对本地数据进行预合并。

640?wx_fmt=jpeg

【hadoop帮我们做的事情】


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

吕老师:还有呀,刚才说的分布式系统中网络传输是有成本的,hadoop会帮我们把数据送到最近的节点,尽量减少网络传输。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

吕老师:hadoop有两大重大贡献,一个是刚刚讲的map-reduce,另一个是分布式文件系统hdfs,hdfs可以说是分布式存储系统的基石。其实一般来说,map-reduce任务的输入,也就是那个很大的数据文件,一般都是存在hdfs上的。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

【笔记】


小史在往回走的路上,在手机里记录下了这次的笔记。


一、map-reduce的四个关键阶段:file切分、map阶段、shuffle阶段、reduce阶段。


二、hadoop帮我们做了大部分工作,我们只需自定义map和reduce阶段。


三、可以通过自定义分区函数和合并函数控制map-reduce过程的细节。


四、hadoop还有一个叫hdfs的牛逼东西,下次问问吕老师。


【回到房间】


640?wx_fmt=jpeg





最后

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg

转发到朋友圈是对我最大的支持!smiley_13.png

推荐阅读:


MapReduce基本原理(详解!) 目录一、概念理解二、MapReduce计算模型三、Map shuffle(1)Partition(2)Collector(3)Sort(4)Spill(5)Merge四、Reduce shuffle(1)Copy(2)Merge Sort 一、概念理解 MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义: 1)MapReduce是一个基于集群的高性能并行计算平台。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。 2)MapReduce是一 阅读详情

相关推荐

Hadoop MapReduce 深入理解!二次排序案例!

1. MapReduce 处理的数据类型1.1 必须实现 org.apache.hadoop.io.Writable 接口。需要实现数据的序列化与反序列化,这样才能在多个节点之间传输数据!示例:public class IntWritable implements WritableComparable<IntWritable> , public interface WritableComparab

技术大神之路 1万+

【Hadoop】MapReduce原理剖析

MapReduce是一个分布式运算程序的框架重要组成部分,是用户开发“基于Hadoop HDFS的数据分析应用”的核心框架。MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并行运行在Hadoop集群上。

CharonIU的博客 681

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3409

Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件i...

Ninina1992的博客 732

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

视觉人机器视觉的博客 2639

(超详细)MapReduce工作原理及基础编程

MapReduce编程基础 JunLeon——go big or go home 前言: Google于2003年在SOSP上发表了《The Google File System》,于2004年在OSDI上发表了《MapReduce: Simplified Data Processing on Large Clusters》,于2006年在OSDI上发表了《Bigtable: A Distributed Storage System for Structured Data》。这三篇论文...

JunLeon的博客 8万+

数据分析案例-基于红米和华为手机的用户评论分析

在智能手机市场日益繁荣的今天,红米与华为手机作为国产手机品牌的佼佼者,凭借其各自独特的品牌魅力和技术实力,赢得了广泛的用户群体和高度关注。随着技术的不断进步和消费者需求的日益多样化,用户对手机的期望已不仅限于基本的通讯功能,更涵盖了性能、拍照、续航、用户体验等多个方面。因此,深入探究红米与华为手机在用户长期使用过程中的实际表现,尤其是用户评论中所反映出的真实反馈,对于理解市场需求、优化产品设计及提升用户体验具有重要意义。本实验的背景正是基于这样的市场环境和技术发展趋势。我们旨在通过收集并分析红米与华为手机的

m0_64336780的博客 1万+

MapReduce 基础之:图文讲解 MapReduce 工作原理

图文详解mapreduce

weixin_43542605的博客 2万+

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战

摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

【Realtek sdk-3.4.14b】RTL8197FH+RTL8363NB当WAN/LAN IP冲突的时候,再次切换回正常的WAN,出现电脑无法上网也无法ping通设备网关问题分析及解决方案

如上图所示,当WAN和LAN网段冲突的时候,会导致路由设备异常,无法上网,但是修改为不冲突的网段之后,依然无法上网,同时下级PC也无法ping通路由设备,正常的如下图所示如上图所示,正常网络拓扑是可以正常的,但是在上级和路由LAN冲突的时候,再次切换为正常的网络也是异常问题复现步骤1.路由设备WAN口接到一个和本级路由是相同网段的设备2.拔掉WAN口,将WAN口接到一个和本级路由是不同网段的设备3.此时PC无法访问路由器。

wgl307293845的博客 665

深入理解 MapReduce:从概念到实战

MapReduce 是一种用于大规模数据集并行处理的编程模型,它具有高效、可靠、易于扩展等特点,被广泛应用于大数据处理领域。MapReduce 是一种用于大规模数据集并行处理的编程模型,它具有高效、可靠、易于扩展等特点,被广泛应用于大数据处理领域。

weixin_44067776的博客 1470

《网络摄像机实战11:flutter_webrtc支持 AWS Kinesis Video Streams信令服务器》

本文介绍了如何在Flutter项目中集成WebRTC实现网络摄像头的实时视频和音频对讲功能。通过使用flutter_webrtc插件,开发者可以快速构建跨平台的视频通信应用。文章详细说明了集成步骤:1)安装flutter_webrtc插件;2)配置信令服务器和KVS服务;3)初始化本地/远程视频渲染器;4)建立WebRTC连接并进行设备呼叫。最后展示了实际应用效果图,证明该方案能有效实现移动端与摄像头的实时音视频交互。该方案为开发智能家居监控等应用提供了技术参考。

lvj_158的专栏 356

job全异常 mapreduce_原来这就是MapReduce!

本文公众号来源:互联网侦察 作者:channingbreeze最近我也在入门大数据相关的基础,这篇文章非常通俗易懂讲解了什么是MapReduce,推荐阅读!找到工作后的一小段时间是清闲的,小史把新租房收拾利索后,就开始找同学小赵,小李和小王来聚会了。吃过午饭后,下午没事,四个人一起商量来打升级。打升级要两副扑克牌,小史就去找吕老师借牌去了。【多几张牌】吕老师给小史拿出一把牌。【map...

weixin_30270475的博客 129

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 996

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Yahoo!教程:MapReduce

本文整理自:http://developer.yahoo.com/hadoop/tutorial/module4.html 1、MapReduce基础 (1)函数式编程概念 MapReduce 程序是设计用来并行计算大规模海量数据的,这需要把工作流分划到...

chuifuhuo6864的博客 113

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MapReduce之join案例详解!

目录一、需求分析二、Map join实现三、Reduce join实现 一、需求分析 MapReduce提供了表连接操作其中包括Map端join、Reduce端join还有半连接,现在我们要讨论的是Map端join,Map端join是指数据到达map处理函数之前进行合并的,效率要远远高于Reduce端join,因为Reduce端join是把所有的数据都经过Shuffle,非常消耗资源。 案例分析: 一个电商网站后台数据存在两个表(可以看为两个文件): 用户表信息:用户ID、用户名、电话 订单表信息:订单ID

蔡政洁的博客 1333

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

开始MapReduce!

这是一波预告吧,进行了基本的hdfs的了解后,就要开始认识分布式处理的核心MapReduce了。 关于MapReduce的理论上知识可以通过 《深入理解hadoop2》 去了解,这里针对MapReduce编程进行实操记录。

戴挽舟的博客 170

MapReduce之二次排序案例详解!

目录一、需求分析二、方案一实现三、方案二实现 一、需求分析 MR的二次排序的需求说明: 在mapreduce操作时,shuffle阶段会多次根据key值排序。但是在shuffle分组后,相同key值的values序列的顺序是不确定的(如下图)。如果想要此时value值也是排序好的,这种需求就是二次排序。 原始数据 无二次排序 有二次排序 a 12 a 12 a 12 b 34 b 34 b 13 c 90 b 23 b 23 b 23 b 13 b 34

蔡政洁的博客 1712

原来很容易! 清晰解读MapReduce

       大数据时代的数据分析任务比传统的数据分析任务要复杂,因为往往涉及的数据量巨大,比如要分析汇总某个大型零售商在全国的销售数据,查看某个搜索引擎的特定词条的访问日志… … 通常来讲,我们的笔记本电脑可以同时干很多事儿,比如听音乐,编辑Word文档,下载电影,这些都可以同时进行,为什么呢?因为这些程序任务所处理的数据量规模小。而对于大规模的数据处理任务来说,就不是一台电脑同时做许多任务了,...

BluePandaz的博客 791

基于WordCount详解MapReduce编程模型!

目录一、MapReduce编程模型概述二、WordCount案例 一、MapReduce编程模型概述 MR是分布式计算模型 MR整个并行计算过程中会抽象出两个函数: map():它是对我们独立元素中的每一个元素进行并行计算操作的函数 reduce():它是对我们独立元素中的数据进行合并 一个简单 的MR程序,我们只需要指定map() reduce() input output,剩下的事情交个我们的框架来完成 关于MR的数据处理流程: 数据处理的阶段 input -> map -&g

蔡政洁的博客 1288

MapReduce开发总结!

总所周知,一般的job,是需要Map阶段和Reduce阶段共同去处理一些相应的业务逻辑。下面是一些具体的总结。 Map阶段: 1.输入形式:系统默认的输入是TextInputFormat。但在实际的业务需求中,需要结合其他相应的实现类处理业务逻辑。具体的是实现类有:KeyValueInputFormat:以文件个数设置切片,K为偏移量,V为行值。 NLineInputFormat:以行数决定切片个...

qq_43151441的博客 277

【MapReduce】Streaming Job Failed!

报错发生情况:用Python写好了一个MR程序,使用Linux环境本地测试正常。 在Hadoop环境上测试就报错。我的环境:$hadoop version Hadoop 2.5.2 ...执行指令:hadoop jar $HADOOP_INSTALL_HOME/contrib/streaming/hadoop-*streaming*.jar -file ./mapper.py -mapper

4503

悟懂MapReduce,不纠结!

【这是一猿小讲的第65篇原创分享】 在《谷歌 MapReduce 初探》中,我们通过统计词频的 WordCount 经典案例,对 Google 推出的 MapReduce 编程模型有了一个认识,但是那种认识,还只是停留在知道有那么个模型存在,并没有认识到骨子里。而且上次初探,也遗留了很多猜想和疑问,这次不妨让我们深入去认识一下 MapReduce,希望能达到一个质的认识。 重点回顾...

一猿小讲 728
上一篇: 【极简版】SpringBoot+SpringData JPA 管理系统
下一篇: 【JavaWeb基础】Web开发模式(修订版)
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值