HADOOP框架组成

您所在的位置:网站首页 简述资源管理器的组成及作用 HADOOP框架组成

HADOOP框架组成

2024-07-15 14:48:49| 来源: 网络整理| 查看: 265

hadoop框架 hadoop 框架的组成:MapReduce (计算) Yarn(资源调度)Hdfs(数据存储) Common(辅助工具)。 HDFS架构概述 (1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等 (2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 (3)Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。 1.1 HDFS产出背景及定义 1. HDFS产生背景 随看数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。 2. HDFS定义 HDFS (Hadoop Distributed File System) ,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。 **HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,不适合来做网盘使用。** 1.2HDFS的优缺点 1. 优点 1)高容错性: 数据自动保存多个副本,它通过增加副本的形式,提高容错性。 某一个副本丢失后,它可以自动恢复。 2)适合处理大数据 数据规模:能够处理数据规模达到GB, TB、甚至PB级别的数据; 文件规模:能够处理百万规模以上的文件数量,数量相当之大。 3)可构建在廉价机器上,通过多副本机制;提高可靠性。 2. 缺点 1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。 2)无法高效的对小文件进行存储。 (1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的; (2)小文件存储的寻址时间会超过读取时间,它违反了hdfs的设计目标。 3)不支持并发写入,文件随机修改。 (1) 同一时间一个文件只能有一个用户执行写操作,不允许多个线程同时写。 (2) 仅支持数据的append(追加),不支持文件的随机修改。 1.3 HDFS组成架构 1.NameNode: 就是Master,它是一个主管,管理者。 (1) 管理hdfs的名称空间。 (2)配置副本策略。 (3)管理数据块(block)的映射信息。 (4) 处理客户端读写请求。 2. DataNode:就是slave。NameNode下达命令,DataNode执行实际的操作。 (1) 存储实际的块数据。 (2) 执行块数据的读写操作。 3. Client: 就是客户端。 (1))文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block, (2)与NameNode交互,获取文件的位置信息; (3)与DataNode交互,读取或者写入数据; (4)Client 提供一些命令来管理HDFS,比如NameNode格式化; (5) Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作; 4.Secondary NameNode:并习即ameNode的热备。当NameNode挂掉的时候不能马上替换NameNode并提供服务。 (1)辅助NameNode,分担其工作量,比如定期和平Fsimage和Edits,并推送给NameNode: (2)在紧急情况下,可辅助恢复NameNode。 5.HDFS文件块大小。 hdfs中的文件在物理上是分块存储的(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.0中是128M,老版本中是64M。 1. 例如有一个集中的block块 2. 如果寻址时间为10ms,就是查找到目标的block是10ms. 3. 寻址的时间为传输时间的1%时,则是最佳状态。因此。传输时间=10ms/0.01=1000ms=1s 4. 而目前磁盘的传输速度普遍为100MB/S 5. block大小=1s*100mb/s=100mb 5.1 为什么块的大小不能设置太小 1.hdfs的块设置的太小,会增加寻址时间,程序一直在找块的开始位置。 2 如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这个块数据时,会非常慢。 -----hdfs块的大小设置主要取决于磁盘传输速率。 1.4 hdfs 的数据流。 1.5 NN和2NN工作机制 - 第一阶段:NameNode启动 (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。 (2)客户端对元数据进行增删改的请求。 (3)NameNode记录操作日志,更新滚动日志。 (4)NameNode在内存中对元数据进行增删改。 - 第二阶段:Secondary NameNode工作 (1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。 (2)Secondary NameNode请求执行CheckPoint。 (3)NameNode滚动正在写的Edits日志。 (4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。 (5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。 (6)生成新的镜像文件fsimage.chkpoint。 (7)拷贝fsimage.chkpoint到NameNode。 (8)NameNode将fsimage.chkpoint重新命名成fsimage。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200726195606404.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjI2NjcxOA==,size_16,color_FFFFFF,t_70) - 思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。 这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。 但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。 4 .NN和2NN工作机制详解: Fsimage:NameNode内存中元数据序列化后形成的文件。 Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。 NameNode启动时,先滚动Edits并生成一个空的edits.inprogress,然后加载Edits和Fsimage到内存中,此时NameNode内存就持有最新的元数据信息。Client开始对NameNode发送元数据的增删改的请求,这些请求的操作首先会被记录到edits.inprogress中(查询元数据的操作不会被记录在Edits中,因为查询操作不会更改元数据信息),如果此时NameNode挂掉,重启后会从Edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改的操作。 由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。 SecondaryNameNode首先会询问NameNode是否需要CheckPoint(触发CheckPoint需要满足两个条件中的任意一个,定时时间到和Edits中数据写满了)。直接带回NameNode是否检查结果。SecondaryNameNode执行CheckPoint操作,首先会让NameNode滚动Edits并生成一个空的edits.inprogress,滚动Edits的目的是给Edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的Edits和Fsimage会拷贝到SecondaryNameNode的本地,然后将拷贝的Edits和Fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为Fsimage后替换掉原来的Fsimage。 NameNode在启动时就只需要加载之前未合并的Edits和Fsimage即可,因为合并过的Edits中的元数据信息已经被记录在Fsimage中。 1 .6 DataNode工作机制 1. DataNode工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。 3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。 4)集群运行中可以安全加入和退出一些机器。 2 数据完整性 思考:如果电脑磁盘里面存储的数据是控制高铁信号灯的红灯信号(1)和绿灯信号(0),但是存储该数据的磁盘坏了,一直显示是绿灯,是否很 危险?同理DataNode节点上的数据损坏了,却没有发现,是否也很危险,那么如何解决呢? 如下是DataNode节点保证数据完整性的方法。 1)当DataNode读取Block的时候,它会计算CheckSum。 2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。 3)Client读取其他DataNode上的Block。 4)DataNode在其文件创建后周期验证CheckSum。

二 , YARN架构概述

1) ResourceManager (RM)主要作用如下 (1)处理客户端请求 (2)监控NodeManager (3)启动或监控ApplicationMaster (4)资源的分配与调度 2) NodeManager (NM)主要作用如下 (1)管理单个节点上的资源 (2)处理来自ResourceManager的命令 (3)处理来自ApplicationMaster的命令 3) ApplicationMaster (AM)作用如下 (1)负责数据的切分 (2)为应用程序申请资源 并分配给内部的任务 (3)任务的监控与容错 4) Container Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU,磁盘、网络等。

YARN结构2.1 Yarn资源调度器

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源 相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。 YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成

2.2 Yarn工作机制

(1)MR程序提交到客户端所在的节点。 (2)YarnRunner向ResourceManager申请一个Application。 (3)RM将该应用程序的资源路径返回给YarnRunner。 (4)该程序将运行所需资源提交到HDFS上。 (5)程序资源提交完毕后,申请运行mrAppMaster。 (6)RM将用户的请求初始化成一个Task。 (7)其中一个NodeManager领取到Task任务。 (8)该NodeManager创建容器Container,并产生MRAppmaster。 (9)Container从HDFS上拷贝资源到本地。 (10)MRAppmaster向RM 申请运行MapTask资源。 (11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。 (12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。 (13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。 (14)ReduceTask向MapTask获取相应分区的数据。 (15)程序运行完毕后,MR会向RM申请注销自己。

2.3 作业提交过程

(1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAppMaster。 (2)作业初始化 第6步:当RM收到Client的请求后,将该job添加到容量调度器中。 第7步:某一个空闲的NM领取到该Job。 第8步:该NM创建Container,并产生MRAppmaster。 第9步:下载Client提交的资源到本地。 (3)任务分配 第10步:MrAppMaster向RM申请运行多个MapTask任务资源。 第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。 (4)任务运行 第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。 第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。 第14步:ReduceTask向MapTask获取相应分区的数据。 第15步:程序运行完毕后,MR会向RM申请注销自己。 (5)进度和状态更新 YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。 (6)作业完成 除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

2. 作业提交过程之MapReduce 在这里插入图片描述 2.4 资源调度器 Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。(具体设置详见:yarn-default.xml文件) 1.先进先出调度器(FIFO) 在这里插入图片描述 2.容量调度器(Capacity Scheduler) 在这里插入图片描述 3.公平调度器(Fair Scheduler 在这里插入图片描述

*2.5 任务推测机制

1.作业完成时间取决于最慢的任务完成时间 一个作业由若干个Map任务和Reduce任务构成。因硬件老化、软件Bug等,某些任务可能运行非常慢。 2.推测执行机制 发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度。为拖后腿任务启动一个备份任务,同时运行。谁先运行完,则采用谁的结果。 3.执行推测任务的前提条件 (1)每个Task只能有一个备份任务 (2)当前Job已完成的Task必须不小于0.05(5%) (3)开启推测执行参数设置。mapred-site.xml文件中默认是打开的。 mapreduce.map.speculative true If true, then multiple instances of some map tasks may be executed in parallel. mapreduce.reduce.speculative true If true, then multiple instances of some reduce tasks may be executed in parallel. 4.不能启用推测执行机制情况 (1)任务间存在严重的负载倾斜; (2)特殊任务,比如任务向数据库中写数据。 5.算法原理。

在这里插入图片描述 2.6 Hadoop优化

6.1 MapReduce跑的慢的原因 MapReduce跑的慢的原因 MapReduce程序效率的瓶颈在于两点: 1.计算机性能 CPU、内存磁盘健康、网络 2. I/O 操作优化 (1)数据倾斜 (2) Map和Reduce数设置不合理 (3) Map运行时间太长,导致Reduce等待过久 (4)文件过多 (5)大量的不可分块的超大文件 (6) Spill次数过多 (7) Merge次数过多等。 三 , MapReduce架构概述 MapReduce将计算过程分为两个阶段:Map和Reduce。 1)Map阶段并行处理输入数据 2)Reduce阶段对Map结果进行汇总

3.1 MapReduce定义

MapReduce是-个分布式运算程序的编程框架,是用户开发”基于Hadoop的 数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个 完整的分布式运算程序,并发运行在一个Hadoop集群上。

3.2 MapReduce优缺点

优点: 1.MapReduce 易于编程 它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。 也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。 2.良好的扩展性 当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。 3.高容错性 MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。 4.适合PB级以上海量数据的离线处理 可以实现上千台服务器集群并发工作,提供数据处理能力。 缺点: 1.不擅长实时计算 MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。 2.不擅长流式计算 流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。 3.不擅长DAG(有向图)计算 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

3.3 MapReduce核心思想 在这里插入图片描述 1)分布式的运算程序往往需要分成至少2个阶段。 2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。 3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。 4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

3.4 MapReduce进程 一个完整的MapReduce程序在分布式运行时有三类实例进程: 1)MrAppMaster:负责整个程序的过程调度及状态协调。 2)MapTask:负责Map阶段的整个数据处理流程。 3)ReduceTask:负责Map阶段的整个数据处理流程。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭