声明,此连续文章为阅读《Hadoop权威指南第4版》的读书笔记,旨在记录重点内容和阅读心得,有共读的朋友可以交流书中疑惑。
3.1 HDFS的设计
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。
- 超大文件
- 流式数据访问
HDFS的构建思路:一次写入,多次读取。 - 高可靠性
- 高吞吐量
低延迟的任务不适合在HDFS上运行,对于低延迟的访问需求HBase更合适。 - 大量的小文件
- 不支持多用户写入,任意修改文件
HDFS的文件写入只支持单个写入者,且写操作只是以“只添加”的方式在文件末尾写数据。
3.2 HDFS的概念
-
数据块
HDFS块(block),默认128M,HDFS上的文件被分为块大小的多个分块(chunk)。
数据块这么设计的原因,参考 -
namenode和datanode
HDFS以一个namenode(管理节点)和多个datanode(工作节点)来运行。
namenode管理文件系统的命名空间,维护文件系统树及整个树内所有的目录和文件。这些信息已两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。datanode是文件系统的工作节点,根据需要(客户端或者namenode)存储并检索数据块,并定期向namenode发送他们所存储的块的列表。
namenode的两种容错机制:
1.备份组成文件系统元数据持久状态的文件。一般配置为写入本地的同时写入一个远程文件系统(NFS)。
2.运行一个辅助namenode,该namenode的作用是定期合并编辑日志与命名空间镜像,一般在另一台机器上运行,因为其要占用大量CPU,且需要与namenode一样多的内存来执行合并操作。保存合并后命名空间的副本,在主namenode故障时启用。但是辅助namenode保存的状态总是滞后于主节点,所以会丢失部分数据,这种情况会把NFS上备份的元数据复制到辅助namenode并作为新的主namenode运行。 -
块缓存
对于datanode从磁盘读取频繁的文件,可以显示的缓存在datanode的内存中,以堆外缓存的形式存在。
用户或应用可以在缓冲池中增加一个cache directive来指定缓存哪些文件及缓存多久。 -
Federation HDFS
参考 -
HDFS的高可用性