hadoop_book/hdfs/router启动详解.md

2.8 KiB
Raw Blame History

简介

为了解决HDFS的水平扩展性问题社区从Apache Hadoop 0.23.0版本开始引入了HDFS federation。HDFS Federation是指 HDFS集群可同时存在多个NameNode/Namespace每个Namespace之间是互相独立的 单独的一个Namespace里面包含多个 NameNode其中一个是主剩余的是备这个和上面我们介绍的单Namespace里面的架构是一样的。这些Namespace共同管理整个集群的数据每个Namespace只管理一部分数据之间互不影响。

集群中的DataNode向所有的NameNode注册并定期向这些NameNode发送心跳和块信息同时DataNode也会执行NameNode发送过来的命令。集群中的NameNodes共享所有DataNode的存储资源。HDFS Federation的架构如下图所示

pic

子模块

State Store模块

初始化

初始化是从类Router的serviceInit函数触发的。

提供开关dfs.federation.router.store.enable默认开启。核心实现类是StateStoreService。

在serviceInit的时候初始化。 初始化store driver通过配置dfs.federation.router.store.driver.class默认为StateStoreZooKeeperImpl.class,通过反射机制初始化。目前默认支持的有:

  • StateStoreFileImpl
  • StateStoreFileSystemImpl
  • StateStoreMySQLImpl
  • StateStoreZooKeeperImpl

注册record stores目前支持的有

  • MembershipStoreImpl
  • MountTableStoreImpl
  • RouterStoreImpl
  • DisabledNameserviceStoreImpl

所有的record stores都保存在recordStores当中。

// Add supported record stores
addRecordStore(MembershipStoreImpl.class);
addRecordStore(MountTableStoreImpl.class);
addRecordStore(RouterStoreImpl.class);
addRecordStore(DisabledNameserviceStoreImpl.class);

初始化定期检查任务

// Check the connection to the State Store periodicallythis
this.monitorService = new StateStoreConnectionMonitorService(this);
this.addService(monitorService);

初始化缓存跟新服务

// Cache update service
this.cacheUpdater = new StateStoreCacheUpdateService(this);
addService(this.cacheUpdater);

最后是初始化监控信息核心的监控实现bean是StateStoreMBean。

启动

启动主要是Router的serviceStart函数触发最终调用StateStoreDriver的init函数用于初始化driver。核心函数为initDriver和initRecordStorage。

StateStoreFileImpl

initDriver
initRecordStorage

StateStoreFileSystemImpl

initDriver

initRecordStorage

StateStoreMySQLImpl

initDriver

initRecordStorage

StateStoreZooKeeperImpl

initDriver

initRecordStorage

ActiveNamenodeResolver

subclusterResolver

RPC

adminServer

httpServer

NameNode Heartbeat

Router metrics system

quota relevant service

Safemode

mount table cache update

quota manager