Hadoop 分布式文件系统
Key Words: HDFS
, data block
HDFS 的设计
超大文件:指的是几百 MB,几百 GB 设置几百 TB 大小的文件
流式数据访问: 一次写入、多次读取是最高效的访问模式。每次分析都将涉及该数据集的大部分甚至全部,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更为重要
商用硬件:不必运行在昂贵且高可靠的硬件上。所以 HDFS 遇到节点故障的几率较高,所以被设计成能够继续运行且不让用户觉察到明显的中断
低延时的数据访问:要求地时间延迟数据访问的应用,不适合在 HDFS 上运行。HDFS 是为搞数据吞吐量应用优化的,这可能会以提高实践延迟为代价
大量的小文件:由于 namenode 将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于 namenode 的内存容量(每个文件、目录和数据块的存储信息大约150字节)
多用户写入,任意修改文件:HDFS 中的文件写入只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据。不支持多个写入者的操作,也不支持在文件的任意位置进行修改
HDFS 核心概念
数据块
默认为 128 M,与单一磁盘上的文件系统相似,HDFS 上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。不同的是,HDFS 中小于一个块大小的文件不会占据整个块的空间
块大小的设计主要是为了最小化寻址开销。如果块足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间
块设计的好处
1.一个文件的大小可以大于网络中任意一个磁盘的容量
2.使用抽象块而非整个文件作为存储单元,大大简化存储子系统的设计。比如:简化存储管理,简化元数据的管理(权限)
3.块非常适用于数据备份进而提供数据容错能力和提高可用性
namenode 和 datanode
HDFS 集群有两类节点以管理节点 - 工作节点模式运行,即一个 namenode(管理节点)和多个 datanode(工作节点)
namenode
管理文件系统的命名空间。维护文件系统树及整棵树内所有的文件和目录
这些信息已两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件
记录每个文件中各个块所在的数据节点信息,但不永久保存块的位置信息
,这些信息会在系统启动时更具数据节点信息重建
datanode
根据需要存储并检索数据块,并定期向 namenode 发送他们所存储的块的列表
如何保证 namenode 的高可靠?
块缓存
通常 datanode 从磁盘中读取块,对于访问频繁的问价,其对应的快可能被显式地缓存在 datanode 的内存中,以堆外块缓存(off-heap block cache)的形式存在