Hadoop 原理学习(1)Hadoop 各服务的作用简述

[TOC]

注:以下服务为基于安装Hadoop 2.6.0-cdh5.8.3后的所得服务,但并不是全部。

1. HDFS

NameNode

NameNode是一个中心服务器,负责管理文件系统的namespace以及客户端对文件的访问。

NameNode执行文件系统的namespace操作,比如打开、关闭、重命名文件或目录。同时它还确定blockDataNode节点的映射。

Namenode 详细功能如下:

  • 它是维护和管理 Datanode 的主守护进程;
  • 它记录存储在集群中的所有文件的元数据,例如 block 的位置、文件大小、权限、层次结构等。有两个文件与元数据关联:
    • FsImage:它包含自 Namenode 开始以来文件的 namespace 的完整状态;
    • EditLogs:它包含最近对文件系统进行的与最新 FsImage 相关的所有修改。
  • 它记录了发生在文件系统元数据上的每个更改。例如,如果一个文件在 HDFS 中被删除,Namenode 会立即在 EditLog 中记录这个操作。
  • 它定期从集群中的所有 Datanode 接收心跳信息和 block 报告,以确保 Datanode - 处于活动状态;
  • 它保留了 HDFS 中所有 block 的记录以及这些 block 所在的节点;
  • 它负责管理所有 block 的复制;
  • 在 Datanode 失败的情况下,Namenode 会为副本选择新的 Datanode,平衡磁盘使用并管理到 Datanode 的通信流量。

DataNode

在集群内部,文件被分成一个或多个block,这些block被存储在一组DataNode中,而DataNode则用于管理它所在节点上的存储。

Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。

Datanode 详细功能如下:

  • 这些是丛属守护进行或在每台从属机器上运行的进程;
  • 实际的数据存储在 Datanode 上;
  • 执行文件系统客户端底层的读写请求;
  • 定期向 Namenode 发送心跳报告 HDFS 的整体健康状况,默认频率为 3 秒

NameNode and DataNode 更多请参考:HDFS Architecture Guide

FailoverController

故障切换控制器,运行在NameNode旁边,主要包含以下3个功能:

1) 监控NameNode的健康状态(心跳检测);
2) 向ZooKeeper定期发送心跳,使自己可以被选举;
3) 当自己被ZooKeeper选择为主时,通过 RPC 调用使对应的NameNode转换为active状态。

JournalNode

用于存储EditLog,相关资料如下:

NameNode默认采用 Clouderea 公司实现的基于QJM(Quorum Journal Manager)的方案来实现其共享存储方案,在QJM方案中,NameNode 在执行 HDFS 客户端提交的创建文件或者移动文件这样的写操作的时候,会首先把这些操作记录在EditLog文件之中,然后再更新内存中的文件系统镜像(内存中的文件系统镜像用于NameNode向客户端提供读服务,而EditLog则只是在数据恢复的时候起作用)。

QJM 共享存储的基本思想来自于 Paxos 算法 (参见参考文献 [3]),采用多个称为 JournalNode的节点组成的JournalNode集群来存储EditLog,每个JournalNode保存同样的EditLog副本。每次NameNodeEditLog的时候,除了向本地磁盘写入 EditLog之外,也会并行地向JournalNode集群之中的每一个JournalNode 发送写请求,只要大多数 (majority) 的JournalNode节点返回成功就认为向 JournalNode集群写入 EditLog成功。如果有 2N+1 台 JournalNode,那么根据大多数的原则,最多可以容忍有 N 台JournalNode节点挂掉。

更多请参见:Hadoop NameNode 高可用 (High Availability) 实现解析

Balancer

用于平衡集群之间个节点的磁盘利用率。

因为 HDFS 的数据可能并不总是被均匀地分布的在DataNodes中,比如添加新的DataNode到现有的集群,所以 HDFS 提供了Balancer服务用于分析block的放置并平衡DataNode中的数据。Banlancer会移动block直到集群被认为是平衡的,这也意味着每个DataNode的利用率(节点上已用空间与节点总容量的比率)与集群的利用率(集群的已用空间与集群的总容量的比率)相差不会超过给定的阈值百分比。

更多请参见:HDFS Balancers

HttpFS

提供 HTTP 方式访问 HDFS 服务的功能。它支持所有 HDFS filesystem 操作(包括读取与写入)的 REST Api。

更多请参见:Adding HttpFS

2. HBase

Master

负责监视集群中的所有 RegionServer 实例,并且是所有元数据更改的接口。在分布式集群中,Master 通常运行在 NameNode 之上。其具体提供的功能如下:

1) 提供的接口

HMasterInterface 主要提供面向元数据的方法:

  • Table (createTable, modifyTable, removeTable, enable, disable)
  • ColumnFamily (addColumn, modifyColumn, removeColumn)
  • Region (move, assign, unassign)

例如,当 HBaseAdmin 方法 disableTable 被调用时,它由 Master Server 提供服务。

2) 运行的线程

Master 运行了几个后台线程,其中包括:

  • LoadBalancer: 定期的,当没有 region 被 transition 时,LoadBalancer 将运行并移动 region 以平衡集群的负载;
  • CatalogJanitor:定期检查并清理 .META. 表;

详情请参见:9.5 HBase Master

RegionServer

负责服务和管理 regions。在分布式集群中,RegionServer 运行在 DataNode 之上。其具体的功能如下:

1) 提供的接口

HRegionRegionInterface 公开的方法包含面向数据和 Region 维护的方法:

  • Data (get, put, delete, next, etc.)
  • Region (splitRegion, compactRegion, etc.)

例如,当调用 HBaseAdmin 的方法 majorCompact 操作表时,客户端实际上会遍历指定表的所有区域,并直接向每个 region 请求 major compaction 操作。

更多请参见:9.6 HBase RegionServer

3. Yarn

NodeManager

负责启动和管理节点上的 containers。Containers 则用于执行 AppMaster 指定的任务。

ResourceManager (RM)

负责跟踪与管理集群中的资源,并调度运行在 Yarn 上的 applications(例如 MapReduce 作业)。

在 Hadoop 2.4 之前,RM 具有单点故障,实现高可用请参考:Yarn ResourceManager High Availability

JobHistory

以 REST API 的方式向用户提供完成的 applications 的状态查询。目前它只支持 MapReduce 并提供完成的 job 信息。

4. Spark_on_yarn

HistoryServer

显示有关完成的 Spark aplications 的历史记录信息。

5. Hive

HiveServer2

使客户端能够对 Hive 执行查询功能。HiveServer2 是已弃用的 HiveServer1 的继承者。它支持多客户端并发和身份验证,旨在为 JDBC 和 ODBC 等开放 API 客户端提供更好的支持。

HiveServer2 是作为组合服务运行的单个进程,其中包括基于 Thrift 的 Hive 服务(TCP或HTTP)和用于 Web UI 的 Jetty Web 服务器。

更多请参见:Hive HiveServer2 Overview

HiveMetaStore

将 Hive 表和分区的元数据存储在关系型数据库中,并提供 API 访问表和分区的所有元数据。

更多请参见:

GateWay

6. Zookeeper

Server

其主要功能如下:

  • 基于 Paxos 算法提供 Master 选举主备切换功能;
  • HBase 通过创建并监听 ZK 节点,实现系统容错功能;
  • HBase 通过在 ZK 上记录与感知 RootRegion(region 元数据)的变化,来实现管理 RootRegion
  • HBase 将 Region 的上下线和重新上下线的状态管理/通知交由 ZK; 管理,来实现Region 管理
  • HBase 通过在 ZK 上创建 SplitWAL 节点,并由 ZK 担负相互通知和信息持久化的角色,从而实现分布式的 SplitWAL 任务管理
  • 在 Yarn 中,ZK 用来存储应用的运行状态

7. mgmt

  • ActivityMonitor
  • AlertPublisher
  • ClockOffset
  • EventServer
  • HostMonitor
  • ServiceMonitor

参考链接

数据同步项目总结2-数据流

* TOC{:toc}数据流是指数据从源端存储库到目的端存储库的一个流动过程,这个过程与数据的有序性、吞吐量、安全点、统计等功能或特性息息相关,经过多次调整,最终在线上环境的测试中,单个作业的 SQLServer -> Kafka 的同步速度能够维持在 3800000+ r...… Continue reading