结构:一个HDFS集群是由一个NameNode、一个Secondary NameNode和若干个DataNode组成。oop
1)NameNode: 概念:NameNode是HDFS主从结构中主角色的扮演者,它维护着整个文件系统的目录树,维护信息(即HDFS的元数据)存储在本地的fsimage文件和edits文件中。 fsimage:文件系统镜像文件,内存中的HDFS元数据序列化到磁盘上的文件,即HDFS元数据的快照,NameNode启动的时候,默认会加载最新的fsimage。 edits: fsimage的编辑日志。 fstime:最近一次checkpoint的时间。 特色: 1)NameNode始终在内存中保存metadata,用于处理“读”请求。 2)NameNode收到“写”请求后,会首先向edits文件中添加日志,成功添加日志后,才会去修改内存中的元数据,而且向客户端返回。 2)Secondary NameNode: 概念:用于按期合并文件系统镜像和它的编辑日志。 说明:NameNode将改动的内容写到edits中,Secondary NameNode将按期地合并fsimage和edits。 执行过程: 1)通知NameNode切换edits文件。 2)从NameNode上下载fsimage文件和edits文件。 3)把两者合并(先将fsimage加载到内存,而后合并edits),生成新的fsimage文件,并保存在本地。 4)将新生成的fsimage文件推送给NameNode,NameNode会用最新的fsimage文件替换掉旧的fsimage文件 默认触发合并的时机:每小时合并一次 或 edits文件达到64MB时进行合并 3)DataNode: 概念:DataNode是HDFS主从结构中从角色的扮演者,它在本地文件系统存储文件块数据,并在NameNode的调度下进行数据块的建立、删除和复制工做。
特色:性能
1)适合存储超大文件。 2)运行于廉价的硬件之上。 3)流式数据访问:HDFS认为,一次写入,屡次读取是最高效的访问模式。
短板:优化
1)实时的数据访问弱:因为HDFS针对高数据吞吐量作了优化,故牺牲了读取数据的速度,对于响应时间是秒或毫秒的数据访问,可使用HBase。 2)会占用大量内存:当hadoop启动时,NameNode会将全部的元数据读到内存中,以此来构建目录树。 3)HDFS中的文件只能有一个写入者,而且只能在文件末尾添加数据。
相关概念:日志
1)文件块: 1>说明:HDFS中的文件块默认大小:hadoop1.0为64MB;hadoop2.0为128MB,能够经过hdfs-site.xml文件的dfs.block.size属性配置。 2>优势: 1)能够储存比磁盘大的文件:经过把文件分红若干分片实现。 2)实现了元数据和数据的分开储存和管理。 3)容错性高。 3>文件块放置的策略: 一个文件块默认会有3份备份,一份放在NameNode指定的DataNode上,另外一份放在与指定的DataNode不在同一台机器上的DataNode上,最后一份放在与指定的DataNode在同一机架(Rack)上的DataNode上。 优势:解决了同一机架中失败的状况以及不一样机架之间的数据拷贝会带来的性能问题。