磁盘有一个块大小,它决定了它可以读取或写入多少信息或数据。磁盘块通常不同于文件系统块。文件系统块的大小通常为几千字节,而磁盘块的大小通常为 512 字节。对于正在读取或写入任何长度的文档的文件系统客户端来说,这通常很简单。 df和fsck是在文件系统块级别上运行的工具,用于维护文件系统。
与其他文件系统一样, HDFS(Hadoop 分布式文件系统)也有以块为单位存储或管理数据的思想。但是在 HDFS 中,块的默认大小比简单的文件系统大太多。 HDFS 中的记录或文件被分成不同大小的块,这些块作为自治单元存放起来。 HDFS中数据块的大小默认为64MB,可以手动配置。业界一般使用128MB大小的数据块。使用 HDFS 在集群中存储信息的主要优点是,如果文件的大小小于块大小,那么在这种情况下它不会占用底层存储的完整块。
为什么 HDFS 中的块这么大?
HDFS块比磁盘块大,解释是为了限制搜索的开销。通过简单地显着提高块的大小,可以使从磁盘传输数据的时间或成本大于寻找块开头的时间。因此,以正常的磁盘传输速率移动由不同块组成的巨大记录或文件。
一个快速的估计表明,如果一个数据块的搜索时间在10 ms左右,并且交换率即数据传输的速率为100 MB/s ,那么在这一点上使查找时间为 1%交换时间,我们必须使磁盘大小在100 MB左右。然而,HDFS 块的默认大小是64MB,但许多 HDFS 安装使用128MB 的数据块。随着未来磁盘驱动器传输速度的增长,这些数据块的大小也将随之上升,这个数字将不断变化。
仅仅因为数据块抽象,就可以实现许多其他好处,让我们讨论它们中的每一个。
- 我们存储在 HDFS 上的文件可能比集群网络中的单个磁盘大。对于数据块,在 HDFS 中,没有必要将记录的所有块存储在同一磁盘上。 HDFS 可以利用集群中的任何可用磁盘。
- 在 HDFS 中,抽象是对文件块而不是单个文件进行的,这简化了存储子系统。由于块的大小是固定的,因此很容易管理和计算单个磁盘上可以存储多少块。存储子系统通过消除存储元数据(有关文件权限和日志的信息)问题来简化存储管理系统。 HDFS 块能够将文件数据存储在集群中的多个 DataNode 上。我们可以使用另一个单独管理元数据的系统,通常称为 NameNode。
- 使用块抽象的另一个好处是为数据块提供复制很简单,因此可以在我们的 Hadoop 集群中实现容错和高可用性。默认情况下,每个数据块在我们集群中可用的物理机上复制 3 次。如果数据块以某种方式不可用,也可以从我们的集群中制作副本的其他可用节点提供相同数据块的副本。一个损坏的块被复制到其他一些活动机器上,只是为了将复制因子保持在正常状态。一些重要的应用程序可能需要高复制以提供额外的高可用性并在我们的集群上分散读取负载。
HDFS fsck 命令理解块。运行下面的fsck命令将列出有关文件系统中每个文件的块的所有详细信息。
hdfs fsck / -files -blocks
让我们快速动手来理解这一点:
步骤 1:使用以下命令启动所有 Hadoop 守护进程。
start-dfs.sh // this will start your namenode, datanode and secondary namenode
start-yarn.sh // this will start your resource manager and node manager
步骤 2:使用以下命令检查运行 Daemon 的状态。
jps
第三步:运行 HDFS fsck命令。
hdfs fsck / -files -blocks
通过上面的解释,我们可以很容易地观察到有关构成我们文件系统中每个文件的块的所有细节。