- MapReduce 教程
- MapReduce 工作原理
- MapReduce Mapper
- MapReduce Reducer
- MapReduce 键值对
- MapReduce InputFormat
- MapReduce InputSplit
- MapReduce RecordReader
- MapReduce Partitioner
- MapReduce Combiner
- MapReduce Shuffle 和排序
- MapReduce OutputFormat
- MapReduce InputSplit 与 HDFS 块
- MapReduce 只有 Map 阶段的 job
- MapReduce 数据本地化
- MapReduce 推测执行
- MapReduce 计数器
- MapReduce 性能优化
MapReduce InputSplit 与 HDFS 块
InputSplit 即数据分片,HDFS 块(block)即分布式存储系统的数据块概念。下面详细介绍这两个概念的区别和联系。
HDFS 块与 InputSplit
HDFS 块
块是硬盘上存储数据的一个连续位置。通常,文件系统将数据存储成块的集合。同样的方式,HDFS 以块的方式存储文件。Hadoop 应用程序负责在多个节点分配数据块。
InputSplit
InputSplit 即我们所说的数据分片,一个单独的 mapper 处理的数据由 InputSplit 提供,即一个数据分片对应被一个 mapper 处理,数据分片会转换成记录,每个记录(即键值对)会被 map 处理。map 任务的个数等于数据分片的数量。
一开始 MapReduce 任务处理的数据是存储在输入文件的,而输入文件一般在 HDFS 。输入文件如何被读取和切分由 InputFormat 类来决定,另外它还负责创建 InputSplit。
InputSplit 和 块的比较
让我们来讨论 MapReduce InputSplit 和块之间的特性比较。
InputSplit 与块的大小比较
块:HDFS 块的默认大小是 128MB,我们可以按实际需求对该值进行配置。除了最后一个数据块,文件的其他所有块大小都是一样的,最后一个数据块大小一般小于等于 128MB。文件被切分成若干个大小为 128MB 的数据块,并存储到 Hadoop 文件系统。
InputSplit:默认情况下,InputSplit 的大小近似等于块大小。InputSplit 是由用户自己定义的,并且基于数据的容量可以在 MapReduce 程序调整 InputSplit 的值。
InputSplit 和 块的数据表示
块:块是数据的物理表示,它包含可读或者可写的最小数据量。
InputSplit:它是块中数据的逻辑表示。它是在 MapReduce 程序处理数据的时候被使用的。InputSplit 本身并不存储物理数据,它只是数据的一种引用。
InputSplit 和 块示例
假如我们需要把文件存储到 HDFS。HDFS 以块的形式存储文件,块是数据读取和存储的最小单位,并且块的默认大小是 128MB 。HDFS 把文件切分成块,并把块存储在集群的不同机器节点上,假如我们有一个 130MB 的文件,那么 HDFS 会把这个文件切割成 2 个块,如上第一个图所示。
现在,如果我们想对这些块执行 MapReduce 程序,那么它是不会被处理的,因为第二个块并不是完整的块。但是这个问题 InputSplit 可以解决。InputSplit 可以把一组 block 作为一个单独的块,因为 InputSplit 里面包含下一个块的位置以及完整的块所需的数据的字节偏移量。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论