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阶段的数据处理流程。
相关推荐
Мартин.8 分钟前
[CISSP] [5] 保护资产安全
数据库·安全·oracle
熠速9 分钟前
ITTIA DB Platform——实时嵌入式数据管理软件产品家族
数据库·嵌入式实时数据库
遇到困难睡大觉哈哈22 分钟前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
Roam-G31 分钟前
Elasticsearch 证书问题解决
大数据·elasticsearch·jenkins
热爱编程的小曾41 分钟前
sqli-labs靶场 less 8
前端·数据库·less
深蓝易网1 小时前
为什么制造企业需要用MES管理系统升级改造车间
大数据·运维·人工智能·制造·devops
THRUSTER111111 小时前
MySQL-- 函数(单行函数):数值函数, 字符串函数
数据库·mysql·函数·navicat·单行函数
橙序研工坊1 小时前
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
数据库·sql·mysql
Bruce-li__1 小时前
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
网络·数据库·python
青云交1 小时前
Java 大视界 -- Java 大数据在智能电网电力市场交易数据分析与策略制定中的关键作用(162)
java·大数据·数据分析·交易策略·智能电网·java 大数据·电力市场交易