阅读 161

Hadoop2.0基础知识框架(HDFS、MapReduce、Yarn)|【大学生博客大赛】

Hadoop生态
    hadoop
        hadoop2.0新特性
    HDFS分布式文件系统
    MapReduce分布式计算框架
    
    
        hadoop
    大数据基本知识
        大数据概念:海量数据集合(无确切定义)
        大数据特征
            value(大量):数据规模大
            variety(多样):来源广泛
            velocity(高速):数据的增长速度和处理速度块
            value(价值):价值密度和数据总量成反比
        意义:研究大数据最大的意义是预测
        应用场景
            医疗
            金融
            零售
    优势
        强扩容
        低成本
        高效
        高可靠
        高容错
    集群部署
        集群部署模式
            单机模式:无需守护进程,程序在单个jvm上执行,一般用于学习或者开发调试使用
            伪分布式:hadoop的守护进程运行在一台主机节点上,一般用来调试完全分布式的代码,是完全分布式的一个特例(主节点和从节点合二为一)
            完全分布式:守护进程分别运行在由多个主机搭建的集群上,不同节点担任不同角色,通常用于构建企业级系统
        hadoop集群测试
            格式化文件系统:hdfs namenode -format       hadoop namenode -format
            启动namenode进程(主节点):hadoop-daemon.sh start namenode
            启动DataNode进程(从节点):hadoop-daemon.sh start datanode
            启动YARN ResourceManager(主节点):yarn-daemon.sh start resourcemanager
            启动YARN nodemanager(从节点):yarn-daemon.sh start nodemanager
            启动SecondaryNameNode(规划节点hadoop02):hadoop-daemo.sh start secondarynamenode
            启动所有HDFS服务进程(主进程):start-dfs.sh
            启动所有YARN进程(主进程):start-yarn.sh
            开启全部进程(主节点):start-all.sh
            关闭所有进程(主节点):stop-all.sh
            查看进程:jsp
            浏览器查看HDFS集群状态端口:50070
            浏览器查看YARN集群状态端口:8088
        服务器节点角色
            master(主节点,一个)
            slave(从节点,多个)


        HDFS分布式文件系统
    传统文件系统在完善中出现的问题
        传统文件系统遇到的瓶颈问题:存储(磁盘)。解决问题的方法:1、纵向扩容(增加磁盘和内存),2、横向扩容(增加服务器数量)
        解决文件上传和下载的效率问题:将大的文件切分成多个数据块,将数据块以并行的方式存储
        如何获取完整文件:增加一台服务器,用来记录文件被切割后的数据块信息及数据块的存储位置信息
        解决单点故障(有一台服务器宕机):用备份机制解决
    基本概念
        概述:是一个易于扩展的分布式文件系统,与其他分布式文件系统区别在于具有高容错能力,可以提供对应用程序数据的高吞吐量访问,主要用于海量文件信息的存储和管理(解决大数据文件信息的存储问题)
        组成部分
            NameNode
                HDFS集群的主服务器,以元数据的形式,管理和存储文件信息。用于维护文件系统名称并管理客户端对文件的访问,存储HDFS负责数据集群管理和在配置文件中备份数量等信息,记录对文件系统任何更改的操作(通过心跳检测机制与DataNode进行通信)
            DataNode
                存储节点,与NameNode保持不断通信,定期向NameNode发送所存储的数据块列表,当启动时,数据块列表发送给NameNode。DataNode中的数据块是以文件形式存储在磁盘。(里面有两个文件,一是存放数据,二是每个数据块对应一个元数据文件,包括数据长度,块数据校验和以及时间戳)
            Block
                Hadoop2.0中数据块默认大小128M,备份三份,尽可能存储于不同的DataNode中。(按块存储好处是屏蔽了文件的大小,提高数据的容错性和可用性)
            Rack
                用来存放部署Hadoop集群服务器的机架,HDFS通过机架感应策略使NameNode能确定每个DataNode所属的机架ID(使用副本存放策略,改进数据的可靠性,可用性和网络带宽的利用率,不同机架节点通过交换机通信)
            Metadata(元数据)
                维护HDFS中文件和目录的信息(文件名,目录名,父目录信息,创建、修改时间)
                记录文件内容,存储相关信息(文件分块情况,副本个数,副本所在DataNode信息)
                记录HDFS中所有的DataNode信息,用于DataNode的管理
                (文件具体内容不是元数据,元数据是用来描述和组织文件的内容,它的可用性决定了HDFS的可用性)
    特点
        优点
            高容错(保存多个副本,发现DataNode数据丢失,可从其他DataNode上的副本自动恢复)
            流式数据访问
            支持超大文件
            高数据吞吐量(一次写入多次读取,不能修改,保证数据一致性增加了数据吞吐量)
            可构建在廉价机器上
        缺点
            高延迟
            不适合小文件存储(小文件过多会提高元数据的数量,容易导致NameNode存储出现瓶颈)
            不适合并发写入(不支持并发多用户的写操作,写操作只能在文件末尾追加数据)
    HDFS的架构
        存储架构(HDFS的存储架构主要体现于NameNode的存储架构)
            FsImage镜像文件:用于存储整个文件系统命名空间的信息
            EditLog日志文件:用于持久化记录文件系统元数据发生的变化
            原理解析:NameNode以元数据的形式维护FsImage和EditLog文件,当NameNode启动时,FsImage文件会被加载到内存中,对内存中的数据执行记录的操作,以确保内存中的数据处于最新的状态(可以加快元数据的读取和更新)
            Secondary NameNode
                周期性的把EditLog日志文件合并到FsImage镜像文件中,减小日志文件的大小,缩短集群重启时间,保证HDFS系统的完整性(不是NameNode的热备)
                (随着集群运行时间长,NameNode中存储的元数据信息越来越多,EditLog文件
越来越大。当集群重启NameNode需要恢复元数据信息,就先加载镜像文件,后重复日志文件的操作记录,如果日志文件很大,那么合并的时间会很长,而且如果NameNode宕机就会丢失数据,所以有了Secondary NameNode来解决这个问题)
    HDFS的原理
        读写原理(在于从客户端写入和从DataNode读取的相关原理)
            HDFS写原理
1、客户端发起文件上传请求,通过RPC(远程过程调用)与NameNode建立通信
2、NameNode检查元数据文件的系统目录树
3、若系统目录树的父目录不存在该文件的相关信息,返回客户端可以上传文件
4、客户端上传第一个Block数据块,以及数据块副本的数量(副本数量可以自定义,默认使用副本规划的副本数量)
5、NameNode检测元数据文件中DataNode信息池,找到可用的数据节点(d1,d2,d3)
6、将可用的数据节点的ip地址返回给客户端
7、客户端请求三台中的一台d1进行传输数据(本质上是一个RPC调用,建立管道Pipeline),d1收到请求后会继续调用d2,然后d2调用d3
8、DataNode之间建立Pipeline后,逐个返回完毕信息。
9、客户端与DataNode建立数据传输流,开始发送数据包(数据是以数据包的形式发送)
10、客户端向d1上传第一个Block数据块(是以Packet为单位(默认64k)发送数据块),当d1收到一个packet就会传给d2,d2传给d3,d1每传送一个packet就会放入一个应答队列等待应答
11、数据在管道上依次传输,在管道反方向上,将逐个发送ACK(命令正确应答),最终由管道中第一个DataNode节点d1将管道的Ack信息发送给客户端。
12、DataNode返回给客户端,第一个Block块传输完成,客户端会再次请求NameNode上传第二个Block重复上面步骤直到数据全部上传完毕
            HDFS读原理:
1、客户端向NameNode发起RPC请求,来获取请求文件Block数据块所在位置。
2、NameNode检测元数据文件,会视情况返回部分Block信息或者全部Block信息,对于每个Block块,NameNode都会返回含有该Block副本的地址
3、客户端会选取排序靠前的DataNode来依次读取Block块(如果客户端本身就是DataNode,那么就直接从本地获取),每个Block都会进行CheckSum(完整性验证),若文件不完整的,则客户端会继续向NameNode获取下一批Block列表,直到验证读取出文件是完整的,则Block读取完毕
4、客户端会将读取出的所有Block块合并成一个完整的文件
            存储位置:数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架上其他某节点一份,不同机架上某节点一份



        MapReduce分布式计算框架
    核心思想:分而治之
    mr运行模式
        本地模式
            在当前开发环境模拟mr执行环境,处理的数据及输出的结果在本地操作系统
        集群模式
            把mr程序打成jar包,提交至YARN集群上去运行任务(YARN集群负责资源管理和任务调度,程序会被框架分发到集群中的节点上并发的执行,因此处理的数据和输出结果都在HDFS)
    工作阶段
        Map:负责将任务分解,将大任务分解成若干个小任务并行处理(前提是小任务之间没有依赖关系,可以单独执行)
        Reduce:负责将任务合并,把Map阶段的结果进行全局汇总
        MR数据流模型简易说明:
1、将原始数据处理成键值对<k1,v1>形式
2、将解析后的键值对<k1,v1>传给map()函数,map()函数会根据映射规则,将键值对<k1,v1>映射为一系列中间结果形式的键值对<k2,v2>
3、将中间形式的键值对<k2,v2>形成<k2,{v2,...}>形式,传给reduce()函数处理,把具有相同key的value合并在一起,产生新的键值对<k3,v3>此时的键值对<k3,v3>就是最终的结果
    mr组件
        InputFormat
            数据切分
            为Mapper提供输入数据(将分片解析成键值对)
        Mapper组件
            提供一个map()方法,以供重写调用
        Partitioner组件
            对key进行分区,从而根据不同的key将数据分发到不同的reduce处理(主要目的是让键值对均匀分布在reduceTask上)
        Combiner组件
            将Map阶段输出的键值对进行合并处理,然后把新的键值对作为reduce阶段的输入
        Reduce组件
            将Map过程输出的键值对进行合并计算
        OutputFormat组件
            定义mr程序输出格式和规范
    工作原理
        分片、格式化数据源
            分片操作:将源文件划分为大小相等的小数据块(hadoop会给每个分片构建一个map任务,并由该任务运行自定义的map()函数,从而处理分片里的每一条数据)
            格式化操作:将划分好的分片(split)格式化为键值对<key,value>形式的数据,其中,key代表偏移量,value代表每一行内容
        执行MapTask(解析、切片、合并)
            Read阶段:MapTask通过用户编写的RecordReader,从输入的InputSplit中解析出所有的key/value
            Map阶段:将解析出的key/value交给用户编写的map()函数处理,并产生一系列新的key/value
            Collect阶段:在用户编写的map()函数中,数据处理完成后,一般会调用outputCollection.collect()输出结果,在函数内部,它会将生成的key/value分片(调用partitioner),并写入一个环形内存缓冲区中
            Split阶段:当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件(将数据写入本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作)
            Combine阶段:当所有数据处理完成之后,MapTask会对所有临时文件进行一次合并,以确保最终只会生成一个文件
        执行Shuffle过程(排序、传输)
            (Shuffle是mr的核心,它用来确保每个reduce的输入都是按键排序的,它的性能高低直接决定了mr程序性能的高低)
            (Map阶段:(承接MapTask)写入磁盘之前,线程会根据reduceTask的数量,将数据分区,避免reduceTask分配到的数据不均衡,分完后对每个分区中的数据进行排序(如果设置了Combiner,将排序后的结果进行Combiner操作,可以减少数据写入磁盘操作),合并溢出文件过程中会不断排序和Combiner操作(优点是尽量减少每次写入磁盘的数据量,还可以尽量减少下一复制阶段的网络传输的数据量),最后合并成一个已排序的文件)
            (reduce阶段:reduce接受map传来的数据,如果数据量小,就直接存储在内存中,如果超过了缓冲区大小的比例,就把数据写到磁盘,磁盘将数据合并到文件,传到reduce,最后一次合并结果没有写入磁盘,直接传到reduce)
        执行ReduceTask(逻辑处理,得出结果)
            Copy阶段:从MapTask上复制数据,大小超过阈值写到磁盘,没有就放到内存
            Merge阶段:在复制数据时,reduceTask启动两个后台线程,分别对磁盘和内存上的文件进行合并防止内存或磁盘使用过多
            Sort阶段:对所有的数据进行归并排序
            Reduce阶段:对归并后的键值对数据调用reduce()方法进行计算
            write阶段:将结果键值对放入HDFS
        写入文件


YARN资源管理框架
    Hadoop2.0改进
        HDFS
            1.0的不足:namenode存在单点故障风险
            2.0的改进:HDFS引入了高可用机制
        MapReduce
            1.0的不足:JobTracker存在单点故障风险,且内存扩展受限
            2.0的补充:引入了资源管理调度框架YARN
    YARN体系结构
        ResourceManager
            介绍:是一个全局的资源管理系统,负责的是整个YARN集群资源的监控、分配和管理工作
            具体工作
                负责处理客户端请求
                接受和监控NodeManager(NM)的资源情况
                启动和监控ApplicationMaster(AM)
                资源的分配和调度
            组件
                调度器(Scheduler):根据容量、队列等限制条件将系统中的资源分配给各个正在运行的应用程序
                应用程序管理器(ApplicationManager):负责管理整个系统中所有的应用程序(包括应用程序的提交、调度协调资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动)
        NodeManager
            介绍:每个节点上的资源和任务管理器
            工作
                定时向ResourceManager汇报所在节点的资源使用情况
                接收并处理来自ApplicationMaster的启动停止容器(Container)的各种请求
        ApplicationMaster
            介绍:主要的功能是资源的调度、监控和容错
            工作
                将来自ResourceManager的资源分配给内部的各个任务
                通过NodeManager监控容器的执行和资源使用情况,在任务运行失败时重新申请资源以重启任务
                (当前的YARN自带两个ApplicationMaster的实现,一个是用于演示ApplicationMaster编写方法的实例程序DistributedShell,申请一定数目的Container以并行方式运行一个Shell命令或Shell脚本,另一个运行MapReduce应用程序的MRAppMaster)
    工作流程
        用户向YARN提交应用程序和应用程序的相关信息,YARN中的ResourceManager接收到之后,它的调度器就会为应用程序分配一个容器,用来运行本次程序的ApplicationMaser,ApplicationMaster创建以后先向ResourceManager注册信息(这样用户就可以通过ResourceManager查看应用程序的运行状态),之后ApplicationMaster采用轮询的方式通过RPC向ResourceManager申请资源,申请到后就向对应的NodeManager通信,申请启动任务,NodeManager为任务设置好运行环境,将任务启动命令写到一个脚本文件中,通过启动脚本文件启动任务,然后各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,等应用程序结束后,ApplicationMaster向ResourceManager请求关闭并注销自己。(如果因为故障导致失败,那么ResourceManager中的应用程序管理器会将其重新启动,直到完成所有任务)


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐