赞
踩
HDFS 采用 Master/Slave 架构。一个 HDFS 集群是由一个 NameNode 和一定数目的 DataNodes组成。其中 NameNode 是一个中心服务器,负责文件系统的名字空间(namespace) 管理以及客户端对文件的访问。集群中的 DataNode 一般是一个节点一个,负责管理它所在节点上的存储。
HDFS使用Java语言开发,因此任何支持Java的机器都可以部署NameNode或DataNode。由于采用了可移植性极强的 Java 语言,这就使得 HDFS 可以部署到几乎所有类型的机器上。
整个结构是一个主从结构。即在集群中一个主机器对应多个从属机器
NameNode是 HDFS 的元数据节点,负责管理文件系统的名字空间以及和客户端进行交互。
Secondary NameNode:是NameNode的助手,辅助NameNode合并fsimage和EditsLog。
在Namenode运行期间,HDFS会不断发生更新操作,这些更新操作不会直接写到fsimage文件中,而是直接被写入到editlog文件的,文件会越来越大。当Namenode重启时,会加载fsimage加载到内存中,并且逐条执行editlog中的记录,editlog文件大,就会导致整个过程变得非常缓慢,使得Namenode在启动过程中长期处于“安全模式”,无法正常对外提供写操作,影响了用户的使用。
HDFS采用了SecondaryNameNode这个守护线程,可以定期完成editlog与fsImage的合并操作,减小editlog文件大小,缩短Namenode重启时间;也可以作为Namenode的一个“检查点”,将保存Namenode内存中的元数据信息,保存在fsimage镜像文件中。
但是当NameNode 宕掉后,Secondary NameNode并不会成为新的NameNode。所以在这个架构中,NameNode 是单点故障。
Secondary NameNode 的处理流程如下:
DataNode 是 HDFS 文件系统的工作节点,DataNode 会按照客户端或者是 NameNode 的调度来存储和检索数据,并定期向 NameNode 发送它所存储的数据块列表。
Heartbeats心跳用来监控集群中的各个机器。
Hadoop2.0引入了主备Standby NameNode。在 Hadoop2.0 之前,每个集群只能有一个 NameNode,它是单点故障,如果它出现问题就会导致整个集群瘫痪。因此 NameNode 需要有一定的冗余,通常的做法是把 NameNode 配置成 Active/Standby, 在 Active 失效的时候能立即无缝切换至 Standby 机上。
现阶段 Active/Standby 直接的同步有两种方式:
JournalNodes(JNs)伺服方式:ActiveNode 持续地将 EditsLog 写入到 JournalNode 伺服进程,而 StandbyNode 则能够实时监视并从中读取相关内容进行同步。JournalNodes 只允许一个 NameNode 进行写入操作,如果 Active 失效,Standby 将自动获得写入权。
Shared NFS Directory 方式:通过挂接一个主从 NameNode 节点都拥有读写权限的共享文件夹的方式进行同步。Active 一方不断将 EditsLog 写入该文件夹,而 Standby 则监视该文件的同时同步到自己的 Namesapce 中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。