MapReduce——数据切片与MapTask并行度决定机制

MapReduce——数据切片与MapTask并行度决定机制


MapReduce 数据切片和 Map 任务的并行度决定机制是 MapReduce 框架中两个重要的概念,它们直接影响作业的执行效率和性能。

1.数据切片(Data Splits

  • 数据切片是指将输入数据拆分成更小的块或片段,以便并行处理。

  • 在 MapReduce 中,数据切片是由 InputFormat 定义的,InputFormat 是负责将输入数据逻辑上分成独立的块并交给 Map 任务处理的组件。

  • 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

  • 数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储

  • 数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask

  • 数据切片的大小取决于多个因素,包括文件的大小、输入格式以及 Hadoop 配置中的一些参数。

  • 通常情况下,数据切片的大小会被设置为 HDFS 块大小的整数倍,以便尽可能地利用 Hadoop 分布式文件系统的数据复制和数据本地性特性。


2.并行度问题

MapTask 的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。

思考:

  • 1G的数据,启动8个MapTask,可以提高集群的并发处理能力。
  • 那么1K的数据,也启动8个MapTask,会提高集群性能吗?
  • MapTask并行任务是否越多越好呢?
  • 哪些因素影响了MapTask并行度?

3.Map 任务的并行度决定机制

  • Map 任务的并行度取决于数据切片的数量和集群的可用资源。

  • 在运行时,MapReduce 框架会为每个数据切片启动一个 Map 任务,这些任务可以并行执行。

  • 但是,并不是每个数据切片都会有一个独立的 Map 任务,因为有时候数据切片的数量可能会超过集群中可用的 Map 任务槽(slots)数量

  • 在 Hadoop 中,默认情况下,一个数据切片会有一个 Map 任务来处理,但是这个规则并不是绝对的。

  • 有时候,框架可能会选择将多个数据切片分配给一个 Map 任务,以减少任务启动和管理的开销。这种情况下,一个 Map 任务会处理多个数据切片,但是任务的处理时间可能会更长。

  • Map 任务的并行度也受到集群资源的限制,包括可用的计算节点数量、每个节点的 CPU 和内存资源等。

  • 如果集群资源有限,那么可能无法同时启动足够数量的 Map 任务,这样就会影响作业的并行度和执行效率。


4.TextInputFormat

FileInputFormat 实现类

  • 思考:在运行MapReduce 程序时,输入的文件格式包括:基于行的日志文件、二进制格式文件、数据库表等。
  • 那么,针对不同的数据类型,MapReduce是如何读取这些数据的呢?
  • FileInputFormat 常见的接口实现类包括TextInputFormatKeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat 和自定义 InputFormat 等。

TextInputFormat 是 Hadoop 中的一种输入格式类,用于处理文本文件。它将文本文件视为一系列的行(即文本文件中的每一行都作为一个记录),并将每行作为一个键值对的键,其中键是文件中的偏移量(即行在文件中的位置),值是文本行内容。

工作原理

TextInputFormat 的工作原理如下:

  1. 切片: 切片是输入数据在 MapReduce 作业中的基本处理单元。TextInputFormat 默认按文件进行切片,每个文件作为一个切片。(大量小文件则处理效率很低)因此,如果输入目录包含多个文件,每个文件将会被视为一个独立的切片。

  2. 记录读取: 在每个切片内部,TextInputFormat 会将文本文件按行进行读取。它将每一行文本作为一个记录,并将文件中的偏移量作为记录的键。因此,每个键值对的键是一个长整型数值,表示文本行在文件中的位置;值是一个字符串,表示文本行的内容。

  3. 生成键值对: TextInputFormat 将每一行文本转换为一个键值对,其中键是文件中的偏移量,值是文本行内容。

  4. 传递给 Mapper: 生成的键值对将会作为 Mapper 的输入。Mapper 将会按照用户定义的逻辑对每个键值对进行处理,并生成中间结果。

示例

假设有一个文本文件包含以下内容:

Hello, world!
This is a sample text file.

使用 TextInputFormat 作为输入格式,该文件将被切分为两个记录(即两行文本),每个记录将被表示为一个键值对:

  • 键:0,值:“Hello, world!”
  • 键:15,值:“This is a sample text file.”

这些键值对将作为 Mapper 的输入,并根据用户定义的逻辑进行处理。例如,可以编写一个 Mapper,计算每个单词出现的次数,然后将结果传递给 Reducer 进行进一步处理。


5.CombineTextInputFormat 切片机制

框架默认的TextInputFormat 切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个 MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。

CombineTextInputFormat 是 Hadoop 中的一个输入格式类,用于处理文本文件。CombineTextInputFormat 用于小文件过多的场景,它的主要特点是将小文件进行合并,并生成更大的数据块,从而减少作业的 Map 任务数量,提高作业的执行效率。

与普通的 TextInputFormat 不同,CombineTextInputFormat 旨在减少由于小文件过多而导致的 Map 任务数量过多、任务启动慢、作业执行效率低下等问题。

切片机制详解

CombineTextInputFormat 的切片机制主要有以下特点:

  1. 按文件大小切片: 与普通的 TextInputFormat 类似,CombineTextInputFormat 也是按文件为单位进行切片的。每个输入文件都被视为一个独立的切片。

  2. 按行切片: 在文件内部,CombineTextInputFormat 将文件按行进行切片,与 TextInputFormat 相同。每行文本将被视为一个记录,并生成一个键值对。

  3. 合并小文件: CombineTextInputFormat 的一个关键特性是它会尝试合并小文件生成更大的切片。这样可以减少作业中 Map 任务的数量,提高作业的执行效率。合并小文件的具体方式取决于两个参数的配置:

    • mapreduce.input.fileinputformat.split.minsize:指定切片的最小大小。如果一个小文件的大小小于该阈值,它将会被合并到其他切片中。
    • mapreduce.input.fileinputformat.split.maxsize:指定切片的最大大小。如果一个文件过大,超过了该阈值,它将被拆分成更小的切片。
  4. 根据输入目录中文件的大小动态调整切片: CombineTextInputFormat 会根据输入目录中文件的大小动态调整切片的大小和数量,以尽可能地合并小文件。

示例

假设有一个输入目录包含了多个小文件,每个文件都是几百 KB 大小。如果使用 CombineTextInputFormat 作为输入格式,并设置了合适的参数,那么它会将这些小文件合并成更大的切片,并将其作为一个整体交给 Map 任务进行处理。这样做可以大大减少作业中 Map 任务的数量,提高作业的执行效率。

总之,CombineTextInputFormat 的切片机制通过合并小文件,生成更大的切片,从而减少作业的 Map 任务数量,提高作业的执行效率,特别适用于处理大量小文件的场景。

通过合并小文件并生成更大的切片,CombineTextInputFormat 可以减少作业中 Map 任务的数量,从而提高作业的执行效率。同时,它也能够更好地利用 Hadoop 分布式文件系统的数据本地性特性,减少数据传输的开销。

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

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

相关文章

开发语言漫谈-Object C

C的家族还有个另类,Object C int main(int argc, char *argv[]) { autoreleasepool { NSLog("Hello World!"); } return 0; } 这里还能看到C的风采,但到这里就偏离了: [obj method: argument]; 这也体现了这门语言…

Python 入门指南(四)

原文:zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者:飞龙 协议:CC BY-NC-SA 4.0 第十章:哈希和符号表 我们之前看过列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整…

Linux命令学习—Apache 服务器(上)

1.1、http 服务原理 http 超文本传送协议 80 端口 https 安全的超文本传输协议 443 端口 基于 C/S(客户端/服务端)模型 协议流程: 连接:客户端与服务端建立连接 请求:客户端向服务端发送请求 应答:服务端响应,将结果…

美团财务科技后端一面:如何保证数据一致性?延时双删第二次失败如何解决?

更多大厂面试内容可见 -> http://11come.cn 美团财务科技后端一面:项目内容拷打 美团财务科技后端一面:项目相关面试题,主要包含 Zset、延时双删失败重试、热点数据解决、ThreadLocal 这几个方面相关的内容 由于前几个问题是对个人项目的…

C++ STL 容器 list

目录 1. list 对象2. list 迭代器2.1 实现2.2 迭代器失效 本文测试环境为 gcc 13.1 1. list 对象 std::list 底层是一个双向循环链表 list 对象本身包含一个头节点,通过指针指向元素节点,节点定义如下 头节点 header 和元素节点 node 都继承于基类 no…

历史遗留问题1-Oracle Mysql如何存储数据、索引

在学习到Oracle redo和undo时,涉及到很多存储结构的知识,但是网上的教程都不是很详细,就去复习了一下mysql,感觉是不是开源的问题,Mysql的社区和知识沉淀远高于Oracle, 对于初学者很友好,我想请…

2025考研数学武忠祥强化班视频,百度网盘课程+讲义PDF更新

25考研的小伙伴们现在应该基础都学习的差不多了吧! 是时候进入强化阶段的学习啦。 2025考研数学强化班全程网盘:https://pan.baidu.com/s/1Z029fuCLkyyhIRFqd5QKcg 提取码:p3ue 晚上好,聊聊17堂课的看课攻略。 今年的17堂课还…

IP-guard WebServer 权限绕过漏洞复现(QVD-2024-14103)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

Mac下brew安装php7.4

这里作者挂了梯子,所以很流畅! brew的下载,可参考另外一篇博文~Homebrew 安装与卸载 1、将第三方仓库加入brew brew tap shivammathur/php2、安装指定版本的PHP brew install php7.43、替换Mac自带PHP环境并刷新环境变量 -> …

【ACM列表推荐会议 | EI稳定检索】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)

2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024) 2024 4th International Conference on Artificial Intelligence, Automation and High Performance Computing 2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于20…

在mac上安装好python开发环境(pyenv、pyenv-virtualenv、docker-desktop、mysql5.7),一文解决环境问题

前言 python各种版本管理器、包管理器实在是太多了,感兴趣的可以看我的另一篇博客:http://t.csdnimg.cn/SRRyC 但是说实话,建议不要看,直接入手本文如下的环境配置就好了。 保证都是比较前沿,运用范围都比较广的&#…

clickhouse ttl不生效

现象: 日志保留31天, 但是发现1年前的数据还有。 表结构: CREATE TABLEads_xxxx_metrics_1m_local (static_time String COMMENT 统计时间,......) ENGINE ReplacingMergeTree (process_time) PARTITION BYtoYYYYMMDD (toDate (static_tim…

【网站项目】新生报到系统小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

局域网MongoDB的数据库访问不了

局域网MongoDB的数据库访问不了 确认bindIp: 0.0.0.0后,仍然是访问不了,查询资料发现是windows自带防火墙的问题 进入到 允许其他应用,选择mongod.exe的位置 这样就好了。

【电路笔记】-数字逻辑门总结

数字逻辑门总结 文章目录 数字逻辑门总结1、概述2、逻辑门真值表3、总结 数字逻辑门有三种基本类型:与门、或门和非门。 1、概述 我们还看到,数字逻辑门具有与其相反或互补的形式,分别为“与非门”、“或非门”和“缓冲器”,并且…

使用idea如何打开python项目

1.查看python路径,winR>cmd>where python,可以找到python.exe文件 2.解决方案: 1.首先找到python安装位置。 (如: D:\VS2019\共享组件、工具和SDK\Python37_64 ) 2.查找pip工具路径。 (Python37…

PostCSS概述以及详细使用代码案例

简介: PostCSS是一个使用JavaScript插件来转换样式的工具。它的目标是探索CSS工具的新可能性,特别是在自动化和优化方面。它允许你使用未来的CSS特性,同时优化现有的CSS代码,使其更加高效和兼容。PostCSS本身并不直接对CSS进行操…

ansible进阶-剧本调试方法

目录 1、调试方法 2、实例 2.1 Debug模块 2.2 tags标签 2.3 忽略错误 1、调试方法 具体方法应用场景debug标签执⾏剧本的时候输出剧本的执⾏流程,⼀般配合register⼀起使⽤. 输出facts变量自定义变量tags标签给⼀些模块加上标签,运⾏剧本的时候可以运⾏指定标签的…

OpenHarmony UI动画-rebound

简介 rebound是一个模拟弹簧动力学,用于驱动物理动画的库。 下载安装 ohpm install ohos/reboundOpenHarmony ohpm环境配置等更多内容,请参考如何安装OpenHarmony ohpm 使用说明 import rebound from ohos/rebound;功能一:创建维护弹簧对…

MySQL 锁机制全面解析

目录 1. MySQL的锁类型1.1 全局锁1.2 表锁1.3 行锁1.4 共享锁(读锁)1.5 排它锁(写锁)1.6 死锁 2 乐观锁和悲观锁2.1 乐观锁2.2 悲观锁 3 意向锁4 间隙锁5 临键锁6. 事务隔离级别对锁的影响6.1 读未提交(Read Uncommitt…