Hadoop2.0集群架构设计分析

众所周知Hadoop2.0包括三个部分,分布式存储HDFS、资源调度YARN、分布式计算MapReduce,而MapReduce是基于HDFS、YARN基础之上进行的分布式计算,HDFS和YARN搭建好分布式集群,MapReduce自然也就有了分布式集群环境,所以我们主要来说HDFS和YARN的集群架构。

 

HDFS的集群架构

HDFS有三个进程NN、SNN、DN,NN,Yarn是两个进程RM、NM,每个进程都需要避免单点,保证高可用。

绝大多数大数据系统的架构都是一主多从的架构设计,主服务器只有一台,掌控全局,因此保证HDFS中的主进程NameNode、YARN中的主进程ResourceManager做到高可用尤为重要。

HDFS的HA架构图如下

 

 

1、命名服务nameservice,HDFS的代理:

HA的架构设计中,我们设计了两台NameNode节点。对于客户端访问来说,HDFS是透明的,你有多少台NameNode节点,客户端并不关心,你HDFS只要保证一点,能让我正常访问HDFS系统就OK。但对于HDFS系统来说,两个NameNode,你得选择哪个提供给客户端访问,所以必须要有代理机制。

client访问NN时,如果第一次访问到standby节点,需要到其他NN节点上重试,直到访问到active节点

 

2、ACTIVE NN: 对外提供服务,standby namenode保持备用状态

ACTIVE NN主要 负责操作记录写到自己的editlog、同时写JN集群、接收DN的心跳和块报告

 

3、standby namenode:

接收JN集群的日志,显示读取执行edit log操作(重演),使得自己的元数据和active nn节点保持一致。

接收所有datanodes的心跳和块报告,因为文件块的映射关系是存在内存里的,不是存在磁盘上的,因此datanodes必须向两个namenodes同时汇报自己的存储情况。

 

4、active/standby 两个NameNode组成主备

ZKFC 单独的进程 zookeeperfailovercontrol,和ZooKeeper进行交互的

通过ZKFC完成active选举、standby到active的切换

监控NN监控健康状态

向zk集群定期发送心跳,使得自己可以被选举;

当自己被zk选举为active的时候,zkfc进程通过RPC协议调用使NN节点的状态变为active

 

5、HDFS的 HA 环境部署

hadoop001:ZK    NN ZKFC  JN    DN

hadoop002:ZK    NN ZKFC  JN    DN

hadoop003:ZK                    JN    DN

 

详细介绍下日志同步这一块,如何保证edit日志文件的安全和完整

我们两个NameNode节点,如果Active节点宕机,我Standby节点要接着继续对服务,那么这个正常对外服务源自与文件元数据的完整性,也就是说Active节点要实时非常安全、完整的记录文件的操作日志信息,这样Standby在读取的时候,读取的日志信息是完整的,当Active节点宕机,Standby才能接手继续工作。

方案一:一个好的文件系统

找一台比较好的服务器,作为外部的文件存储设备,Active节点的NameNode将edit日志文件写入,Standby节点的NameNode将读取写入的日志文件。那么这种方案需要好的企业级服务。成本上来说代价昂贵,与我们小成本、大集群的分布式理念相违背。

 

方案二:分布式存储日志信息QJM

NameNode管理文件的元数据,包括fsimage和edits,在开始启动的时候NameNode的Active节点和Standby节点元数据是一样的。但是启动之后,Active节点提供对外服务,那么它的edits日志文件在不停的变化,这个时候两个NameNode节点上的日志文件肯定是不一样的。那么就需要一种机制,保证Active节点的日志安全的写入某个地方,并且让Standby节点能完整的读取。

我们说HDFS文件的安全性和完整性是通过DataNode节点副本的方式来保证的,每一个文件的存储默认至少是3份。那么我们的edit日志文件为了保证安全性,也类似于DataNode文件的存储方式,以2n+1副本的方式进行存储。n表示允许损坏的机器节点数量。也就是说Active的NameNode节点将edit日志存三份,允许其中一个节点写入edit日志失败。那么负责存储edit日志文件节点进程是谁呢?就是JournalNode。它的节点数必须是奇数。JournalNode负责管理edit日志文件的安全性和完整性,从而达到NameNode的Active节点与Standby节点之间元数据的同步。

“use HDFS HA using the Quorum Journal Manager (QJM) to share edit logs between the Active and Standby NameNodes“这是官网的一句话。QJM,分布式的日志管理,节点名称就是JournalNode。

active NameNode在向JournalNode写数据过程,是同步写入quorum 个JournalNode才成功返回,其余JournalNode会做异步数据同步,和activemq集群使用2n+1 leveldb做数据同步原理类似,都是为了保证数据的可靠性。

所以一般架构设计中,还是采用QJM分布式日志存储来达到两个NameNode节点之间元数据的同步。

 

Yarn的集群架构

 

1、和HDFS的区别

  • ZKFC是RM里的一个线程,
  • 同步通过ZooKeeper,
  • NM不用和Standby RM同步

 

2、为了HDFS的同步数据不使用ZooKeeper进行数据存储?

相对而言,YARN 产生的作业信息要比HDFS产生的edit log量小,因为ZooKeeper每次做写操作都要进行选举,性能比较低。

 

3、ZK的/rmstore目录存储lock、state信息。

RM启动时候会向ZK的/rmstore目录写lock文件,写成功就为active,否则standby。

RM产生的状态数据也是存储在这个目录下,当activeRM挂了,另外一个standby RM通过ZKFC选举成功为active,会从/rmstore读取相应的作业信息。

 

4、YARN的 HA 环境部署

hadoop001:zk  rm(zkfc)  nm

hadoop002:zk  rm(zkfc)  nm

hadoop003:zk                nm

 

最后聊下大数据架构的两个核心设计理念

  1. 移动计算比移动数据更划算

既然数据是庞大的,而程序要比数据小得多,将数据输入给程序是不划算的,那么就反其道而行之,将程序分发到数据所在的地方进行计算,也就是所谓的移动计算比移动数据更划算。

这就是为什么MapReduce的代码会跑在和DataNode在同一台机器上的原因。

  1. 一主多从的架构设计

传统的应用,为了分流要分而治之,而大数据恰恰相反,需要把数据的收集在一起,才能挖掘出潜在的数据价值 。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章