Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce

1. MapReduce是什么

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


2. MapReduce的优点

1) 易于编程

MapReduce框架只需实现几个简单的接口,用户便可以快速开发出一个分布式程序。这使得编写分布式程序的复杂性大大降低,从而促进了MapReduce的普及。

2) 良好的扩展性

随着计算需求的增加,用户只需简单地增加机器即可提升计算能力,Hadoop会自动将任务分配到新增的节点上。

3) 高容错性

Hadoop设计时考虑到了在廉价PC机器上运行的需求,因此具备高容错性。如果某个节点宕机,Hadoop会自动将计算任务转移到其他节点上,无需人工干预。

4) 适合PB级以上海量数据的离线处理

Hadoop可以实现大规模服务器集群的并发工作,提供高效的数据处理能力。


3. MapReduce的缺点

1) 不擅长实时计算

MapReduce无法像MySQL或Oracle那样,在毫秒或秒级内快速返回查询结果,适合批处理场景而非实时应用。

2) 不擅长流式计算

MapReduce的输入数据集是静态的,无法处理动态输入数据,因此不适合流式计算场景。

3) 不擅长DAG(有向无环图)计算

对于存在依赖关系的多个应用程序,MapReduce在处理时会导致大量的磁盘IO,影响性能。


4. MapReduce核心思想

以统计单词出现次数为例,MapReduce程序通常分为两个阶段:Map阶段和Reduce阶段。
在这里插入图片描述

Map阶段

  1. 读取输入数据并按行处理。
  2. 按空格切分每一行,生成键值对(KV对)。
  3. 将KV对按键分区,分发到不同的Reduce任务。

Reduce阶段

  1. 每个Reduce任务接收并处理来自Map阶段的输出数据。
  2. 统计以特定字母开头的单词数量。
  3. 将结果输出到文件。

案例流程

  • 输入数据:一个包含多个单词的文本文件。
  • Map阶段将这些单词分为不同的分区,例如:
    • 分区1:以a-p开头的单词
    • 分区2:以q-z开头的单词
  • Reduce阶段统计每个分区的单词数量,输出结果到文件。

假设我们有一个文本文件,内容如下:

apple banana grape
orange kiwi banana
apple orange peach
kiwi banana zebra
grape orange
1. InputFormat
  • InputFormat 将读取这个文本文件,并将其分割成多个Splits。假设每行作为一个Split。
    • Split 1: apple banana grape
    • Split 2: orange kiwi banana
    • Split 3: apple orange peach
    • Split 4: kiwi banana zebra
    • Split 5: grape orange
2. Map阶段

在Map阶段,Mapper会处理每个Split,并将每个单词映射为键值对(KV对)。

2.1 Mapper处理

对于每个Split中的每一行,Mapper会按空格分隔单词,并生成中间的KV对。例如:

  • 对于Split 1: apple banana grape

    • 生成 KV 对:
      • (apple, 1)
      • (banana, 1)
      • (grape, 1)
  • 对于Split 2: orange kiwi banana

    • 生成 KV 对:
      • (orange, 1)
      • (kiwi, 1)
      • (banana, 1)
  • 对于Split 3: apple orange peach

    • 生成 KV 对:
      • (apple, 1)
      • (orange, 1)
      • (peach, 1)
  • 对于Split 4: kiwi banana zebra

    • 生成 KV 对:
      • (kiwi, 1)
      • (banana, 1)
      • (zebra, 1)
  • 对于Split 5: grape orange

    • 生成 KV 对:
      • (grape, 1)
      • (orange, 1)
2.2 生成的中间KV对

经过Mapper处理,所有中间的数据可能如下所示:

(apple, 1)
(banana, 1)
(grape, 1)
(orange, 1)
(kiwi, 1)
(banana, 1)
(apple, 1)
(orange, 1)
(peach, 1)
(kiwi, 1)
(banana, 1)
(zebra, 1)
(grape, 1)
(orange, 1)
3. Shuffle阶段

Shuffle阶段负责将这些中间的KV对根据键进行分组和排序。

3.1 分区逻辑

将相同键的所有中间KV对聚集到一起,并根据字母范围进行分区:

  • 分区1(a-q):

    • apple: (apple, 1), (apple, 1)
    • banana: (banana, 1), (banana, 1), (banana, 1)
    • grape: (grape, 1), (grape, 1)
    • kiwi: (kiwi, 1), (kiwi, 1)
    • orange: (orange, 1), (orange, 1)
    • peach: (peach, 1)
  • 分区2(r-z):

    • zebra: (zebra, 1)
4. Reduce阶段

Reduce阶段会有两个Reducer,分别处理这两个分区的数据。

4.1 ReduceTask处理
  • ReduceTask 1(处理分区1 a-q)

    • 输入:
      (apple, 1)
      (apple, 1)
      (banana, 1)
      (banana, 1)
      (banana, 1)
      (grape, 1)
      (grape, 1)
      (kiwi, 1)
      (kiwi, 1)
      (orange, 1)
      (orange, 1)
      (peach, 1)
      
    • 处理统计数量,输出:
      apple: 2
      banana: 3
      grape: 2
      kiwi: 2
      orange: 2
      peach: 1
      
  • ReduceTask 2(处理分区2 r-z)

    • 输入:
      (zebra, 1)
      
    • 处理输出:
      zebra: 1
      
5. 输出

最终结果将被写入到HDFS中的指定文件,格式如下:

apple: 2
banana: 3
grape: 2
kiwi: 2
orange: 2
peach: 1
zebra: 1

5. MapReduce运行三大进程

MapReduce运行时的进程包括:

  • MrAppMaster:负责整体程序的调度和状态协调。
  • MapTask:负责Map阶段的数据处理流程。
  • ReduceTask:负责Reduce阶段的数据处理流程。

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

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

相关文章

Codeforces Round 975 (Div. 2)

传送门:https://codeforces.com/contest/2019 B. All Pairs Segments 题意: 首先样例解释一下: 一共有:[1,2],[1,3],[1,5],[1,6],[1,7],[2,3],[2,5],[2,6],[2,7],[3,5],[3,6],[3,7],[5,6],[5,7],[6,7] 点 1,7 在5个…

使用MessagePipe实现进程间通信

1、MessagePipe介绍 可以用于.NET和Unity上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC(进程间通信)-RPC等。 支持: 依赖注入过滤器管道更好的事件同步/异步带键值的/无键…

c++11~c++20 内联命名空间

在工作&#xff0c;我们经常会引入第三方库&#xff0c;偶尔会碰到同名的函数和类型&#xff0c;造成编译冲突的问题。一般我们可以使用命名空间&#xff0c;例如 #include <iostream> #include <iostream> using namespace std;namespace S1 {void foo(){cout &l…

基于python数据采集的可视化数据大屏,数据驱动的界面。

众所周知&#xff0c;可视化大屏离不开数据的采集&#xff0c;正式有了各种格式化的数据供给&#xff0c;可视化大屏才千姿百态&#xff0c;在数据采集方面&#xff0c;python优势什么明显&#xff0c;为大家分享一下。 一、python是什么 Python是一种高级、通用、解释型编程…

服装品牌小程序展示承载服务

服装大小品牌众多&#xff0c;还包括多区域的门店商家合作批发、咨询等&#xff0c;品牌或经销商想要获得更多生意&#xff0c;线上渠道往往是必备的&#xff0c;品牌宣传、获客转化及持续的信息干货输出等。 线上渠道多样化&#xff0c;尤其是微信、百度、抖音、快手等平台聚…

具身智能综述:鹏城实验室中大调研近400篇文献,深度解析具身智能

具身智能是实现通用人工智能的必经之路&#xff0c;其核心是通过智能体与数字空间和物理世界的交互来完成复杂任务。近年来&#xff0c;多模态大模型和机器人技术得到了长足发展&#xff0c;具身智能成为全球科技和产业竞争的新焦点。然而&#xff0c;目前缺少一篇能够全面解析…

Linux进程切换以及调度算法

目录 Linux进程切换以及调度算法 Linux进程切换介绍 前置知识 进程切换过程分析 调度算法 补充知识 Linux进程切换以及调度算法 Linux进程切换介绍 前面提到&#xff0c;分时操作系统下&#xff0c;CPU会在多个进程中做高速切换以实现多个进程看似同时执行的&#xff0…

防伪溯源查询系统V1.0.5

多平台&#xff08;微信小程序、H5网页&#xff09;二维码扫码输码防伪溯源查询系统&#xff0c;拥有强大的防伪码生成功能&#xff08;内置多种生成规则&#xff09;、批量导出防伪码数据、支持代理商管理端&#xff08;可批量对自己防伪码进行操作处理&#xff09;、文章资讯…

【深度学习】(10)--ResNet残差网络

文章目录 ResNet残差网络1. 传统卷积神经网络的问题1.1 梯度消失和梯度爆炸1.2 退化问题 2. 解决问题2.1 梯度消失与爆炸2.2 退化问题 3. 残差结构结构归纳 4. BN&#xff08;Batch Normalization&#xff09; 总结 ResNet残差网络 ResNet 网络是在 2015年 由微软实验室中的何…

ComfyUI | 好用的人体 衣服分割工具-③-Layer Style | 超多实用功能 | 强烈推荐

这里为大家分享检测人体的脸部、五官、头发、手臂、腿、脚&#xff0c;上衣、裤子、背景的插件&#xff0c;能够生成出对应的蒙版mask&#xff0c;接入到ComfyUI中&#xff0c;用于后续处理&#xff0c;如局部重绘&#xff0c;换背景等。 &#xff08;需要相关插件的同学可自…

华为LTC流程架构分享

文末附LTC流程管理PPT下载链接~ 前面笔者分享了华为LTC流程相关PPT&#xff0c;应读者需求&#xff0c;今天从架构角度进行再次与读者共同学习下LTC流程架构。 华为LTC流程架构是一个全面且集成的业务流程体系&#xff0c;从线索发现开始&#xff0c;直至收回现金&#xff0c…

Transformer: Attention is all you need

Transformer于2017年提出&#xff0c;最开始应用于NLP领域&#xff0c;随着Transformer的快速发展&#xff0c;在视觉领域中也越来越多的论文或应用用到了Transformer&#xff0c;这里记录一下自己学习的一些知识点。 PDF&#xff1a; 《Attention Is All You Need》 Code: att…

08-Registry搭建docker私仓

08-Registry搭建docker私仓 Docker Registry Docker Registry是官方提供的工具&#xff0c;用于构建私有镜像仓库。 环境搭建 Docker Registry也是Docker Hub提供的一个镜像&#xff0c;可以直接拉取运行。 步骤&#xff1a; 拉取镜像 docker pull registry启动Docker R…

YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…

Codesys trace工具右键菜单框呼出异常的问题解决

这个问题困扰了好久&#xff0c;添加trace工具之后&#xff0c;一但在模型图位置右键后&#xff0c;整个codesys界面都无法呼出右键菜单&#xff0c;甚至会出现键盘输入失效的问题。 解决办法&#xff1a;更新trace工具 1、工具 —> CODESYS Installer 或者搜索CODESYS In…

【YOLO目标检测反光衣数据集】共2388张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;2388 标注数量(txt文件个数)&#xff1a;2388 标注类别数&#xff1a;2 标注类别名称&#xff1a;reflective_clothes、other_clothes 数据集下载&#xff1a;反光衣数据集 图片示例 数据…

帕金森早期四大隐秘“预警灯“,你不可不知的健康警报!

在这个快节奏的时代&#xff0c;健康似乎成了我们最容易忽视却又最为宝贵的财富。今天&#xff0c;我们要揭开一个常被误解与忽视的医学领域——帕金森病。它不仅仅是老年人的专利&#xff0c;更可能在你我未曾留意的瞬间悄悄降临。了解帕金森早期的四个“信号”&#xff0c;就…

【反素数】

题目 思路 首先分析 的性质 一定是 中约数最大的一定是约数同是最大的数字中值中最小的进一步挖掘性质&#xff0c;紧贴枚举的做法 约数最大值最小&#xff08;也决定了层数、其它约束&#xff09;&#xff0c;是枚举的比较条件实现上述目的&#xff0c;枚举的质数种类在大小…

【文件增量备份系统】MySQL百万量级数据量分页查询性能优化

&#x1f3af; 导读&#xff1a;本文针对大数据量下的分页查询性能问题进行了深入探讨与优化&#xff0c;最初查询耗时长达12秒&#xff0c;通过避免全表计数及利用缓存保存总数的方式显著提升了浅分页查询速度。面对深分页时依然存在的延迟&#xff0c;采用先查询倒数第N条记录…

使用JLINK合并boot和app两个hex文件,使用Keil烧写到单片机

嵌入式产品开发&#xff0c;现在比较流行的是使用IAP方式对产品固件进行升级。只要应用到IAP升级方式&#xff0c;就不可避免的要开发boot和app两部分代码。 产品开发阶段可以分别将boot和app通过keil软件下载到单片机&#xff0c;但是产品量产阶段&#xff0c;如果还是分两次下…