Hadoop MapReduce机制详解

hadoop之MapReduce简介 hadoop之MapReduce的一些简介,架构和分析 阅读详情

Hadoop MapReduce机制详解

概述

Hadoop MapReduce是一个分布式计算框架,用于处理大规模数据集。它基于Google的MapReduce论文实现,将复杂的分布式计算抽象为两个主要阶段:Map阶段和Reduce阶段。

核心架构

1. 主要组件

JobTracker
  • 职责:作业调度与监控
  • 功能:
    • 接收客户端提交的作业
    • 将作业分解为多个任务
    • 调度任务到可用的TaskTracker
    • 监控任务执行状态
    • 重新执行失败的任务
TaskTracker
  • 职责:任务执行
  • 功能:
    • 接收JobTracker分配的任务
    • 在本地执行Map或Reduce任务
    • 定期向JobTracker发送心跳信号
    • 报告任务执行进度和状态
JobClient
  • 职责:作业提交接口
  • 功能:
    • 配置作业参数
    • 上传作业所需的JAR文件和配置
    • 提交作业到JobTracker
    • 监控作业执行状态

2. 数据存储层 - HDFS

MapReduce通常与HDFS(Hadoop Distributed File System)配合使用:

提交作业
分配任务
分配任务
分配任务
读取数据
读取数据
读取数据
本地计算
本地计算
本地计算
客户端
JobTracker
TaskTracker1
TaskTracker2
TaskTracker3
HDFS DataNode1
HDFS DataNode2
HDFS DataNode3

MapReduce执行流程

1. 作业提交阶段

ClientJobTrackerHDFSTaskTracker上传输入数据提交作业请求获取输入数据信息计算输入分片返回作业ID上传作业JAR和配置ClientJobTrackerHDFSTaskTracker

2. Map阶段详解

输入分片(Input Split)
  • 将输入数据逻辑分割成多个分片
  • 每个分片对应一个Map任务
  • 分片大小通常等于HDFS块大小(默认128MB)
Map函数执行
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    
    public void map(LongWritable key, Text value, Context context) 
            throws IOException, InterruptedException {
        String line = value.toString();
        StringTokenizer tokenizer = new StringTokenizer(line);
        
        while (tokenizer.hasMoreTokens()) {
            word.set(tokenizer.nextToken());
            context.write(word, one);
        }
    }
}
Map阶段输出处理
  1. 分区(Partitioning)

    • 根据key的hash值决定数据发送到哪个Reducer
    • 默认使用HashPartitioner
    • 可自定义分区策略
  2. 排序(Sorting)

    • 对Map输出按键进行排序
    • 确保相同key的数据聚集在一起
  3. Combiner(可选)

    • 本地聚合操作
    • 减少网络传输数据量
    • 必须是可交换和可结合的操作

3. Shuffle和Sort阶段

Shuffle过程
分区1
分区2
分区1
分区2
分区1
分区2
排序合并
排序合并
Map Task 1
Reducer 1
Reducer 2
Map Task 2
Map Task 3
Reduce Task 1
Reduce Task 2
详细步骤
  1. Map端Shuffle

    • Map任务将输出写入环形内存缓冲区
    • 缓冲区达到阈值时开始溢写(spill)到磁盘
    • 溢写前进行分区和排序
    • 可选的Combiner执行本地聚合
  2. Reduce端Shuffle

    • Reducer从各个Map任务获取对应分区的数据
    • 进行合并和排序操作
    • 将数据提供给Reduce函数处理

4. Reduce阶段

Reduce函数执行
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();
    
    public void reduce(Text key, Iterable<IntWritable> values, Context context) 
            throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }
}
Reduce阶段特点
  • 接收分组后的键值对
  • 对每个key的所有values进行处理
  • 输出最终结果到HDFS

容错机制

1. 任务失败处理

Map任务失败
  • JobTracker检测到TaskTracker心跳超时
  • 将该TaskTracker标记为失败
  • 重新调度该TaskTracker上的所有任务
  • 在其他节点重新执行
Reduce任务失败
  • 类似Map任务失败处理
  • 需要重新获取Map输出数据
  • 重新执行Reduce计算

2. 推测执行(Speculative Execution)

原任务
备份任务
任务执行缓慢
启动备份任务
备份任务执行
哪个任务先完成?
终止备份任务
终止原任务
  • 检测执行缓慢的任务
  • 在空闲节点启动备份任务
  • 采用先完成的结果
  • 提高整体作业完成时间

3. 数据本地化优化

本地化级别
  1. 节点本地化:任务与数据在同一节点
  2. 机架本地化:任务与数据在同一机架
  3. 全局本地化:跨机架访问数据
调度策略
  • 优先选择节点本地化
  • 其次选择机架本地化
  • 最后考虑全局本地化
  • 减少网络传输开销

性能优化策略

1. Combiner使用

job.setCombinerClass(WordCountReducer.class);
  • 减少Map输出数据量
  • 降低网络传输负载
  • 仅适用于可交换和可结合的操作

2. 压缩配置

<!-- 启用Map输出压缩 -->
<property>
    <name>mapreduce.map.output.compress</name>
    <value>true</value>
</property>

<property>
    <name>mapreduce.map.output.compress.codec</name>
    <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

3. 内存调优

<!-- Map任务内存 -->
<property>
    <name>mapreduce.map.memory.mb</name>
    <value>2048</value>
</property>

<!-- Reduce任务内存 -->
<property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>4096</value>
</property>

实际应用案例

1. 日志分析

public class LogAnalyzer {
    // Map函数:提取IP地址和访问时间
    public static class LogMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);
        private Text ipAddress = new Text();
        
        public void map(LongWritable key, Text value, Context context) 
                throws IOException, InterruptedException {
            String line = value.toString();
            String ip = extractIP(line); // 自定义IP提取方法
            if (ip != null) {
                ipAddress.set(ip);
                context.write(ipAddress, one);
            }
        }
    }
    
    // Reduce函数:统计每个IP的访问次数
    public static class LogReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();
        
        public void reduce(Text key, Iterable<IntWritable> values, Context context) 
                throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }
}

2. 数据去重

public class DataDeduplication {
    public static class DedupMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
        public void map(LongWritable key, Text value, Context context) 
                throws IOException, InterruptedException {
            // 直接输出整行作为key
            context.write(value, NullWritable.get());
        }
    }
    
    public static class DedupReducer extends Reducer<Text, NullWritable, Text, NullWritable> {
        public void reduce(Text key, Iterable<NullWritable> values, Context context) 
                throws IOException, InterruptedException {
            // 相同key只输出一次
            context.write(key, NullWritable.get());
        }
    }
}

优缺点分析

优点

  1. 高容错性:自动处理节点故障
  2. 高扩展性:可扩展到数千个节点
  3. 数据本地化:减少网络传输
  4. 编程模型简单:只需实现Map和Reduce函数
  5. 生态成熟:丰富的工具和库支持

缺点

  1. 延迟高:不适合实时处理
  2. 迭代计算效率低:每次迭代都需要重新读写数据
  3. 编程模型限制:不是所有算法都适合MapReduce
  4. 资源利用率:Map和Reduce阶段不能重叠执行
  5. Shuffle开销:大量数据在网络间传输

与其他框架对比

特性Hadoop MapReduceApache SparkApache Flink
处理模式批处理批处理+流处理流处理优先
内存使用磁盘为主内存为主内存为主
延迟高中低
容错机制检查点RDD血统检查点
编程语言Java为主Scala/Java/PythonJava/Scala
迭代计算效率低效率高效率高

总结

Hadoop MapReduce作为大数据处理的开山之作,为分布式计算提供了简单而强大的编程模型。虽然在某些场景下已被更现代的框架如Spark所取代,但其在数据本地化、容错机制和大规模批处理方面的设计理念仍然影响着现代大数据处理系统。理解MapReduce的工作原理对于深入学习大数据技术栈具有重要意义。

Hadoop深入浅出MapReduce详解(全网最细) 文章目录前言-MR概述1.Hadoop MapReduce设计思想及优缺点设计思想优点:缺点:2. Hadoop MapReduce核心思想3.MapReduce工作机制剖析MapReduce运行机制过程描述第一阶段:作业提交(图1-4步)第二阶段:作业初始化(图5-7步)第三阶段:任务的分配(图8)第四阶段:任务的执行(图9-11)第五阶段:作业完成Tips 知识点:进度和状态更新4.MR各组成部分工作机制原理4.1概览:4.2 MapTask工作机制4.3 ReduceTask工作机制4.4shuffl 阅读详情

相关推荐

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

MapReduce是一个分布式离线计算框架,专门用于处理大数据场景中与实时性无关的一些离线计算任务。MapReduce的数据输入一般是HDFS,然后经过InputFormat进行输入格式化,变成格式;然后执行用户实现的Mapper类型的map方法,进行数据映射,映射处理的结果也是格式;然后执行一个shuffle过程,对映射结果进行按key进行分组分区,把同一区域的所有KV发送到同一个Reducer,由一个节点进行;Reducer对同一个key分组下的所有value进行聚合操作;

weixin_43889578的博客 3369

【Hadoop】MapReduce详解

MapReduce详解MapReduce介绍MapReduce的基本编程模型MapReduce的计算过程1. Map阶段可以概括为5个步骤:2. Reduce节点也可以分为5个步骤:设置ReduceTask并行度(个数)关于分片(Split)关于ShuffleMap端的shuffleReduce端的ShuffleShuffle流程详解补充问题:MapReduce分区相关问题理解1.Partition的原理和作用2.Partition的使用3.分组的概念和使用分组排序的步骤4.Combiner的使用概念实现步

小哲的博客 9448

Hadoop:一文详解MapReduce的工作机制

Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。因此,对于MapReduce,可以简洁地认为,它是一个软件框架,海量数据是它的“菜”,它在大规模集群上以一种可靠且容错的方式并行地“烹饪这道菜”。

Machine Learning with Tutors 7379

Hadoop之mapreduce详解(基础篇)

本篇文章主要从mapreduce运行作业的过程,shuffle,以及mapreduce作业失败的容错几个方面进行详解。转载:https://www.cnblogs.com/zsql/p/11600136.html 目录 一、mapreduce作业运行过程 1.1、mapreduce介绍 1.2、作业运行过程 二、shuffle 2.1、map端 2.2、reduce端 2.3、总结 三、作业失败和容错 3.1、任务运行失败 3.2、application master运行失败 3.3

qq_38147044的博客 4216

VCSA 6.7证书过期别慌!手把手教你通过SSH修改系统时间恢复登录(附STS证书修复脚本)

本文详细介绍了VCSA 6.7证书过期的应急处理方案,包括通过SSH修改系统时间临时恢复登录、全面更新证书体系以及专项修复STS证书的实战步骤。文章还提供了后期验证和系统加固的建议,帮助运维人员有效应对证书过期问题,确保虚拟化平台的稳定运行。

weixin_31292729的博客 416

HFSS螺旋线圈的设计与仿真

undefined.全局变量在这里进行设置:Project/Project Properties, browse and setup the global variables.undefined.方程中的局部变量设置:HFSS/Design Properties, browse and setup the local variables。按照下图填写曲线的方程内容:fill the parameters according to the setup in the following picture。

johnboat的专栏 3847

Hadoop之 MapReduce (Shuffle机制详解)

文章目录3、Shuffle机制详解3.1 Shuffle 机制3.2 Partition3.3 Partition分区案例练习3.4 WritableComparable 排序3.5 WritableComparable 排序案例实操(全排序)3.6 WritableComparable 排序案例实操(区内排序)3.7 Combiner 合并3.8 Combiner 合并案例实操 3、Shuffle机制详解 3.1 Shuffle 机制 ​ Map 方法之后,Reduce 方法之前的数据处理过程称之为Shu

weixin_48067943的博客 466

SecOC专题之新鲜值TripCnt

本系列为一步步拆解新鲜值的分发及管理而撰写文章属于原创,根据自身开发经验及理解撰写,若有错误请指出Trip Counter是新鲜值中变化最慢的一个part,并且自增到最大值时,会从头开始翻转计数。Trip Counter需要收发双方都保存,由于其变化较慢,所以不会经常进行同步该值。这就要求开发过程中保证每次对该值的读写必须要正确。

qq_22969363的博客 1156

Hadoop_MapReduce_Shuffle机制—图文详解

MapReduce—Shuffle机制图文详解

喻师傅的学习笔记 2487

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6122

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

Hadoop MapReduce Shuffle机制之WritableComparable排序 | 案例分析 【图文详解】

文章目录一、WritableComparable排序是什么东西?二、排序分类三、案例分析1、全排序与二次排序1)需求分析2)撸代码2、区内排序(又叫部分排序)1)需求分析2)撸啊撸代码 一、WritableComparable排序是什么东西? Map之后、Reduce之前的数据处理过程统称为Shuffle机制 WritableComparable排序是Shuffle的一部分功能,它的作用是如果自定义数据类型做为key,则实现该接口,对所需要的字段进行排序。 MapReduce规定必须对key进行排序,如

lesileqin的博客 1196

rk3506上移植lvgl应用

本文介绍在RK3506开发板上移植和运行LVGL图形库的方法。

m0_60805802的博客 1163

Hadoop之 MapReduce (MapTask 和 ReduceTask 工作机制详解)

文章目录4 、MapTask 工作机制5 、ReduceTask工作机制 4 、MapTask 工作机制 (1)Read阶段:MapTask 通过 InputFormat 获得的 RecordReader,从输入 InputSplit 中解析出一个个 key/value。 (2)Map 阶段:该节点主要是将解析出的 key/value 交给用户编写 map() 函数处理,并产生一系列新的 key/value。 (3)Collect 收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用Outp

weixin_48067943的博客 442

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4042

自动驾驶---Planning模块详细介绍(以Apollo为例)

主要介绍高速场景下Planning模块,至于低速的泊车场景对比高速场景或者城区场景有比较大的差距(后面也会介绍泊车场景),本篇Planning介绍主要包括三大子模块Routing,Behavioural Planning以及Motion Planining,并且对比较重要的Decider和Optimizer都做了通俗化的说明供大家思考,以便于后续理解更深入的内容,后面有时间会再开一些篇幅对这些模块进行更加深入的讲解。

智能汽车人的博客 2087

Hadoop_day06_MapReduce 的工作机制详解

1. MapTask 工作机制 简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给map(用户自己实现的)进行处理,数据被map处理结束之后交给OutputCollector收集器,对其结果key进行分区(默认使用hash分区),然后写入buffer,每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲...

cpz 172

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hadoop容错机制详解:从MapReduce重试到YARN HA故障恢复

在分布式系统中,容错能力是保障大数据作业稳定运行的核心基石。Hadoop作为主流的大数据平台,通过多层级故障恢复机制应对节点宕机、网络抖动等异常:Task级别失败重试保证单点任务可自愈,ApplicationMaster重新拉起恢复作业进度,ResourceManager结合ZooKeeper实现高可用切换,避免集群单点故障。这些机制共同构成从任务、应用到集群的完整容错链路,让MapReduce作业在复杂生产环境中依然能够安全完成计算。本文基于真实故障演练,深入剖析重试参数背后的权衡逻辑,并给出黑名单机制、

weixin_32597009的博客 254

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Hadoop三大核心组件原理详解:HDFS、MapReduce与YARN工作机制

在大数据技术体系中,分布式存储与分布式计算是两大基石。HDFS作为分布式文件系统,通过元数据管理、副本机制与机架感知策略,保证了海量数据的高可靠存储;MapReduce则采用分而治之的思想,将复杂任务拆解为Map与Reduce阶段,并通过Shuffle机制完成数据重组。而YARN作为统一的资源调度层,以Container为单位分配内存与CPU,使得多计算框架可以共享集群资源。理解这三者的协同工作原理,不仅有助于排查集群故障、优化任务性能,更是学习Spark、Flink等现代计算框架的必备基础。本文从架构分工

weixin_28235513的博客 326

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Hadoop MapReduce八大步骤以及Yarn工作原理详解

Hadoop是市面上使用最多的大数据分布式文件存储系统和分布式处理系统, 其中分为两大块分别是hdfs和MapReduce, hdfs是分布式文件存储系统, 借鉴了Google的GFS论文. MapReduce是分布式计算处理系统, 借鉴了Google的MapReduce论文. 本文着重来梳理下新版也就是2.3后的Hadoop的MapReduce部分, 也就是Yarn框架, 以及MapReduce...

面向星辰大海 1万+

【Hadoop】(三) Hadoop计算框架 MapReduce

分布式计算的基本原理 思想 mapreduce执行过程 整个运行过程 Yarn资源调度 shuffle阶段 环状数组,超出80M溢出写入硬盘

weixin_42804692的博客 1133

MapReduce底层原理详解:大案例解析(第32天)

MapReduce(简称MR)是Hadoop框架中的一个核心组件,它主要用于大规模数据集的并行处理。MapReduce的底层原理涉及数据的分片、Map阶段的处理、Shuffle过程以及Reduce阶段的处理等多个环节。本文通过案例解析方式对MR底层原理进行详细解析

syhiiu的博客 2130

一文了解 Hadoop 运行机制

大数据技术栈在当下已经是比较成熟的了,Hadoop 作为大数据存储的基石,其重要程度不言而喻,作为一个想从 java 后端转向大数据开发的程序员来说,打好 Hadoop 基础,就相当于夯实建造房屋的地基,本文以上图结构为基本,旨在帮助大家快速了解 Hadoop 运行机制。 HDFS 篇 HDFS就是大家熟知的分布式存储的文件系统,它包括 3 ...

a781613438的博客 894

大数据:Hadoop(MapReduce)

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

2302_80219214的博客 769

Hadoop生态——MapReduce

文章目录MapReduce*MR的执行流程?MR的整体执行流程:(Yarn模式) MapReduce *MR的执行流程? MR的整体执行流程:(Yarn模式) 在MapReduce程序读取文件的输入目录上存放相应的文件。 客户端程序在submit()方法执行前,获取待处理的数据信息,然后根据集群中的参数的配置形成一个任务分配规划。 客户端提交切片信息给Yarn,Yarn中的resourcemanager启动 ...

weixin_47391932的博客 1348

WordCount背后的MapReduce原理全面详解

Hadoop之WordCount详解 这应该是一篇比较全面的MapReduce之WordCount文章了 耐心看下去 1,创建本地文件 在hadoop-2.6.0文件夹下创建一个文件夹data,在其中创建一个text文件 mkdir data cd data vi hello 再在当前文件夹中创建一个apps文件夹,方便后续传jar包 mkdir apps 将文本文件传...

一直在努力的小渣渣 5745
上一篇: 分布式事务实现方式详解
下一篇: Kafka高吞吐量机制深度解析
d3y1
博客等级 码龄12年 1438粉丝 2787原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值