美文网首页大数据
大数据 Haddoop(二) 架构与原理

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

作者: 傅二毛 | 来源:发表于2020-05-15 17:25 被阅读0次

    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检测一次所有的节点是否有不在线或者不正常的节点信息,如果存在则分配相关任务。

    单点故障

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

    选举策略

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

    数据安全

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

    相关文章

      网友评论

        本文标题:大数据 Haddoop(二) 架构与原理

        本文链接:https://www.haomeiwen.com/subject/chqhohtx.html