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阶段的数据处理流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值