一:HDFS的框架简述


二:HDFS的分解概述
2.1 HDFS采用Master/Slave架构,HDFS集群是由一个NameNode和多个DataNodes组成。NameNode是中心服务器,负责管理文件系统的名字空间(namespace)以及客户端的访问。DataNode负责管理它所在节点上的存储。用户能够通过HDFS文件系统的名字空间以文件的形式在上面存储据。对于内部存储,一个文件被切分为一个或多个块,存储在一组DataNode上。NameNode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体DataNode节点的映射。HDFS文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。HDFS中的文件都是一次性写入的,并且在任何时候只能有一个写入者。NameNode全权管理数据块的复制,它周期性地从集群中的每DataNode接收心跳信号和块状报告(Block Report)。
2.2 NameNode:是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
NameNode文件:
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中
NameNode的工作特点:Namenode始终在内存中保存metedata,用于处理“读请求 。到有“写请求”到来时,namenode会首先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回。Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。Secondary namenode就是用来合并fsimage和edits文件来更新NameNode的metedata的。
2.3 SecondaryNameNode:HA的一个解决方案。但不支持热备。配置即可。从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage。默认在安装在NameNode节点上,但这样...不安全

2.4 副本的放置策略是区分文件系统的重要特性之一,也是HDFS性能和可靠性的关键,HDFS采用了机架感知(rack-aware)的策略来存储副本。在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。整个机架的错误远远比单个节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。于此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。三分之一的副本在一个节点上,三分之二的副本在一个机架上,如果大于3个副本,其他副本均匀分布在剩下的机架中,这一策略在不损害数据可靠性和读取性能的情况下改进了写的性能。一个大型集群大多会被分为多个机架(Rack),一个机架包含多个节点,一般来说,机架内部机器的通信速度要高于机架之间的通信速度,而且往往机架之间的通信受到上层交换机等的带宽限制。HDFS中,对机架的感知并非是自适应的,即机架的配置是由配置文件决定,并且是人工指定的,这些rackid信息可以通过topology.script.file.name配置,通过IP到机架id的映射指定哪些节点属于哪个机架,在NameNode启动时将配置信息读取到内存中,保存在一个map中。通过机架感知,NameNode就可以画出DataNode以及交换机等节点的网络拓扑图,通过拓扑图就可以计算出任意两个DataNode之间的距离,得到最优的存放策略,优化整个集群的网络带宽均衡以及数据最优分配。
网友评论