MapReduce学习与理解

news2024/9/28 12:41:00

MapReduce为google分布式三驾马车之一。分别为《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。三遍论文奠定了分布式存储和计算的基础。本篇文章来说说mapreduce.

一、MapReduce介绍

  mapreduce将复杂的、在大规模集群的并行运算抽象到两个函数:Map和Reduce。核心思想是“分而治之”。由传输<key,value>类型的键值对到Map,map则对这些数据根据map函数做相应的处理,输出为<key,List<value>>的键值对,再到reduce中对value做最后的统计。这样说有点抽象。我在另一篇文章中看见一个很形象的例子

        我们的目的是做辣椒酱,但是有很多种类比如:洋葱辣椒酱、番茄辣椒酱、青椒辣椒酱等,在输入到map的过程就是将大量的原粮(包含洋葱、番茄、青椒等的混合)放入map中,而map会根据这些品种,分类、并且将其分割完成。那么此时的输出就是<洋葱,List<洋葱瓣>>、<番茄、List<番茄块>>等,此时再作为reduce的输入,reduce则负责最终的搅拌过程,最终输出为各种辣椒酱。这个例子就很形象。

1.Map和Reduce函数表

函数输入输出说明
Map        

<k1,v1>:

<1,hello world>

<2,hello Jack>

List(<k2,v2>):

<hello,1>

<world,1>

<hello,1>

<Jack,1>

1.将输入的数据进一步解析成<key,value>对,输入Map函数中进行处理

2.经过map函数输出为一批键值对。此时为中间结果

Reduece

<k2,List<v2>>

<hello,{1,1}>

<world,1>

<Jack,1>

<k3,v3>

<hello,2>

<world,1>

<Jack,1>

reduce得到map输出的中间结果,合并计算到最后的结果

在这个表中是以单词划分为例,可能会疑惑为什么map的输出为LIst的键值对,而reduce的输入却是<k2,List>,这就涉及到MapReduece的管理系统,别急继续往下看。

二、MapReduce体系结构

1.client

        用户编写的MapReduce程序通过Client提交到JobTracker端,用户可以通过Client提供的接口查看作业运行状态

2.JobTracker(也就是Master)

        JobTracker负责资源监控和作业调度JobTrack监控所有的TaskTracker与Job的健康情况,通过心跳机制来检测,一旦发生问题则重新将map中处理的任务重新去完成,因为map完成的任务会存放在他本地的磁盘中,无法得到。那么Master会重新安排其他的Map去做。而reduce失败之后,完成的任务不会再重新进行,它会存放在HDFS中。JobTracker会跟踪任务的执行进度、资源使用量等问题,并将这些信息告诉任务调度器(TaskScheduler),TaskScheduler就会调度任务。

3.TaskTracker

        TaskTracker会周期性地通过“心跳”将本地节点上的情况告诉给JobTracker,同时执行相应的操作。TaskTracker使用“slot”等量划分本节点上资源量(CPU、内存等)。一个Task获取到slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上空闲的slot分配给Task使用。slot分为Map slot和Reduce slot 两种分别提供给MapTask和Reduce Task使用。

4.Task

        Task分为Map Task 和 Reduce Task两种,均由TaskTracker启动

5.TaskScheduler则负责任务的分发以及错误发生后未完成的task的重新分发。

2.1MapReduce各个执行阶段

其中Shuffile则负责将将map的输出,经过分区、排序、合并过程输出一个分区有序的文件。比如每个URL为key的键值对,将他们的value合并起来组成一个,统一由某个reduce来进行处理,并且也是有序的。这就解决了前面所说的问题。

MapReduce应用程序执行过程:

这里参考大佬的博客:MapReduce基本原理及应用 - 黎先生 - 博客园 (cnblogs.com)

同时最好可以读一遍原论文,它不管是整个框架,还是容错的考虑都是有提到的,可以更加深入的了解整个MapReduce:rfeet.qrk (mit.edu)

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

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

相关文章

在 commit 里使用 emoji~

在 git commit 上使用 emoji 提供了一种简单的方法&#xff1a;仅通过查看所使用的 emoji 来确定提交的目的或意图&#xff0c;非常好理解&#xff0c;阅读体验很棒。 ‍ 效果 以我的 博客项目 为例&#xff0c;可以看到不少的 emoji &#xff1a; ‍ ‍ 使用方法 直接在…

【Linux】驱动的基本架构和编译

驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…

python基础库

文章目录 1.研究目的2.platform库介绍3.代码4.结果展示 1.研究目的 最近项目中需要利用python获取计算机硬件的一些基本信息,查阅资料,.于是写下这篇简短的博客,有问题烦请提出,谢谢-_- 2.platform库介绍 platform 库是 Python 的一个内置库&#xff0c;可以让我们轻松地获取…

京东面试:RR隔离mysql如何实现?什么情况RR不能解决幻读?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈&#xff1a;mysql 事务隔离的底层原理&#xff1…

Cilium + ebpf 系列文章- (七)Cilium-BGP-自定义定时器-ebgp多跳-优雅重启-MD5加密-传播团体字

一、自定义定时器 这里指的是自定义: Keepalive Interval: 缺省值为30秒。Keepalive用于维护邻居关系&#xff0c;如果在协商的保持时间内没有收到Keepalive消息&#xff0c;则BGP将断开邻居连接。 Hold Time:缺省值是Keepalive时间的3倍&#xff0c;即90秒。这是BGP在关闭连…

spark计算引擎-架构和应用

一Spark 定义&#xff1a;Spark 是一个开源的分布式计算系统&#xff0c;它提供了一个快速且通用的集群计算平台。Spark 被设计用来处理大规模数据集&#xff0c;并且支持多种数据处理任务&#xff0c;包括批处理、交互式查询、机器学习、图形处理和流处理。 核心架构&#x…

c++九月27日

1.顺序表 #ifndef ARRAYLIST_H #define ARRAYLIST_H#include <iostream> #include <stdexcept>template <typename T> class ArrayList { private:T* data; // 存储数据的数组int capacity; // 数组容量int size; // 当前元素数量publ…

【linux】基础IO(下)

8. 理解文件系统 8.1. 认识硬件 --- 磁盘 唯一的机械设备&#xff0c;也是一个外设 注意&#xff1a; 磁头是一面一个&#xff0c;磁头和盘面不接触在软件设计上&#xff0c;设计者会有意识地将相关数据放在一起一般来说&#xff0c;运动越少&#xff0c;效率越高&#xff1…

vue单点登录异步执行请求https://xxx.com获取并处理数据

一、请求一个加密地址获取access_token再拼接字符串再次请求 接口返回数据 异步执行请求该地址获取数据并处理 二、请求代码第二步使用 access_token 获取 auth_key // 第二步&#xff1a;使用 access_token 获取 auth_keyconst access_token tokenData.access_token;const …

什么是NAND Flash?

什么是NAND Flash? NAND闪存是一种非易失性存储器技术&#xff0c;它彻底改变了数字时代的数据存储。它是闪存的一种形式&#xff0c;这意味着它可以被电擦除和重新编程。NAND闪存以NAND&#xff08;NOT-AND&#xff09;逻辑门命名&#xff0c;该逻辑门用于其基本架构。术语“…

服务运营 | 竞价风暴:在线广告交易的实时拍卖与定价艺术

编者按&#xff1a; 在广告交易领域&#xff0c;尤其是谷歌等平台的广告交易中&#xff0c;每一次广告展示——即向特定浏览者展示广告的机会——都是由出版商&#xff08;publisher&#xff09;&#xff0c;例如《纽约时报》网站&#xff0c;通过实时拍卖的方式出售给广告商。…

中航通用飞机社招入职笔试:SHL题库综合能力性格问卷题型分析、高分攻略

中航通用飞机有限责任公司是中国航空工业集团有限公司旗下的大型国有企业&#xff0c;专注于通用航空产品的研制、通航运营与服务、航空零部件制造等业务。公司注册资本133.66亿元人民币&#xff0c;总资产约667亿元&#xff0c;员工人数超过16000人。产品线丰富&#xff0c;包…

8.使用 VSCode 过程中的英语积累 - Help 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

C# 用Timer控件简单写一个倒计时60s功能

先放界面上一个Label和一个Timer控件&#xff0c;Label用来展示倒计时秒数 添加事件 设置属性&#xff0c;设置每隔一秒执行一次 放代码&#xff1a; //设置时间控件开始运行&#xff0c;具体放在哪里看具体需求 this.timer1.Start();//定义一个全局变量表示秒数 int time…

【手机直连卫星】除了华为Mate 60 Pro,支持卫星通信的手机还有哪些款

2023年底&#xff0c;华为推出的Mate 60 Pro手机&#xff0c;开创了智能手机卫星通信的新纪元。它支持卫星电话通话和短信功能&#xff0c;让用户即使在偏远山野或深海之上也能保持与外界的联系。这一技术的加入&#xff0c;无疑为户外探险者和遥远地区的工作者提供了难以估量的…

影院管理革新:小徐的Spring Boot应用

第二章开发技术介绍 2.1相关技术 小徐影城管理系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言&#xff0c;易于学习&#xff0c;实用且面向用户。全球超过35&#xff05;的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统&#xff0c;因为它…

港科夜闻 | 香港科大颁授荣誉大学院士予五位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大颁授荣誉大学院士予五位杰出人士。香港科大9月24日向五位杰出人士颁授荣誉大学院士&#xff0c;他们分别为包弼德教授、简吴秋玉女士、高秉强教授、吴永顺先生及容永祺博士(按姓氏英文字母排序)。荣誉大学院士颁…

数据结构——对顺序线性表的操作

大家好啊&#xff0c;今天给大家分享一下对于顺序线性表的相关操作&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦…

一步步带你Linux内核编译与安装

Linux内核编译与安装 安装流程 #mermaid-svg-0PfY2uowOUJaN2Ov {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0PfY2uowOUJaN2Ov .error-icon{fill:#552222;}#mermaid-svg-0PfY2uowOUJaN2Ov .error-text{fill:#5522…