本文章将给大家介绍HDFS。
1.HDFS适合存储超大文件
2.HDFS认为一次写入,多次读取时最高效的访问模式。
3.HDFS可以运行于廉价的硬件之上。
当然,HDFS也有一些短板
1.实时的数据访问弱,如果应用要求数据访问的时间在秒或者毫秒级别,那么HDFS是做不到的。HDFS针对高数据吞吐量做了优化,牺牲了读取数据的速度,对于响应时间是秒或者毫秒的数据访问,可以考虑HBase
2.大量的小文件,当Hadoop启动时,NameNode会将所有元数据读到内存,一次构建目录树,对于一个超大规模的集群不适合存放大量的小文件
3.HDFS中的文件只能有一个写入者,并且写数据操作总是在文件末,如果不将hdfs-site.xml中的dfs.support.append设置为true的话。HDFS也不支持对文件进行追加操作
HDFS的架构
一个典型的HDFS集群中 有一个NameNode,一个SecondaryNode和至少一个DataNode,而HDFS客户端数量并没有限制,所有的数据存放在运行的DataNode进程的节点的块里。
块是一个概念,HDFS中的块比一般文件系统的块大得多,在hadoop1时默认为64MB,在hadoop2默认为128M。块是HDFS存储处理的最小单元
NameNode与SecondaryNameNode
NameNode是HDFS的大脑,维护着整个文件系统的目录树,以及目录树里所有的文件和目录。这些信息以两种文件存储在本地文件中:一种是命名空间镜像,即HDFS元数据的完整快照,另一种是命名空间镜像的编辑日志。
SecondaryNameNode是用于定期合并命名空间镜像和命名空间镜像的编辑日志的辅助守护进程。
SecondaryNameNode工作流程是:
1.引导NameNode滚动更行编辑日志文件,并开始将新的内容写入Edit Log.new
2.将FSImage和编辑日志文件复制到本地的检查点目录
3.载入FSImage,回放编辑日志,将其合并到FSImage,将新的FSImage文件压缩后写入磁盘
4.将新的FSImage文件送回NameNode,NameNode接受新的FSImage后,直接加载和应用该文件。
5.NameNode将Edit Log.new更名为Edit Log。
从名称上看,很多初学者会觉得NameNode出现故障时,SecondaryNameNode会自动成为新的NameNode,其实是错误的。