MapReduce 里的「片」和「块」是啥?看这篇就够了!

一、块:数据存储的物理基石​

在 Hadoop 分布式文件系统(HDFS)中,“块” 是数据存储的基本物理单元,是实实在在存在于磁盘上的数据存储单位。在默认配置下,一个块的大小固定为 128MB ,这是一个不可动摇的物理概念。就好比我们将巨大的仓库划分为一个个大小固定的格子,每个格子能存放固定容量的货物,这些格子就是 HDFS 中的块。​

以存储 500MB 的数据为例,HDFS 会将其拆分为 4 个块来存储,即 500M = 128M + 128M + 128M + 116M。这种固定大小的块设计,有助于提高数据存储的可靠性和效率。多个副本存储在不同节点上,即使某个节点出现故障,数据依然能够从其他副本中获取;同时,固定大小也方便了数据的管理和读取操作。​

二、片:数据计算的逻辑单元​

与块不同,“片” 是 MapReduce 在进行计算时使用的逻辑概念,是数据处理的逻辑单位。它的大小通常与块相近,一般情况下,一个片大约等于一个块。但在处理数据的最后阶段,可能会出现片的大小大于块的情况,不过片的大小绝对不会超过块大小的 1.1 倍,即最大为 128M * 1.1 = 140.8MB 。​

片的存在是为了更好地适配 MapReduce 的计算模型。它就像是给数据划分的一个个逻辑任务单元,每个单元的数据会交给一个 MapTask 进行处理。例如,当需要计算一个 300MB 的文件时,MapReduce 会根据片的规则对文件进行划分:​

首先将 300MB 拆分为 128MB + 128MB + 44MB 。​

第一个 128MB 数据形成一个片,启动一个 MapTask 任务进行读取和处理。​

剩余的 172MB 数据,会与 128MB * 1.1 = 140.8MB 进行比较,由于 172MB 大于 140.8MB,所以继续进行切割,得到第二个 128MB 的片,启动第二个 MapTask 任务处理。​

最后剩余的 44MB 数据,再与 140.8MB 比较,小于该值,于是这 44MB 单独形成一个片,启动第三个 MapTask 任务处理。最终,300MB 的数据分给了 3 个 MapTask 任务进行处理。​

再看 260MB 的数据,划分为 128MB + 128MB + 4MB 三个块。第一个 128MB 启动一个 MapTask 任务;剩余的 132MB 与 140.8MB 比较,小于该值,所以这 132MB 直接形成一个片,由一个 MapTask 任务处理,无需再启动第三个任务。这就如同班里同学搬砖,每人规定搬 3 块,当还剩 4 块砖时,最后一个同学直接将剩余的 4 块搬完,无需再安排另一个同学专门跑一趟。​

三、片与 MapTask 任务数量的紧密关联​

在 MapReduce 中,启动 MapTask 任务的数量与片的数量直接相关,而与块并无直接联系。简单来说,有多少个片,就会启动多少个 MapTask 任务。这是因为每个片都是一个独立的逻辑计算单元,MapTask 任务正是基于这些单元对数据进行并行处理,充分发挥 MapReduce 分布式计算的优势。​

合理划分片的数量至关重要。如果片划分得过多,会导致启动大量的 MapTask 任务,增加任务调度和管理的开销;如果片划分得过少,又无法充分利用集群的计算资源,影响计算效率。因此,在实际应用中,需要根据数据大小、集群资源等因素,合理设置相关参数,以实现高效的数据处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值