大数据 Haddoop(二) 架构与原理

Haddoop架构与原理

Hadoop架构

架构概述

Hadoop经典版本架构

Hadoop V1.0核心:

  • HDFS
  • MapReduce

Hadoop V2.0,引入了Yarn。其核心:

  • HDFS
  • Yarn
  • MapReduce

Yarn是资源调度框架。能够细粒度的管理和调度任务,此外,还能支持其他计算框架,比如:spark等。

Hadoop能够根据最简单的计算机架构,实现计算机集群的功能。

HDFS设计

单台及其的硬件扩展(硬盘),纵向扩展的问题,是有硬件瓶颈的,包括成本也会指数增长。

Namenode

Namenode的工作职责:

  1. 管理有哪些机器节点,即有哪些datanode,比如Ip信息等。
  2. 管理文件信息,,比如:文件名、文件大小、文件被切成几块以及每一块的存储位置信息(存放在哪个datanode节点上),即管理原数据信息。
  3. 通过 rpc心跳机制 知道集群里面datanode节点的状态变化(参见下面的集群相关概念)。
  4. namenode存在 单点故障 问题,可以再引入一台管理者节点。
  5. datanode挂掉后(从服务器),可能数据就可能修饰,文件信息就不完整了。所以需要一个备份机制,一般来讲,一个文件块有三个备份,本机一份,同一机架的其他的datanode有一份。另外一机器的上有一份。

管理元数据信息,文件名,文件大小,文件块信息等。namdenode把元数据信息存到内存里,为了快速查询,此外为了应对服务宕机而引起的元数据丢失,也要持久化到本地文件里。namdenode不存储具体块数据(datanode存储具体块数据),只存储元数据信息;datanode用于负责存储块数据。

Hadoop块

HDFS是如何存储文件的?

HDFS将用户所上传的文件,根据固定大小切割为若干数据块,而这个数据库就叫做hadoop块。

Hadoop1.0中,源数据按照64MB切割分块,每块hadoop块的大小——BlockSize=64MB。
Hadoop2.0中,源数据按照128MB切割分块,每块hadoop块的大小——BlockSize=128MB。

再将这些数据块分别放到不同的数据节点datanode中,namenode则必须负责记录这些数据块信息,比如:存放的位置。方便下一次取出来的时候重新合成完整的文件。

HDFS细节说明

namenode主要有两类文件:

  1. fsimage文件,记录元数据信息的文件
  2. edits文件,记录原数据信息改动的文件。只要原数据发生变化,那么这个edits文件就会有对应的记录。

fsimage以及edits文件会进行定期合并,hadoop默认合并周期是3600s。fsimage根据edits里面改动记录进行元数据更新。

如果元数据信息丢失,HDFS就不能进行正常工作了。在上一章节中对主机Master安装时,进行的操作的命令hdfs namenode -format这个指令实际的作用是创建了初始的fsimage文件以及edits文件。

下面将展示下namenode将这些信息存放的位置,打开hadoop的根目录中以及之前配置的hdfs目录下的data/current目录。

$ pwd
/opt/hadoop/hadoop-2.9.2/hdfs/data/current
$ ls -al

总用量 2100
drwxr-xr-x. 2 root root    4096 5月  12 14:59 .
drwxr-xr-x. 3 root root      40 5月  12 11:00 ..
-rw-r--r--. 1 root root      42 5月  11 22:47 edits_0000000000000000001-0000000000000000002
-rw-r--r--. 1 root root     750 5月  11 23:47 edits_0000000000000000003-0000000000000000013
-rw-r--r--. 1 root root 1048576 5月  11 23:47 edits_0000000000000000014-0000000000000000014
-rw-r--r--. 1 root root      42 5月  12 11:59 edits_0000000000000000015-0000000000000000016
-rw-r--r--. 1 root root      42 5月  12 12:59 edits_0000000000000000017-0000000000000000018
-rw-r--r--. 1 root root      42 5月  12 13:59 edits_0000000000000000019-0000000000000000020
-rw-r--r--. 1 root root      42 5月  12 14:59 edits_0000000000000000021-0000000000000000022
-rw-r--r--. 1 root root 1048576 5月  12 14:59 edits_inprogress_0000000000000000023
-rw-r--r--. 1 root root     459 5月  12 13:59 fsimage_0000000000000000020
-rw-r--r--. 1 root root      62 5月  12 13:59 fsimage_0000000000000000020.md5
-rw-r--r--. 1 root root     459 5月  12 14:59 fsimage_0000000000000000022
-rw-r--r--. 1 root root      62 5月  12 14:59 fsimage_0000000000000000022.md5
-rw-r--r--. 1 root root       3 5月  12 14:59 seen_txid
-rw-r--r--. 1 root root     215 5月  12 11:00 VERSION

如果把上面的信息删除掉了,HDFS就无法正常工作。

Datanode又是如何工作的呢?下面将演示下,比如将nginx-1.18.0.tar.gz文件存入hadoop中/input目录下。通过命令hadoop fs -put /home/download/nginx-1.18.0.tar.gz /input,如下所示:

## 存放数据
$ hadoop fs -put /home/download/nginx-1.18.0.tar.gz /input

## 查看文件信息
$ hadoop fs -ls -r /input
Found 1 items
-rw-r--r--   3 root supergroup    1039530 2020-05-12 16:09 /input/nginx-1.18.0.tar.gz

存放成功后,进入hadoop-2.9.2/hdfs/data/current/BP-1768672816-192.168.0.20-1589275223937/current/finalized/subdir0/subdir0(这个目录相当深)。进入后,下面的blk_1073741825以及blk_1073741825_1001.meta就是其对应的数据块内容。

$ ls -al

总用量 1024
drwxr-xr-x. 2 root root      60 5月  12 17:27 .
drwxr-xr-x. 3 root root      21 5月  12 17:27 ..
-rw-r--r--. 1 root root 1039530 5月  12 17:27 blk_1073741825
-rw-r--r--. 1 root root    8131 5月  12 17:27 blk_1073741825_1001.meta

数据块是保存在datanode中。namenode则是专门记录数据块的信息(如:数据块名字、数据块大小、所在位置、数据块序号等信息)。

机架

HDFS 架构

机架是包含了若干datanode的组成的资源划分。

通常情况下,由hadoop自行划分,一个机架包含若干个datanode(而datanode则是一个物理机一个datanode),简而言之就是Hadoop中的HDFS自行将若若干datanode进行分组的数据群组——机架。HDFS机架与机架之间存在自己的资源协调机制(上图中Replication)。一个机架可以有若干主机划分进去。

这里就涉及到HDFS中备份问题了(这里简单描述HDFS进行3个副本备份过程)。客户端(client)可以连接到任意一个datanode 1。客户端在写文件时,HDFS在将客户端链接datanode中存放一份数据,在同机架的datanode3中也放入一份数据,在不同机架的datanode中也存放一份相同数据。

关HDFS读写问题

HDFS读文件过程
  1. 打开HDFS文件系统
  2. 从Name Node中获取数据块位置信息。
  3. 从各个Data Node中读取数据块信息。
  4. 关闭HDFS文件系统
HDFS写文件过程

集群相关概念

心跳检测

检测集群当中各个节点时是否存活。

每隔3S检测一次所有的节点是否有不在线或者不正常的节点信息,如果存在则分配相关任务。

单点故障

由于主节点服务器发生故障,从而导致所有集群的成员节点,都无法正常工作。

选举策略

从所有成员节点当中,选举出一个新的节点作为主服务器。是为了应对服务器发生单点故障。

数据安全

当集群服务器中,一个数据节点挂掉后,将导致数据的不完整。故需要一个备份机制,保证数据的完整性。

你可能感兴趣的:(大数据 Haddoop(二) 架构与原理)