很多人错误地认为split和block两个概念是一起的,有严格的对应关系,有一种很易理解的方式是,HDFS和MapReduce并不是强耦合在一期的,MapReduce处理的数据并不一定来自HDFS,可以来自其他分布式文件系统,甚至在本地磁盘都行(前提是,该文件系统必须实现一定的规范协议),如果这样,Split划分方式必须由程序设定,也就是split和block没有直接的关系,毕竟它们来自不同的世界。
HDFS存储系统中,引入了文件系统的分块概念(block),块是存储的最小单位,HDFS定义其大小为64MB。与单磁盘文件系统相似,存储在HDFS上的文件均存储为多个块,不同的是,如果某文件大小没有到达64MB,该文件也不会占据整个块空间(不同于普通文件系统,如一个基本的物理存储单元:扇区,数据即使小于4KB,要要占用4kb的扇区空间)。在分布式的HDFS集群上,Hadoop系统保证一个块存储在一个datanode上,不跨越存储。
另外就是记录边界的问题,block是在物理上做了划分,但是会出现记录跨界,或者底层文件系统不是HDFS的情形,因此需要一种逻辑上的数据处理单元,处理如记录越界的问题,这就是split的价值所在。
单磁盘文件系统中,存储的物理单元概念是扇区。之上有了逻辑块的
概念,然后是不同的文件系统如ext3等,再往上是VFS(虚拟文件系统),这里面真正的物理单元实际上只有扇区其实,
概念对比:
单磁盘文件系统: 扇区(物理单元)->逻辑块(通用块,解决扇区)->不同的文件系统(ext2,ext3)->VFS(虚拟文件系统) 每一层都是为了解决之前那层的各种不兼容问题。
HDFS: block(物理单元)->split
split记录跨界,但是如果想利用内存里的数据,在上传数据时,DN传输时就读取记录的话,这种方法就不行了,因为此时该文件的分布式存储尚未完成,无法知道下半条记录在哪个节点上的哪块内存中,甚至不知道写进内存没有。这种情况下就需要自定义文件格式,规范记录的边界,不允许跨界。
关于Split和Block
最新推荐文章于 2025-12-09 21:35:10 发布
本文深入解析HDFS中的块存储概念与Split划分的区别,解释了Split在处理记录跨界和分布式存储时的作用,以及与单磁盘文件系统在块划分上的差异。
3411

被折叠的 条评论
为什么被折叠?



