hadoop分布式文件系统
设计目的
- 是为了大文件(大到一台机器无法存储)所设计。
- 流式数据读取,一般会在批处理中使用HDFS。
- 节点故障是常态,能在机器故障后恢复。
Blocks
HDFS中最小的存储单位,默认最小为128M。小于128M并不会占用一个单独的block。
设计成这么大是为了减少寻址的时间,但是也不应该太大,
大的block从硬盘转换的时间也会相应变慢。一般map任务会工作在一个单独的block上,如果block很少,map任务也会很慢。
Namenodes and Datanodes
HDFS集群两种节点
一个 namenode(master):
管理文件系统的命名空间,维护了所有文件和目录的文件系统的文件树与元数据。
namenode知道一个文件的所有block在哪个datanode上,但并不会存储这些信息。
数个datanode(worker):
datanode是文件系统的实际工作者,它们在工作的时候存储或取回block,给namenode报告自己存储了那些block。
如果没有namenode文件系统将不可用。实际上,如果namenode消失了文件系统中的所有文件都会丢失,因为这样会不知道如何由block重建为一个文件。
保证namenode的可用性
定期向硬盘上写入文件系统的元数据,一般是同步的,原子性的。
运行secondary namenode,持续从主拷贝文件系统的更改日志并合并(这将消耗大量的系统资源)。当主namenode不可用时,由于同步会有延迟,数据可能会丢失,此时secondary成为主。
Block Caching
通常bkock会从硬盘中读取,但是重复使用的block会缓存在内存中。默认情况下一个block只会缓存在一个namenode中,但是这个是可以控制的。