zoukankan      html  css  js  c++  java
  • Hadoop记录-hadoop介绍

    1.hadoop是什么?

    Hadoop 是Apache基金会下一个开源的大数据分布式计算平台,它以分布式文件系统HDFS和MapReduce算法为核心,为用户提供了系统底层细节透明的分布式基础架构。

    2.hadoop主要组成部分

    1)hdfs分布式存储文件系统---海量数据存储,大文件被分成默认64M一块的数据块分布存储在集群机器中

    2)Yarn资源管理与作业调度

    3)MapReduce算法---数据计算(并行计算框架

    3.hadoop特点

    可靠、高效、可伸缩、容错、不适合低延迟数据访问、可处理大规模集群海量数据

    4.hadoop集群组成部分

    NameNode,DataNode,SecondaryNameNode,Yarn ResourceManager-(JobTracker,TaskTracker)、NodeManager。

    1)NameNode中记录了文件是如何被拆分成block以及这些block都存储到了那些DateNode节点,同时保存了文件系统运行的状态信息。
    2)DataNode中存储的是被拆分的blocks。
    3)SecondaryNameNode帮助NameNode收集文件系统运行的状态信息。
    4)JobTracker当有任务提交到Hadoop集群的时候负责Job的运行,负责调度多个TaskTracker。
    5)TaskTracker负责某一个map或者reduce任务。

    hadoop集群遵从M/S主从结构分布,DataNode一般分布在从节点上。

    5.MapReduce介绍

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它极大的方便编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。它的实现是map函数和Reduce函数组成。

    Hadoop为每一个input split创建一个task调用Map计算,在此task中依次处理此split中的一个个记录(record),map会将结果以key--value的形式输出,hadoop负责按key值将map的输出整理后作为Reduce的输入,Reduce Task的输出为整个job的输出,保存在HDFS上。

     简单的说:MapReduce框架的核心步骤主要分两部分:Map和Reduce。当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce任务的输入数据。Reduce对数据做进一步处理之后,输出最终结果。

    MapReduce由Client、JobTracker、TaskTracker、Task组成,如图:


    1)Client
    用户编写的MapReduce程序通过Client提交到JobTracker。
    2)JobTracker
    主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康情况,一旦有失败情况后,其会将相应的任务给到其他节点上。
    3)TaskTracker
    它会周期的将本节点资源使用和任务进度汇报给jobtracker,方式叫做“心跳”;与此同时接受jobTracker发送过来的命令并执行操作。
    4)Task
    Task分为Map Task和Reduce Task两种,有TaskTracker启动。
    Map Task:将对应的输入信息解析成一个个的key/value对,调用map函数进行处理,最终将临时结果放到本地磁盘上,临时数据会被分成若干个partition,每个partition对应一个Reduce Task。
    Reduce Task过程:从节点上读取Map Task中间结果;按照key对key/value对进行排序;调用reduce函数,将结果保存到HDFS上

    执行流程:
    1)作业提交:首先有Client将作业相关信息上传到HDFS上,然后通知JobTracker。JobTracker接收到请求之后,有作业调度进行初始化,JobTracker会创建一个JobInProgress进程,作用是跟踪作业运行状况,并且为每个Task创建一个TaskInProgress来跟踪每个人物的运行状态。
    2)任务调度和监控:TaskTracker周期性的通过心跳向jobTracker汇报节点的资源使用情况,JobTracker按照一定策略选择一个合适的任务使用该空闲资源,这个就是任务调度器完成的工作了。另外JobTracker还要完成监控的作用,负责跟踪作业的整个与性过程,如果Tasktracker或者Task失败,将转移计算任务。
    3)任务环境准备:TaskTracker为每个Task启动一个JVM避免不同Task之间的冲突。
    4)任务执行:启动Task,运行过程中,每个Task通过RPC的方法是汇报给TaskTracker,再有TaskTracker汇报给JobTracker
    5)作业完成:所有的Task执行完毕后,整个作业执行成功。

    6.HDFS介绍

    1)Hadoop Distributed FileSystem,Hadoop分布式文件系统。

    a.Block:HDFS默认的基本存储单位是64M的数据块,和普通文件系统相同的是,HDFS中的文件是被分成64M(新版128M)一块的数据块存储的。 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
    b.元数据节点(NameNode)和数据节点(DataNode)

    2)HDFS特点
    (1) 超大文件数据集群
    (2) 流式数据访问方式读取文件
    (3) 对硬件要求并不是特别高,有很好的容错机制。
    (4) 数据访问有一定的延迟,这是因为HDFS优化的是数据吞吐量,是要以提高延迟为代价的。
    (5) HDFS无法高效存储大量小文件,因为NameNode限制了文件个数。
    (6) HDFS不支持多个写入者,也不支持随机写。

    3)体系结构

    (1)HDFS由Client、NameNode、DataNode、SecondaryNameNode组成。
    (2)Client提供了文件系统的调用接口。
    (3)NameNode由fsimage(HDFS元数据镜像文件)和editlog(HDFS文件改动日志)组成,NameNode在内存中保存着每个文件和数据块的引用关系。NameNode中的引用关系不存在硬盘中,每次都是HDFS启动时重新构造出来的。
    (4) SecondaryNameNode的任务有两个:a.定期合并fsimage和editlog,并传输给NameNode;b.为NameNode提供热备份。
    (5)一般是一个机器上安装一个DataNode,一个DataNode上又分为很多很多数据块(block)。数据块是HDFS中最小的寻址单位,一般一个块的大小为64M,不像单机的文件系统,少于一个块大小的文件不会占用一整块的空间。
    (6)设置块比较大的原因是减少寻址开销,但是块设置的也不能过大,因为一个Map任务处理一个块的数据,如果块设置的太大,Map任务处理的数据量就会过大,会导致效率并不高。
    (7)DataNode会通过心跳定时向NameNode发送所存储的文件块信息。
    (8)HDFS的副本存放规则
    默认的副本系数是3,一个副本存在本地机架的本机器上,第二个副本存储在本地机架的其他机器上,第三个副本存在其他机架的一个节点上。
    这样减少了写操作的网络数据传输,提高了写操作的效率;另一方面,机架的错误率远比节点的错误率低,所以不影响数据的可靠性。

    4)数据流向过程

     读取过程说明

    (1)HDFS客户端调用DistributedFileSystem类的open()方法,通过RPC协议请求NameNode来确定说请求的文件所在位置,找出最近的DataNode节点的地址。
    (2)DistributedFileSystem会返回一个FSDataInputStream输入流对象给客户端。
    (3)客户端会在FSDatatInputStream上调用read()函数,按照每个DataNode的距离从近到远依次读取。
    (4)读取完每个DataNode后,在FSDataInputStream上调用close()函数。
    (5)如果读取出现故障,就会读取数据块的副本,同时向NameNode报告这个消息。

    写入流程说明
    (1)客户端调用DistributedFileSystem对象的create()方法,通过RPC协议调用NameNode,在命名空间创建一个新文件,此时还没有关联的DataNode与之关联。
    (2)create()方法会返回一个FSDataOutputStream对象给客户端用来写入数据。
    (3)写入数据前,会将文件分割成包,放入一个“数据队列”中。
    (4)NameNode为文件包分配合适的DateNode存放副本,返回一个DataNode的管道。
    (5)根据管道依次保存文件包在各个DataNode上。
    (6)各个DataNode保存好文件包后,会返回确认信息,确认消息保存在确认队列里,当管道中所有的DataNode都返回成功的的确认信息后,就会从确认队列里删除。
    (7)管道中所有的DataNode都保存完成后,调用FileSystem对象的close()关闭数据流。

    7.Yarn介绍

    YARN是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)。其中,ResourceManager负责所有资源的监控、分配和管理;ApplicationMaster负责每一个具体应用程序的调度和协调;NodeManager负责每一个节点的维护。对于所有的applications,RM拥有绝对的控制权和对资源的分配权。而每个AM则会和RM协商资源,同时和NodeManager通信来执行和监控task。

    ResourceManager
    ResourceManager负责整个集群的资源管理和分配,是一个全局的资源管理系统。
    NodeManager以心跳的方式向ResourceManager汇报资源使用情况(目前主要是CPU和内存的使用情况)。RM只接受NM的资源回报信息,对于具体的资源处理则交给NM自己处理。
    YARN Scheduler根据application的请求为其分配资源,不负责application job的监控、追踪、运行状态反馈、启动等工作。

    NodeManager
    NodeManager是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN集群每个节点都运行一个NodeManager。
    NodeManager定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container的运行状态。当ResourceManager宕机时NodeManager自动连接RM备用节点。
    NodeManager接收并处理来自ApplicationMaster的Container启动、停止等各种请求。

    ApplicationMaster
    用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的机器上。
    负责与RM调度器协商以获取资源(用Container表示)。
    将得到的任务进一步分配给内部的任务(资源的二次分配)。
    与NM通信以启动/停止任务。
    监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
    当前YARN自带了两个ApplicationMaster实现,一个是用于演示AM编写方法的实例程序DistributedShell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另一个是运行MapReduce应用程序的AM—MRAppMaster。
    注:RM只负责监控AM,并在AM运行失败时候启动它。RM不负责AM内部任务的容错,任务的容错由AM完成。

    执行过程

    1)client向RM提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
    2)ResourceManager启动一个container用于运行ApplicationMaster。
    3)启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与RM保持心跳。
    4)ApplicationMaster向ResourceManager发送请求,申请相应数目的container。
    5)ResourceManager返回ApplicationMaster的申请的containers信息。申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后,AM与对应的NodeManager通信,要求NM启动container。AM与NM保持心跳,从而对NM上运行的任务进行监控和管理。
    6)container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息。
    7)应用运行期间,client直接与AM通信获取应用的状态、进度更新等信息。
    8)应用运行结束后,ApplicationMaster向ResourceManager注销自己,并允许属于它的container被收回。

  • 相关阅读:
    Markdown自动生成目录
    defer使用小结
    RESTful API设计的点
    总结下数据库的命名规范
    go module学习笔记
    golang环境安装和配置
    jenkins环境搭建&配置(二)
    mac环境搭建selenium
    sed命令
    测试工作遇到的自动补0
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7684582.html
Copyright © 2011-2022 走看看