收藏,最简单易懂的MapReduce使用讲解

2023-05-16

对于MapReduce相信大家并不陌生,它是大数据Hadoop家族中最重要的成员之一,是一个运行在Hadoop平台上的分布式计算框架,对于大数据这块,大家总是觉得高深莫测,浅尝辄止,今天我们就通俗易懂的给大家讲讲,让大家真正的感受到MapReduce是什么?如何使用?在哪些场景下用?

 

我们先来一个简单的Case,冬天来了,是吃火锅的季节了,你买了肥牛、蘑菇、白菜、香菜、豆腐、鸭血、小葱,一个个的处理干净,装在盘子里,火锅底料一放,菜一下,香喷喷的火锅就出来了。在这个吃火锅的场景中,我们可以抽象一下,它包含两部分:洗干净菜,煮菜,换做MapReduce的语言,每洗干净一个菜就是一个Map操作,将白菜Map一下,香菜Map一下,每煮一次火锅就是一个Reduce操作。这意味着每煮一次火锅就需要把洗干净的菜都放进来,也就是把所有Map操作的菜都处理一下。

 

MapReduce还是一个分布式计算框架,所谓分布式就是可以多个操作并行。你煮的火锅实在太好吃了,在民意要求下,你开启了火锅店,做大做强又开启了火锅分店,这时候你需要多个人去洗菜,一个人负责洗白菜、一个人负责切肥牛、一个人负责切豆腐,当所有的人都处理完了之后,就有了处理好的白菜、肥牛、豆腐,这些都是基于Map白菜、Map肥牛、Map豆腐的操作下进行的,Reduce操作是基于Key来进行,Key就是洗干净的白菜、肥牛、豆腐,Reduce之后就是一桌又一桌的火锅。

 

总结一下,MapReduce是包含两部分,即Map操作、Reduce操作,Map操作就是映射操作,它接受一个输入,产生一个中间键值对的输出,MapReduce框架会把Map函数中参数的中间键值对里相同的键值传给Reduce函数。Reduce操作就是化简,它接受一个键值,将这组值合并产生更小的值。

 

今年的双十一开始了,老板交给你一个任务,统计下所有牛仔裤最受欢迎的top3。如果是小电商平台,那很简单,写个程序获取所有的牛仔裤,遍历一下每条牛仔裤被购买的次数,再做一个排序,就知道最受欢迎的牛仔裤了。但是当我是一个中型电商平台时,遍历就会比较慢了,这时候可以写一个多线程的程序,在多核机器上去运行就行。当我是一个大型电商平台,比如淘宝、京东、拼多多,我们就可以把计算每个牛仔裤被买次数的作业分给多台机器去计算,把总的销售数据分成N份,每台计算机计算1份,最后汇总起来倒序排即可。上述三种算法,其实我们也可以使用MapReduce来完成噢。

 

在MapReduce中,Map函数和Reduce函数都是由我们自己定义的,在统计牛仔裤的销量top3场景中,我们定义map函数获取每款牛仔裤,Reduce函数统计每款牛仔裤被购买的次数。在下图中,Map函数接受的key是所有商品,值是取牛仔裤,每遇到一个牛仔裤就产生一个中间键值对<jeans,1>,不同牛仔裤是不同的键值对,比如bluejeans,yellowjeans。Map函数将键值相同的键值对都传递给reduce,reduce将每个键值对的value进行累加,最后获取到每条牛仔裤被购买的次数,存储在底层的分布式文件系统HDFS中,业务层可以通过接口获取数据,展现最热销的top3牛仔裤。

 

图片

 

通过实例我们明白了MapReduce是个什么东东,我们可以再结合Google论文中的工作原理流程图来进行最后的梳理。

 

在流程图中上层业务通过UserProgram连接MapReduce库,将输入文件分成M份,即图中的spilt0、spilt1、spilt2、spilt3、spilt4...,在使用master节点给worker节点分配Map作业,我们有M份文件就分配M个worker,被分配了Map作业的worker读取对应的数据,生成中间键值对,存储在内存和磁盘中,Reduce函数也会根据作业数进行分区,如果有M个作业,就分成M个区,由Master节点把分区作业从磁盘中传递给到ReduceWorker节点,Reduceworker节点获取到所有的中间键值对之后,进行排序处理,获取每个相同中间键值对的值。当所有的Map作业和Reduce作业都执行完了之后,master节点唤醒userprogram获取数据。

 

图片

 

通过老板安排的简简单单的获取最热销牛仔裤的任务,我们从原理到实践讲解了MapReduce的使用。MapReduce它比较适合大型网站的数据统计、在海量数据中获取某些有特征的数据,但是不太适合实时计算,从它的输入都是静态数据,计算过程,存储是在HDFS都可以看到执行任务相对耗时比较长。我们结合自己业务情况,使用在最合适的场景即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

收藏,最简单易懂的MapReduce使用讲解 的相关文章

  • Hadoop 框架中使用的属性的完整列表

    我正在对 Hadoop 框架进行一些研究 我想问一下框架中可以使用的属性 例如 io sort mb io sort record percent etc 我可以参考这个框架的整个属性列表吗 非常希望有人能帮助我 另外 我想问一下 io s
  • JobControl 和 JofConf.setMapperClass() 错误

    我正在尝试使用JobControl将多个Mappers和Reducers连接在一起但调用时遇到以下错误JobConf setMapperClass setMapperClass java lang Class
  • Hadoop分区器

    我想问一下Hadoop分区器 它是在Mappers中实现的吗 如何衡量使用默认哈希分区器的性能 是否有更好的分区器来减少数据偏差 Thanks 分区器不在映射器内 以下是每个映射器中发生的过程 每个映射任务将其输出写入循环缓冲存储器 而不是
  • 使用 Hadoop,我可以在未运行数据节点的计算机上创建任务跟踪器吗?

    所以这是我的情况 我有一个使用 HBase 的 MapReduce 作业 我的映射器接受一行文本输入并更新 HBase 我没有减速器 并且我没有将任何输出写入光盘 我希望能够在预期利用率激增时向集群添加更多处理能力 然后在利用率下降时缩减处
  • Mapfile 作为 MapReduce 作业的输入

    我最近开始使用 Hadoop 在使用 Mapfile 作为 MapReduce 作业的输入时遇到问题 以下工作代码在 hdfs 中编写一个名为 TestMap 的简单 MapFile 其中包含三个 Text 类型的键和三个 BytesWri
  • 将 Mongo 中的某些字段从字符串转换为数组

    我有一个文档集合 其中 标签 字段从空格分隔的标签列表切换为单个标签数组 我想将以前的空格分隔字段更新为像新传入数据一样的数组 我也遇到了 type 选择器的问题 因为它将类型操作应用于单个数组元素 即字符串 因此按类型过滤只会返回所有内容
  • 在 Google App Engine 中使用 mapreduce 的简单反例

    我对 GAE 中 MapReduce 支持的当前状态有些困惑 根据文档http code google com p appengine mapreduce http code google com p appengine mapreduce
  • 在spark中设置textinputformat.record.delimiter

    在 Spark 中 可以设置一些 hadoop 配置设置 例如 System setProperty spark hadoop dfs replication 1 这有效 复制因子设置为 1 假设是这种情况 我认为这种模式 在常规 hado
  • Hadoop MapReduce:可以在一个 hadoop 作业类中定义两个映射器和缩减器吗?

    我有两个独立的 java 类 用于执行两个不同的 MapReduce 作业 我可以独立运行它们 对于这两个作业 它们所操作的输入文件是相同的 所以我的问题是是否可以在一个java类中定义两个映射器和两个缩减器 例如 mapper1 clas
  • 线程“主”java.lang.VerifyError 中出现异常:操作数堆栈上的类型错误

    在给定 input txt 文件中查找最大温度的 Map Reduce 程序中发生了此错误 我写了两栏 分别是年份和温度 Exception in thread main java lang VerifyError Bad type on
  • Hadoop MapReduce 提供嵌套目录作为作业输入

    我正在从事一项处理嵌套目录结构的工作 其中包含多个级别的文件 one three four baz txt bleh txt foo txt two bar txt gaa txt 当我添加one 作为输入路径 不会处理任何文件 因为没有文
  • Hive 左外连接长期运行

    Hortonworks HDP 2 3 0 Hive 0 14 Table T1 partition on col1 no bucket ORC 应用程序 1 2 亿行和 6GB 数据大小Table T2 partition on col2
  • Hadoop:Reducer 将 Mapper 输出写入输出文件

    我遇到了一个非常非常奇怪的问题 减速器确实可以工作 但是如果我检查输出文件 我只找到了映射器的输出 当我尝试调试时 在将映射器的输出值类型从 Longwritable 更改为 Text 后 我 发现字数示例存在相同的问题 package o
  • 为什么map任务总是运行在单节点上

    我有一个具有 4 个节点的完全分布式 Hadoop 集群 当我将作业提交给 Jobtracker 时 Jobtracker 认为 12 个映射任务对我的工作来说很酷 但奇怪的事情发生了 这 12 个映射任务始终在单个节点上运行 而不是在整个
  • Hadoop 性能

    我安装了hadoop 1 0 0并尝试了字数统计示例 单节点集群 完成时间为 2 分 48 秒 然后我尝试了标准的 Linux 字数统计程序 该程序在同一组 180 kB 数据 上运行只需 10 毫秒 是我做错了什么 还是 Hadoop 非
  • hadoop map reduce 中的错误处理

    根据文档 有几种方法可以在 MapReduce 中执行错误处理 以下是一些 A 使用枚举的自定义计数器 每个失败记录的增量 b 记录错误并稍后分析 计数器给出失败记录的数量 然而 为了获取失败记录的标识符 可能是其唯一键 以及发生异常的详细
  • 使用 Hadoop MapReduce 的计算语言学项目构想

    我需要做一个关于计算语言学课程的项目 是否有任何有趣的 语言 问题 其数据密集程度足以使用 Hadoop MapReduce 来解决 解决方案或算法应尝试分析并提供 语言 领域的一些见解 但是它应该适用于大型数据集 以便我可以使用 hado
  • 从 Eclipse 在 AWS-EMR 上运行 MapReduce 作业

    我在 Eclipse 中有 WordCount MapReduce 示例 我将其导出到 Jar 然后将其复制到 S3 然后我在 AWS EMR 上运行它 成功地 然后 我读到了这篇文章 http docs aws amazon com El
  • 遍历 ArrayWritable - NoSuchMethodException

    我刚刚开始使用 MapReduce 并且遇到了一个奇怪的错误 我无法通过 Google 回答该错误 我正在使用 ArrayWritable 制作一个基本程序 但是当我运行它时 在Reduce过程中出现以下错误 java lang Runti
  • RavenDB:为什么我会在此多重映射/归约索引中获得字段空值?

    受到 Ayende 文章的启发https ayende com blog 89089 ravendb multi maps reduce indexes https ayende com blog 89089 ravendb multi m

随机推荐

  • linux装SSH服务以及防止SSH暴力破解

    需要安装的包 xff1a openssh clients 6 6 1p1 22 el7 x86 64 openssh server 6 6 1p1 22 el7 x86 64 配置文件中常用参数的介绍 xff1a vim etc ssh s
  • 【Linux 切换 ES(elasticsearch)用户】

    Linux服务器里面有些操作不能用root用户操作ES xff0c 需要切换用户操作启动 1 切换用户命令 su 用户名 或者 ssh 用户名 64 服务器ip地址 su span class token operator span es
  • [DSA] 数字血管造影系统-硬件篇

    根据一下资料整理和增删 xff1a http www china radiology com showtopic 6451 aspx 2008年的资料 xff0c 但可以作为入门资料 xff0c 讲述了很多基本概念 http blog cs
  • QT修改QPushButton的背景色和文字颜色

    Qt中QPushButton背景颜色设置方法 不管我设置不是画笔颜色 xff0c 依然不管用 xff0c 一查才知道自己错了 因为在windows中QPushButton的颜色涉及到样式表 xff0c 所以应该设置样式表才可以 xff0c
  • anaconda释放空间

    学习内容 xff1a conda clean 后面可以跟很多超参 xff0c 不同超参有不同的功能 xff1a 可选参数 xff1a span class token operator span h span class token ope
  • Qt线程:QThread

    一 描述 一个QThread对象管理程序内的一个线程 xff0c QThreads在run 中开始执行 默认情况下 xff0c run 通过调用exec 启动事件循环 xff0c 并在线程内部运行一个Qt事件循环 可以通过使用 QObjec
  • 论文精讲 | CVPR 2022|RHFL-对抗噪声的联邦学习

    模型异构的联邦学习 xff0c 是一种每个client拥有互不相同模型的联邦学习任务 xff0c 其能够解决联邦学习中每个成员希望独立设计自己模型的需求 xff0c 但目前同样面临着来自数据层面和成员层面的各种挑战 xff0c 比如数据标记
  • Android音频简介

    1 基本概念 1 1 播放模式 xff1a Deep buffer playback Android开发中最常用的播放模式 xff0c 音乐等对时延要求不高的声音输出采用该模式 边加载边播放 xff0c 由AP进行解码 Low latenc
  • vnc显示远程桌面

    搜了很多教程 xff0c 大部分都试了还是不能正常显示Ubuntu18 04的桌面 xff0c 最后找到了一篇文章 xff1a 使用 VNC 显示 Ubuntu Server 的图形化界面 可以让我的vnc正常显示的配置 首先 在服务器终端
  • 面试中常被提到的最左前缀匹配原则

    最左前缀匹配原则 xff1a 在MySQL建立联合索引时会遵守最左前缀匹配原则 xff0c 即最左优先 xff0c 在检索数据时从联合索引的最左边开始匹配 要想理解联合索引的最左匹配原则 xff0c 先来理解下索引的底层原理 索引的底层是一
  • njupt 字典序最大的出栈序列

    题意 xff1a 给出入栈序列 A xff0c 保证 A 各个元素值各不相等 xff0c 输出字典序最大的出栈序列 如入栈序列 A 61 1 2 9 4 6 5 则字典序最大的出栈序列为9 6 5 4 2 1 栈的性质就是先进后出 xff0
  • SD-WAN设备白盒刷机

    1 启动U盘插入盒子USB接口 2 PC与盒子通过串口线连接 xff0c 波特率为115200 3 加电 4 WAN接口接入网络 xff0c 保证可以访问外网 5 cd var 6 scp 64 122 96 93 166 root Fle
  • Android手机控制ZigBee板上LED

    环境 xff1a Windows 编译器 xff1a IAREW8051 8 1 硬件 xff1a CC2530 协议栈 xff1a ZStack CC2530 2 3 0 1 4 0 手机 xff1a Android4 1 2 又重新开始
  • Windows 10 WSL2 安装Linux Xfce图形界面

    一 更新ubuntu 18 04 LTS软件源 xff0c 推荐使用国内的软件源 1 备份配置文件 xff1a cp a etc apt sources list etc apt sources list bak 2 修改sources l
  • Ubuntu终端快捷键打不开解决

    ubuntu快捷键打不开终端 问题描述 xff1a 快捷键打不开终端 xff0c 加装python3 9后 xff0c 就出现了gnome terminal报错和快捷键无法打开终端的问题 解决方法 xff1a cd usr lib pyth
  • 解决Win10 WSL2 IP地址经常变动导致docker容器无法正常访问

    前提是Win10已经安装好WSL2 xff0c 且linux发行版已经安装docker 安装wsl2host wsl2host下载地址 xff08 https github com shayne go wsl2 host releases
  • 关于BUG_ON()的一点笔记

    关于BUG ON 的一点笔记 最近在看isp1362的驱动经常看到这个BUG ON 在网上找了些相关资料 xff0c 现总结如下 先看代码吧 lt asm generic bug h gt ifndef HAVE ARCH BUG defi
  • 操作系统的各个版本和版本号对应

    内核中使用PsGetVersion 函数可以查询到当前的操作系统信息 BOOLEAN PsGetVersion PULONG MajorVersion OPTIONAL PULONG MinorVersion OPTIONAL PULONG
  • 云计算适合大专生学吗?

    云计算适合大专生学吗 xff1f 对于大专毕业生来说 xff0c 云计算的确是一个不错的选择 xff0c 因为云计算技术应用专业 xff0c 主要就是专科院校在办学 不管你是计算机相关专业的 xff0c 还是零基础想学习都是可以的 xff1
  • 收藏,最简单易懂的MapReduce使用讲解

    对于MapReduce相信大家并不陌生 xff0c 它是大数据Hadoop家族中最重要的成员之一 xff0c 是一个运行在Hadoop平台上的分布式计算框架 xff0c 对于大数据这块 xff0c 大家总是觉得高深莫测 xff0c 浅尝辄止