其实接触过Linux同志,应该了解block是什么,但是不同的环境下block 含义不一样:
1. 硬件上的 block size, 应该是"sector size",linux的扇区大小是512byte
2. 有文件系统的分区的block size, 是"block size",大小不一,可以用工具查看
3. 没有文件系统的分区的block size,也叫“block size”,大小指的是1024 byte
4. Kernel buffer cache 的block size, 就是"block size",大部分PC是1024
5. 磁盘分区的"cylinder size",用fdisk 可以查看。
对于HDFS的Block作用是什么?为什么要分块,分块有什么好处?
HDFS也有Block的概念,但它的块是一个很大的单元,默认是64MB。像硬盘中的文件系统一样,在HDFS中的文件将会按块大小进行分解,并作为独立的单元进行存储。但和硬盘中的文件系统不一样的是,存储在块中的硬的一个比块小的文件并不会占据一个块大小盘物理空间(HDFS中一个块只存储一个文件的内容)。
在此进一步的反思,为什么会有block,对于一部分人来说,可能是理所当然的。可是事物总有它产生的原因。
block在英文里面是块的意思,存储为什么会用块,用的别的方式不可以吗?
别的方式目前还没有发现,但是块是为了让文件存储有效管理。就如同物质是由分子组成,分子由原子组成一样。文件时由block组成。ok,说了一堆废话,下面看看。
为什么HDFS中的块如此之大呢?
在HDFS学习(一) – HDFS设计中,我们曾说过,对HDFS来说,读取整个数据的时间延迟要比读取到第一条记录的数据延迟更重要,就体现在这里。HDFS的Block设计的如此之大,也就是为了最小化寻道时间。把一个数据块设计的足够大,就能够使得数据传输的时间显著地大于寻找到Block所在时间。这样,传输一个由多个Block组成的文件的时间就取决于磁盘的传输速率。
举一个简单的例子,假设寻道时间大约为10ms,传输速度为100MB/s。为了使得寻道时间仅为传输时间的1%,我们就需要设置块的大小为100MB。HDFS默认的Block size是64MB,但是更多的企业里边,已经设置成128M,而且这个参数将随着新一代硬盘速度的增长而增长。
而Block Size的值也不宜设置过大,通常,Mapreduce中的Map任务一次只处理一个Block中的数据,如果启动太少的Task(少于集群中的节点的数量),作业的速度就会比较慢。
对HDFS进行块抽象有哪些好处呢?
一、一个显而易见的好处是:一个文件的大小,可以大于网络中任意一个硬盘的大小。
文件的块并不需要存储在同一个硬盘上,一个文件的快可以分布在集群中任意一个硬盘上。事实上,虽然实际中并没有,整个集群可以只存储一个文件,该文件的块占满整个集群的硬盘空间。
二、使用抽象块而非整个文件作为存储单元,大大简化了系统的设计。
简化设计,对于故障种类繁多的分布式系统来说尤为重要。以块为单位,一方面简化存储管理,因为块大小是固定的,所以一个硬盘放多少个块是非常容易计算的;另一方面,也消除了元数据的顾虑,因为Block仅仅是存储的一块数据,其文件的元数据,例如权限等就不需要跟数据块一起存储,可以交由另外的其他系统来处理。
|
|