1. HDFS简介
HDFS是Hadoop Distributed File System的简称,即Hadoop分布式文件系统。它起源于谷歌发表的GFS论文,是该论文的开源实现,也是整个大数据的基础。
HDFS专门为解决大数据的存储问题而产生的,具有如下特点:
- 可存储超大文件:HDFS可存储PB级的数据
- 流式数据访问:一次写入,多次读取。数据集通常从数据源复制而来,每次分析都涉及该数据集的大部分甚至全部。
- 商用硬件:Hadoop不需要运行在高昂可靠的硬件上,它是设计运行在普通的商用硬件上,节点的故障不会影响到系统的运行。
不适用的场景:
- 低延时的数据访问:HDFS是为高数据吞吐量而设计的,这会以提高时间延迟为代价。因此,对于低延时的访问需求不适合在HDFS上。
- 大量的小文件:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。
- 多用户写入,随意修改文件:HDFS中的文件只支持单个写入者,而且不支持在任意位置进行修改。
2. HDFS文件块
每个磁盘有默认的数据块,这是磁盘读写的最小单位。文件系统的块大小一般为磁盘块的整数倍。磁盘块大小一般为512 字节。
HDFS文件系统也有块(block)的概念,默认值为128M,也可以修改。超过块大小的文件在存储的时候会被分为多个分块(chunk)。有点需要注意:HDFS中小于一个块大小的文件不会占据整个块的空间,而单一磁盘中如果文件小于块大小,那么整个磁盘块的空间都会被占用。
对文件进行分块存储有很多好处,比如:
- 文件的大小可以不受限于单个磁盘的容量;
- 文件的所有块不必存储在同一个磁盘上,可以利用集群上的任意一个磁盘进行存储;
- 将文件分块存储便于备份和容错,提高可用性。
对于访问频繁的文件,其对应的块可能会被显示地缓存在内存中。
# HDFS的文件块信息可以通过fsck命令查看
hdfs fsck / -files -blocks
3. HDFS节点
- namenode
namenode维护HDFS文件系统的元数据。所谓元数据,就是数据的数据。即存储在HDFS文件系统上的数据的基本信息,比如文件系统树及整棵树内所有的文件和目录,每个文件中各个数据块所在数据节点信息,但并不永久保存块的位置信息,因为这块可能随时变化。这部分的信息在系统启动的时候根据数据节点的信息重建。
- datanode
datanode是HDFS文件系统存储具体数据的节点。它们根据namenode节点的调度来存储和检索文件的数据块。由于文件的元数据都存储在namenode,如果没有namenode,文件系统将无法工作,如果namenode的数据损坏,那么存储在datanode上的数据就作废了。
因此,对namenode的容错显得非常重要。
网友评论