HDFS源自于Google在2003年10月发表的GFS论文,它是一个分布式文件系统,具有高容错,易扩展,存储量大,能够运行在廉价机上等特点,已经被很多企业广泛引用于基础等存储服务。
组件
HDFS中等核心组件主要有两个,一个是NameNode,一个是DataNode。
NmeNode负责管理集群等元数据信息,以及数据分布,DataNode负责存储具体等数据。HDFS存储数据的基本单位是数据块block,默认大小为128M,一个大文件会被拆分成多个数据块,存储在DataNode上。
另外还有一个辅助组件SecondayNameNode,它的主要作用是合并NameNode上的编辑日志和镜像文件,确保编辑日志不会过大,另外在Hadoop早起版本中,SecondayNamenode还作为NameNode的冷备。
架构
HDFS采用主从这种经典的分布式系统架构,如下图所示:
在Hadoop2.2以后,NameNode的高可用依赖于zookeeper来实现动态的这备切换,集群元数据信息通过QJM等高可用的共享存储系统在主备NameNode之间共享。
读流程
HDFS的数据读取流程如下图所示
1)客户端请求NameNode读取数据,NameNode进行权限及文件是否存在等校验
2)NameNode定位到组成该文件的block列表,并按照就近原则返回给客户端存储了第一个block的datanode
3)客户端与dataNode通信,读取第一个bock块,然后在向namenode请求第二个bl