MapReduce工作流程(Hadoop3.x)

news2024/9/21 18:53:37

MapReduce 是一种用于并行处理大规模数据集的——编程模型和处理框架。它通常用于分布式计算环境中,如Apache Hadoop。
在这里插入图片描述

工作流程

1. 切分阶段(Splitting

  • 数据集被分成多个数据块,每个数据块的大小通常在64MB到128MB之间。
  • 切分可以按照数据的行数、字节数或其他标准进行。
  • 数据块的切分通常在输入阶段完成,然后将切分后的数据块分配到集群中的不同节点上进行处理。

示例

假设我们有一个大型的文本文件 input.txt,大小为 1GB,存储在 Hadoop 分布式文件系统(HDFS)中。现在我们要对这个文件进行 Word Count(词频统计)操作,即统计每个单词出现的次数。

  1. 数据块划分
    • HDFS 默认的块大小为 128MB。因此,1GB 的文件将被划分成大约 8 个数据块(实际划分可能会有细微差别),每个数据块的大小接近 128MB。

Tips:如果磁盘(固态)读写速度较快,也可以设置为256MB大小,块的大小设置主要取决于磁盘传输速率。

  1. 切分策略

    • 对于文本文件,通常的切分策略是按行切分。即每行作为一个数据块,这样可以保证切分后的数据块中不会跨越行,方便后续处理。
    • 例如,如果一个数据块中包含多行文本,则每行都属于同一个数据块,不会被拆分到不同的数据块中。
  2. 切分过程

    • Hadoop 提供了默认的 TextInputFormat 类来处理文本文件的切分操作。这个类会按照指定的切分策略(默认按行)将输入文件切分成若干个数据块。
    • 在切分过程中,TextInputFormat 首先会获取输入文件的元数据(如文件大小、块大小等),然后根据切分策略确定每个数据块的起始偏移量和大小。
    • 最终,TextInputFormat 返回一个包含切分信息的数据结构(比如 InputSplit 对象),用于后续的 Map 任务处理。
  3. 切分器接口

    • TextInputFormat 类实现了 InputFormat 接口,其中包含了 getSplits()createRecordReader() 方法。
    • getSplits() 方法负责确定输入文件的切分方式,返回一个包含切分信息的数据结构(比如 InputSplit 对象)。
    • createRecordReader() 方法负责创建一个用于读取数据块内容的 RecordReader 对象,以便后续的 Map 任务处理。
  4. 切分粒度控制

    • 在切分过程中,可以通过调整配置参数(如块大小、最小切分大小等)来控制切分粒度,以满足作业性能和效率的要求。
    • 例如,可以根据文件大小和集群资源情况来调整块大小,以平衡切分粒度和并行度。

通过切分阶段的处理,我们将大型文本文件切分成若干个适合并行处理的数据块,为后续的 Map 阶段提供了并行化的基础。这样,每个 Map 任务可以独立处理一个数据块,从而提高作业的处理速度和效率。


2. 映射阶段(Mapping

当数据被切分成适当大小的数据块后,接下来就是映射阶段(Mapping Stage),也称为 Map 阶段。在这个阶段,每个数据块都会被传递给一个或多个 Map 任务进行处理。

  1. Map 任务的执行

    • 映射阶段,每个数据块都会被分配给一个 Map 任务来处理。这些 Map 任务在集群中的不同节点上并行执行,每个节点可能会同时运行多个 Map 任务,从而实现并行处理。
    • 每个 Map 任务都会读取其分配到的数据块,并对数据进行处理。
  2. 映射函数的应用

    • 在 Map 任务中,数据块会经过映射函数(Mapper Function)的处理。映射函数负责将输入数据转换成一组中间键值对(Key-Value Pairs),以便后续的排序和归约操作。
    • 典型的映射函数是对输入数据进行解析和分割,然后提取出关键信息,并将其作为键值对的键(Key)和值(Value)。例如,在 Word Count 示例中,映射函数会将每个单词作为键,出现次数作为值。
  3. 中间键值对的生成

    • 映射函数生成的中间键值对通常会被写入临时存储,比如内存或磁盘中的缓冲区。这些中间结果将在后续的排序和归约阶段被用到。
    • 为了减少数据写入的开销,通常会使用缓冲区来暂存中间结果,并在缓冲区达到一定大小或者映射任务完成时才进行写入操作。
  4. 并行性与负载均衡

    • 映射阶段的并行性取决于数据块的切分粒度集群中可用的节点资源。如果数据块切分得足够细致,并且集群中有足够的节点可用,那么可以实现高度的并行处理。
    • 此外,为了保证作业的性能和效率,系统会尽可能地保持 Map 任务的负载均衡,即使在数据分布不均匀的情况下也能够尽量平均地分配任务。
  5. 错误处理与容错机制

    • 在映射阶段,系统还会监控和处理可能出现的错误和异常情况,以确保作业的顺利执行。例如,如果某个 Map 任务失败或超时,系统会重新调度任务或将任务分配给其他可用节点执行,以保证作业的正常进行。
    • 此外,系统还会记录和监控任务执行的日志信息,以便于后续的故障排查和性能优化。

通过映射阶段的处理,我们能够将输入数据转换成一组中间键值对,并通过并行处理实现高效的数据处理和转换。这为后续的排序和归约阶段提供了基础,从而实现了整个 MapReduce 作业的并行化和分布式处理。


3. 分组和排序阶段(Shuffling and Sorting

分组和排序阶段(Shuffling and Sorting Stage)是在映射阶段之后,在归约阶段之前的重要步骤。这个阶段主要负责将映射阶段产生的中间键值对按照键进行分组,并对每组中的键值对进行排序。这样做的目的是为了将具有相同键的键值对聚集到一起,以便后续的归约阶段能够更高效地进行处理。

  • 在映射阶段完成后,所有的键值对会被按照键进行排序,并根据键的哈希值分组
  • 这个过程确保了具有相同键的键值对会被发送到同一个 Reduce 任务中,以便进行后续的处理。
  • 分组和排序通常是在内存中进行的,如果内存不足,会将部分数据写入磁盘进行临时存储。
  1. 数据分组

    • 在分组阶段,MapReduce 框架会将中间键值对按照进行分组。具有相同键的键值对会被聚集到同一个分组中。
    • 这一步是为了确保在后续的归约阶段中,具有相同键的键值对会被发送到同一个归约任务进行处理。这样可以避免在网络传输过程中产生大量的数据移动和混乱。
  2. 数据排序

    • 分组之后,每个分组内的键值对会按照键的顺序进行排序。通常情况下,会使用稳定的排序算法(如归并排序)来对键值对进行排序。
    • 排序的目的是为了确保在后续的归约阶段中,具有相同键的键值对能够按照顺序进行处理。这样可以简化归约任务的逻辑,并提高整个作业的性能和效率。
  3. 网络传输

    • 在分组和排序阶段,可能涉及大量的数据传输和网络通信。因为具有相同键的键值对需要被发送到同一个归约任务进行处理,所以可能需要跨越不同的节点进行数据传输。
    • 为了提高性能和减少网络开销,MapReduce 框架通常会采取一些优化策略,如合并相邻的分组和批量传输数据等。
  4. 容错处理

    • 在分组和排序阶段,MapReduce 框架需要处理可能出现的错误和异常情况,如节点故障、网络超时等。系统会采取一些容错机制来处理这些问题,比如重新调度任务或重新传输数据。

通过分组和排序阶段的处理,MapReduce 可以将映射阶段产生的中间结果按照键进行分组和排序,为后续的归约阶段提供了有序的数据流。这样一来,归约任务就可以更高效地处理数据,从而提高整个作业的性能和效率。


4. 归约阶段(Reducing

归约阶段(Reducing Stage)是 MapReduce 模型中的最后一个阶段,用于对分组和排序阶段产生的中间结果进行归约操作。在归约阶段,具有相同键的键值对会被发送到同一个归约任务进行合并和处理。

  • 每个 Reduce 任务处理一个键及其对应的一组值。
  • Reduce 任务对这组值进行处理,并生成最终的结果。
  • 这个阶段通常涉及对值的聚合、汇总或其他计算操作,如求和、平均值、最大值、最小值等。
  1. 任务分配

    • 在归约阶段,MapReduce 框架会根据中间键值对的键,将具有相同键的键值对发送到同一个归约任务进行处理。这样可以确保具有相同键的键值对被聚合到同一个任务中进行归约操作。
    • 归约任务通常会在不同的节点上并行执行,每个节点可能会同时运行多个归约任务,以实现高效的数据处理。
  2. 归约函数的应用

    • 在归约阶段,每个归约任务会使用归约函数(Reducer Function)对具有相同键的键值对进行合并和处理。归约函数的主要作用是将相同键的多个值合并成一个或多个更终结果。
    • 归约函数可以根据具体的需求来定义,常见的归约操作包括求和、计数、取最大/最小值等。
  3. 局部归约

    • 了提高性能和减少数据传输开销,通常会在归约阶段进行局部归约操作。局部归约指的是在归约任务接收到中间结果之后,先对部分数据进行归约操作,然后再将结果发送到其他归约任务进行最终的合并。
    • 局部归约可以减少数据在网络上传输的数量和距离,从而提高整个作业的性能和效率。
  4. 结果输出

    • 归约任务处理完所有的中间结果后,会生成最终的归约结果。这些结果通常会被写入到输出文件或存储系统中,以供后续的数据分析或其他应用程序使用。
    • 输出的格式可以根据具体的需求来定义,常见的格式包括文本文件、序列文件、数据库等。
  5. 容错处理

    • 在归约阶段,可能会出现一些错误和异常情况,如节点故障、数据丢失等。MapReduce 框架会采取一些容错机制来处理这些问题,例如重新调度任务、重新执行任务或重新传输数据。

通过归约阶段的处理,MapReduce 可以将具有相同键的键值对进行合并和处理,生成最终的归约结果。这样一来,MapReduce 可以处理大规模数据并实现并行化和分布式处理,从而提高作业的性能和效率。


5. 输出阶段(Output

输出阶段(Output Stage)是 MapReduce 模型中的最后一个阶段,在归约阶段之后,负责将最终的归约结果写入到输出文件或存储系统中。在这个阶段,MapReduce 作业将生成的结果提供给用户或其他应用程序使用。

  1. 结果整理

    • 在归约阶段完成后,每个归约任务会生成一部分最终结果。在输出阶段之前,这些结果可能需要被进一步整理和合并,以确保最终的输出数据格式符合用户的需求。
    • 整理的过程可能包括对结果进行排序、去重、格式转换等操作,以满足用户的要求或系统的规范。
  2. 结果写入

    • 一旦结果被整理和准备好,MapReduce 框架就会将最终的归约结果写入到输出文件或存储系统中。这些输出文件可以存储在分布式文件系统(如HDFS)中,也可以写入到数据库、对象存储或其他类型的数据存储系统中。
    • 输出文件通常会根据用户指定的格式进行写入,例如文本文件、序列文件、Avro 文件等。
  3. 结果分发

    • 在某些情况下,输出结果可能需要被分发到多个节点或多个存储系统中,以供后续的数据处理或分析使用。MapReduce 框架会负责将结果分发到指定的位置,并确保数据的完整性和一致性。
    • 结果分发的过程可能涉及网络传输和数据复制,因此通常会考虑系统的性能和可靠性。
  4. 结果检验

    • 输出阶段完成后,通常会对生成的结果进行检验和验证,以确保数据的准确性和完整性。这可能包括对数据进行抽样、统计分析或与预期结果进行比对等操作。
    • 结果检验的目的是确保作业执行的正确性,并及时发现和解决可能存在的问题或异常。
  5. 清理资源

    • 最后,一旦输出阶段完成并且结果被成功写入到目标位置,MapReduce 框架会进行一些清理工作,例如释放资源、关闭临时文件等。这样可以确保系统资源得到有效利用,同时保持系统的稳定性和可靠性。

通过输出阶段的处理,MapReduce 作业可以生成最终的结果,并将其提供给用户或其他应用程序使用。这些结果可以用于进一步的数据分析、决策支持或其他业务应用,从而实现大规模数据处理和分析的目标。

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

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

相关文章

nginx反向代理及负载均衡

node1192.168.136.55Nginx主负载均衡器node3192.168.136.57Web01服务器node4192.168.136.58Web02服务器node5192.168.135.131客户端(测试) nginx反向代理 1. 安装nginx 三台机器都安装nginx yum install nginx -y 2. 配置用于测试的Web服务(以下操作…

C++进阶:搜索树

目录 1. 二叉搜索树1.1 二叉搜索树的结构1.2 二叉搜索树的接口及其优点与不足1.3 二叉搜索树自实现1.3.1 二叉树结点结构1.3.2 查找1.3.3 插入1.3.4 删除1.3.5 中序遍历 2. 二叉树进阶相关练习2.1 根据二叉树创建字符串2.2 二叉树的层序遍历I2.3 二叉树层序遍历II2.4 二叉树最近…

ChatGPT研究论文提示词集合1-【主题选择与问题研究、文献综述】

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 目录 1.主题选择与问题定义 2.文献综述 3.书籍介绍 AIPaperPass智能论文写作平台 近期小编按照学术论文的流程,精心准备一套学术研究各个流程的提示词集合。总共14个步骤…

AI翻译英语PDF文档的3种方法

短的文章,直接丢进kimichat、ChatGPT里面很快就可以翻译完成,而且效果很佳。但是,很长的PDF文档整篇需要翻译,怎么办呢? ●腾讯交互翻译TranSmart https://transmart.qq.com/ 软件下载后,点击左边的文件翻…

天才简史——Sylvain Calinon

一、研究方向 learning from demonstration(LfD)领域的专家,机器人红宝书(Springer handbook of robotics)Robot programming by demonstration章节的合作者。主要研究兴趣包括: 机器人学习、最优控制、几…

从零自制docker-11-【pivotRoot切换实现文件系统隔离】

文章目录 busyboxdocker run -d busybox topcontainerId(docker ps --filter "ancestorbusybox:latest"|grep -v IMAGE|awk {print $1})docker export -o busybox.tar $containerId or sudo docker export 09bbf421d93f > ./busybox.tar tar -xvf busybox.tar -C …

Python | Leetcode Python题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n len(nums)for i in range(n):while 1 < nums[i] < n and nums[nums[i] - 1] ! nums[i]:nums[nums[i] - 1], nums[i] nums[i], nums[nums[i] - 1]for …

域名信息查询同款WHOIS源码

域名查询一般是指查询域名的whois注册信息&#xff0c;域名WHOIS是当前域名系统中不可或缺的一项信息服务。在使用域名进行Internet冲浪时&#xff0c;很多用户希望进一步了解域名、名字服务器详细信息&#xff0c;这就会用到WHOIS。 域名信息查询同款WHOIS源码

在Postgres中,如何有效地管理大型数据库的大小和增长

文章目录 一、定期清理和维护1. VACUUM和ANALYZE2. 删除旧数据和归档 二、分区表三、压缩数据四、配置优化1. 调整维护工作负载2. 监控和日志 五、使用外部存储和扩展1. 外部表和FDW2. 扩展和插件 六、定期备份和恢复测试结论 管理大型数据库的大小和增长是数据库管理员&#x…

EA包图上嵌套的包位置不对

Extreme 2024-4-11 11:36 我从工具栏把一个包拖在另一个包里面&#xff0c;可是项目树上两个包的位置并列&#xff0c;拖了几次结果都一样。我的目的是做一个多层级的包图&#xff0c;是不是&#xff08;EA&#xff09;不能在图上做&#xff1f; UMLChina潘加宇 确实是这样&a…

m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 m个人的成绩…

强固型工业电脑在轮胎成型机设备行业应用

轮胎成型机设备行业应用 项目背景 我国是一个轮胎生产与出口大国&#xff0c;在轮胎的生产过程中&#xff0c;成型工序是生产的关键工序&#xff0c;将半成品的部件按照轮胎的技术规范在成型机上组装成胎胚&#xff0c;工艺较为复杂&#xff0c;对设备加工和定位精度要求较高。…

【Linux学习】gcc与g++的使用与程序翻译的过程

文章目录 修改sudo用户名单gcc与g指令gcc用法g用法 程序翻译的过程函数库动态库与静态库什么是动静态库&#xff1f;动静态库的优缺点ldd指令 这里补充一个前面遗漏的知识&#xff1a; 修改sudo用户名单 必须使用root超级用户进行修改&#xff0c;普通用户是不能访问修改。 …

Spring 事务实现方式:

Spring 事务实现方式&#xff1a; Spring并不直接支持事务&#xff0c;只有当数据库支持事务的时候&#xff0c;Spring才支持事务&#xff0c;Spring只不过简化了开发人员实现事务的开发步骤 Spring事务的实现方式有两种&#xff1a; 一、基于申明式事务&#xff1a; Service…

CCF-CSP真题《202312-2 因子化简》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202312-2试题名称&#xff1a;因子化简时间限制&#xff1a;2.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 题目背景 质数&#xff08;又称“素数”&#xff09;是指…

安装AngusTester节点代理

一、介绍 节点代理程序(AngusAgent)提供三方面作用&#xff1a; 通过启动"执行器(AngusRunner)"来执行脚本任务。在代理节点上运行和管理Mock服务。收集、监控和报告关于节点的各种指标和性能数据&#xff0c;该数据用于在稳定性测试中可分析节点资源使用率。 二、…

Java高阶私房菜:高并发之线程池底层原理学习

以往我们需要获取外部资源&#xff08;数据源、Http请求等&#xff09;时&#xff0c;需要对目标源创建链接对象&#xff0c;三次握手成功后方可正常使用&#xff0c;为避免持续的资源占用和可能的内存泄漏&#xff0c;还需要调用目标对象close方法释放资源销毁对象。这一建一销…

【PCL】教程conditional_euclidean_clustering 对输入的点云数据进行条件欧式聚类分析...

[done, 3349.09 ms : 19553780 points] Available dimensions: x y z intensity 源点云 Statues_4.pcd 不同条件函数output.pcd 【按5切换到强度通道可视化】 终端输出&#xff1a; Loading... >> Done: 1200.46 ms, 19553780 points Downsampling... >> Done: 411…

ssm064农产品仓库管理系统系统+jsp

农产品仓库管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本农产品仓库管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者…

Llama 3“智商”测试:英文提示表现亮眼,中文不完美但差强人意!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…