大数据 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. 通过 <span style="color:red;font-weight:bolder">rpc心跳机制</span> 知道集群里面datanode节点的状态变化(参见下面的集群相关概念)。
  4. namenode存在 <span style="color:red;font-weight:bolder">单点故障</span> 问题,可以再引入一台管理者节点。
  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检测一次所有的节点是否有不在线或者不正常的节点信息,如果存在则分配相关任务。

单点故障

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

选举策略

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

数据安全

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352