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 分布式文件系统的数据本地性特性,减少数据传输的开销。

相关推荐
Elastic 中国社区官方博客11 小时前
根据用户行为数据中的判断列表在 Elasticsearch 中训练 LTR 模型
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
点控云12 小时前
点控云智能短信:重构企业与用户的连接,让品牌沟通更高效
大数据·人工智能·科技·重构·外呼系统·呼叫中心
风清再凯14 小时前
04_es原理&filebeat使用
大数据·elasticsearch·搜索引擎
小小王app小程序开发14 小时前
盲盒小程序开发新视角:从用户体验到运营落地的分析拆解
大数据·ux
weixin_5259363316 小时前
部分Spark SQL编程要点
大数据·python·sql·spark
wan5555cn17 小时前
当代社会情绪分类及其改善方向深度解析
大数据·人工智能·笔记·深度学习·算法·生活
chad__chang17 小时前
dolphinscheduler安装过程
hive·hadoop
SirLancelot117 小时前
MongoDB-基本介绍(一)基本概念、特点、适用场景、技术选型
java·数据库·分布式·后端·mongodb·软件工程·软件构建
koping_wu17 小时前
【Kafka】架构原理、消息丢失、重复消费、顺序消费、事务消息
分布式·架构·kafka
板凳坐着晒太阳19 小时前
Flink 作业通用优化方案
大数据·flink