Haddoop架构与原理
Hadoop架构
架构概述
Hadoop经典版本架构Hadoop V1.0核心:
- HDFS
- MapReduce
Hadoop V2.0,引入了Yarn。其核心:
- HDFS
- Yarn
- MapReduce
Yarn是资源调度框架。能够细粒度的管理和调度任务,此外,还能支持其他计算框架,比如:spark等。
Hadoop能够根据最简单的计算机架构,实现计算机集群的功能。
HDFS设计
单台及其的硬件扩展(硬盘),纵向扩展的问题,是有硬件瓶颈的,包括成本也会指数增长。
Namenode
Namenode的工作职责:
- 管理有哪些机器节点,即有哪些datanode,比如Ip信息等。
- 管理文件信息,,比如:文件名、文件大小、文件被切成几块以及每一块的存储位置信息(存放在哪个datanode节点上),即管理原数据信息。
- 通过 <span style="color:red;font-weight:bolder">rpc心跳机制</span> 知道集群里面datanode节点的状态变化(参见下面的集群相关概念)。
- namenode存在 <span style="color:red;font-weight:bolder">单点故障</span> 问题,可以再引入一台管理者节点。
- 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主要有两类文件:
- fsimage文件,记录元数据信息的文件
- 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读文件过程- 打开HDFS文件系统
- 从Name Node中获取数据块位置信息。
- 从各个Data Node中读取数据块信息。
- 关闭HDFS文件系统
集群相关概念
心跳检测
检测集群当中各个节点时是否存活。
每隔3S检测一次所有的节点是否有不在线或者不正常的节点信息,如果存在则分配相关任务。
单点故障
由于主节点服务器发生故障,从而导致所有集群的成员节点,都无法正常工作。
选举策略
从所有成员节点当中,选举出一个新的节点作为主服务器。是为了应对服务器发生单点故障。
数据安全
当集群服务器中,一个数据节点挂掉后,将导致数据的不完整。故需要一个备份机制,保证数据的完整性。
网友评论