【大数据】【Hadoop】3、Hadoop系统的组成(Hadoop1.x)

文章目录

  • 前言
    • 名称节点(NameNode)
    • 辅助名称节点(Secondary NameNode)
    • 数据节点(DataNode)
    • 作业跟踪器(JobTracker)
    • 任务跟踪器(TaskTracker)
    • 两种类型节点
      • 主节点
      • 从节点:
  • 一、Hadoop分布式文件系统
    • Hadoop 文件的本质是块存储
  • 二、文件元数据和名称节点
  • 三、辅助名称节点
  • 四、 任务跟踪器
  • 五、作业跟踪器

前言

我们先介绍构成 Hadoop 1.x系统的组件,再介绍构成 Hadoop 2.x 系统的新组件。宏观上说,Hadoop 1.x 系统有以下几个守护进程

名称节点(NameNode)

维护着存储在 HDFS 上的所有文件的元数据信息。这些元数据信息包括组成文件的数据块信息,及这些数据块在数据节点上的位置。这个组件正是使用 Hadoop 1.x 搭建大型计算集群系统的瓶颈所在。

辅助名称节点(Secondary NameNode)

这不是名称节点的热备份。实际上,它作为Hadoop 平台的一个组件,其命名不是很恰当。它为名称节点组件执行一些内务处理功能(housekeeping functions)。

数据节点(DataNode)

把真正的数据块存放在本地硬盘上,这些数据块组成了保存在HDFS 上的每个文件。

作业跟踪器(JobTracker)

这是 Hadoop 系统的主要组件之一,它负责一个任务的整个执行过程。它的具体功能包括:调度各个子任务(Mapper 任务和 Reducer 任务各自的子任务)到各自的计算节点运行,时刻监控任务运行和计算节点的健康状况,对失败的子任务重新调度执行。就像名称节点一样,这个组件是使用 Hadoop 1.x 搭建大型计算集群系统的瓶颈所在。

任务跟踪器(TaskTracker)

运行在各个数据节点上,用来启动和管理各个 Map/Reduce 任务。与作业跟踪器进行通信。

两种类型节点

Hadoop 1.x 集群有两种类型的节点:主节点(master nodes) 和从节点 (slave nodes)。

主节点

主节点负责执行如下几个守护进程:名称节点进程、辅助名称节点进程、作业跟踪器进程

从节点:

从节点分布在整个集群上并执行如下几个守护进程:数据节点进程、任务跟踪器进程

一、Hadoop分布式文件系统

Hadoop 分布式文件系统(HDFS) 用于支持数据处理程序要处理的大文件。这样的程序在处理数据的时候,有一次写、多次读的特点。
HDFS 文件系统由以下几个守护进程协调地运行来提供服务:

  • 名称节点进程
  • 辅助名称节点进程
  • 数据节点进程

HDFS 系统也是主从架构的。运行名称节点进程的服务器为主节点,运行数据节点进程的服务器为从节点。一般情况下,集群中的每个从节点都会运行一个数据节点进程。这个数据节点进程管理着挂载到这个数据节点上的存储设备。HDFS 系统提供一个统一的文件系统命名空间,用户就像使用一个文件系统一样来存取集群节点上的数据。名称节点进程负责管理这些存储在集群上的文件的元数据。

Hadoop 文件的本质是块存储

  1. 在 Hadoop 系统中,每个文件被分隔为多个数据块。一个典型的数据块大小为64MB,也可以将其配置为32MB 或者128MB。在HDFS 中,文件块的大小是按照文件的大小来配置的。
  2. 每个数据块存储在数据节点上。为了防止节点故障,这些数据块是有备份的。在 Hadoop系统中,备份数量默认配置为3。
  3. 具备机架感知功能的 Hadoop 系统把文件的一个数据块存放在本地机架上的一台计算节点上。这个数据块的第二个备份会被存放在另外一个远程机架上的计算节点中。这个数据块的第三个备份会被存放在第二个数据块备份机架上的另一台计算节点中。
  4. Hadoop 系统借助一个单独配置的网络拓扑文件实现机架感知功能,这个网络拓扑文件配置了机架到计算节点的域名系统(DNS)名称之间的映射,该网络拓扑文件的路径配置在 Hadoop 配置文件中。

二、文件元数据和名称节点

当客户端向 HDFS 请求读取或者存储一个文件的时候,它需要知道要访问的数据节点是哪一个。知道这个信息之后,客户端可以直接访问那个数据节点。文件的元数据信息由名称节点来负责维护。

HDFS 系统提供一个统一的文件系统命名空间,用户就像使用一个文件系统一样来存取集群节点上的数据。HDFS 把存储在目录中的文件按照一定的层级展示出来,目录是可以嵌套的。

所有文件和目录的元数据信息都由名称节点来负责管理。名称节点管理所有的文件操作,包括文件/目录的打开、关闭、重命名、移动等等。数据节点就负责存储实际的文件数据。这是一个非常重要的区别。当客户点请求或者发送文件数据,文件的数据在物理上是不经过名称节点传输的。否则这将是一个极其严重的瓶颈。客户端仅仅是简单地从名称节点获取文件的元数据,然后根据其元数据信息直接从数据节点获取文件的数据块。
名称节点存储的一些元数据包括:

  • 文件/目录名称及相对于其父目录的位置。
  • 文件和目录的所有权及权限。
  • 各个数据块的文件名。所有数据块以文件的形式存放在数据节点的本地文件系统的目
    录中,该目录可以被 Hadoop 系统管理员配置。

名称节点服务器上存放元数据的文件为 fsimage。 Hadoop 系统运行期间任何涉及对元数据修改的操作都保存在内存中,并且被持久存储到另外一个名为 edits 的文件。辅助名称节点会周期性地把 edits 文件中的信息合并到 fsimage 文件中

  • HDFS写文件、读文件、删除文件的机制(略)

三、辅助名称节点

我们知道名称节点在内存中维护着所有的元数据。名称节点最先从存放在本地文件系统中的 fsimage 文件将元数据加载到内存中。在 Hadoop 系统中的一系列操作运行过程中,元数据信息在内存中不断更新。为了防止数据丢失,这些数据操作记录还会被持久存储到另外一个名为 edits 的本地文件中。

edits 文件是用来在 Hadoop 系统运行期间收集元数据的变化的。如果 Hadoop 系统重启了,在 Hadoop 重启的过程中,edits 文件中的内容会与 fsimage 文件中的内容合并。显然,这会拖慢 Hadoop 系统的重启时间。辅助名称节点就是来处理这个问题的。辅助名称节点的作用就是周期性地把 edits 文件中的内容与 fsimage 文件中的内容合并。为此目的,辅助名称节点会周期性地顺序执行下列步骤:

  • 1)辅助名称节点会请求名称节点来结转(roll over) edits 文件,确保新的更新保存到一个新的文件。这个新的文件名字叫做 edits.new。
  • 2)辅助名称节点向名称节点请求获取 fsimage 文件利 edits 文件。
  • 3)辅助名称节点把 edits 文件和 fsimage 文件合并,生成一个新的 fsimage 文件。
  • 4)名称节点从辅助名称节点接收到新生成的 fsimage 文件,并替代旧的 fsimage 文件。同时将 edits 文件中的内容替换成步骤1中创建的 edit.new 文件的内容。
  • 5)更新 fstime 文件来记录发生的检查点操作。

名称节点可以导致 Hadoop 1.x 系统单点故障。如果 edits 文件和fsimage 文件数据损坏了,存放在 HDFS 系统上的所有数据都会丢失。

四、 任务跟踪器

任务跟踪器(TaskTracker)守护进程在集群中每台计算节点中运行,接收诸如 Map、Reduce 和 Shuffle 这些操作任务的请求。每个任务跟踪器都会分配一定的槽位数(a set ofslots),其槽位数的数量一般与计算节点上可用的 CPU 核数一致。任务跟踪器接收到一个(来自作业跟踪器)的请求之后,就会启动一个任务(task),任务跟踪器会为这个任务初始化一个新的JVM。JVM 重用是可以的,但这项功能在实际用法示例中并不常见。使用 Hadoop 平台的大多数用户都将该功能关闭了。任务跟踪器分配一项任务取决于它的可用槽位(slots) 数量(槽位数量二实际运行的任务数量)。任务跟踪器负责向作业跟踪器(JobTracker)发送心跳消息。除了向作业跟踪器反馈任务跟踪器的运行状况之外,心跳信息中还包括了任务跟踪器当前可用的槽位数量。

五、作业跟踪器

作业跟踪器(JobTracker)守护进程负责启动和监控 MapReduce 作业。当一个客户端向Hadoop 系统提交一个作业,作业的启动流程如下图所示:
【大数据】【Hadoop】3、Hadoop系统的组成(Hadoop1.x)_第1张图片
该过程的详细步骤如下:

  • 1)作业跟踪器接收到了作业请求。
  • 2)大多数的 MapReduce 作业都需要一个或多个输人文件目录。任务跟踪器向名称节点发出请求,获得一个数据节点的列表,这个列表上的数据节点中存储了组成输人文件数据的数据块。
  • 3)作业跟踪器为作业的执行做准备工作。在这个步骤中,任务跟踪器确定执行该作业需要的任务(Map 任务和 Reduce 任务)数量。作业跟踪器尽量把这些任务都调度到离数据块最近的位置上运行。
  • 4)作业跟踪器把任务提交到每个任务跟踪器节点去执行。任务跟踪器节点监控任务执行情况。任务跟踪器以预先设定的时间间隔发送心跳信息到作业跟踪器。如果作业跟踪器在预先设定的时间间隔之后,没有收到任务跟踪器发来的心跳信息,那么就认为该任务跟踪器节点出现故障,任务就会被调度到另外一个节点去运行。
  • 5)一旦所有的任务都执行完毕,作业跟踪器就会更新作业状态为成功。如果任务反复失败达到一定的数量(这个数值可以通过 Hadoop 系统的配置文件来指定),作业跟踪器就会宣布作业运行失败。
  • 6)客户端会轮询作业跟踪器及时地获得作业运行状态。

作业跟踪器的故障会导致 Hadoop 系统的单点故障。如果作业跟踪器节点挂掉,集群上所有的任务都将无法正确运行。由于仅有一个作业跟踪器节点运行,在多任务同时运行的系统环境中,会增加该作业跟踪器节点的工作负载。

你可能感兴趣的:(java,hadoop,big,data,hdfs)