Hadoop基础(三) : Hadoop核心基础

1.什么是Hadoop

在这里插入图片描述
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。它的目的是从单一的服务器扩展到成千上万的机器,将集群部署在多台机器,每个机器提供本地计算和存储。Hadoop框架最核心的设计是HDFS和MapReduce。


2.Hadoop的特点

  • 分布式:Hadoop是一个能够对大量数据进行分布式处理的软件框架。
  • 容错机制:Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
  • 并行性:Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
  • 扩展性:Hadoop 还是可伸缩的,Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,所以集群可以很容易进行节点的扩展,扩大集群。能够处理 PB 级数据。
  • 开源:Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。

3.Hadoop的核心

  • HDFS:可扩展、容错、高性能的分布式文件系统,一次写入多次读取。
  • MapRduce: 分布式计算框架,主要包含map(映射)和reduce(规约)过程。
  • YARN:资源调度框架,负责接受运行任务的请求与资源的调度、任务的运行。

4.HDFS

HDFS是Hadoop的分布式文件系统。

  • 特点
    优点:
  1. 高度容错性的系统:上传的数据自动保存多个副本,适合部署在廉价的机器上。
  2. 适合大数据的处理:高吞吐量的数据访问,非常适合大规模数据集上的应用。
  3. 流式文件写入:一次写入,多次读取。文件一旦写入,不能修改,只能增加。这样可以保证数据的一致性。
    缺点:
  4. 不适合低延迟数据访问,HDFS 是为搞数据吞吐量应用优化的,这可能会以提高时间延迟为代价。
  5. 大量小文件,由于namenode将文件系统的元数据储存在内存中,因此该文件系统所能储存的文件总数受限于namenode的内存容量。
  6. 多用户写入,任意修改文件。HDFS中的文件写入只支持单个学入职,而且写操作总是以“只添加”方式在文件末尾写数据。

  • 块缓存
    与惯有的思想不一样的是,HDFS在储存文件时,并非将整一个文件放入同个节点或是同一个路径中,而是将整个文件按照一定的大小切分成数据块(具体取大小却决与版本,Hadoop2中设定为128M),再将其储存在多个节点中,这其中还涉及到副本机制。这么做的意义在于避免因磁盘寻址过长而限制的读取速度,当需要读取文件时,多个块被多个节点并行读取,充分利用了多个节点的读取能力,实现了快速读取。 另一方面也是为了实现副本的容错机制,通常每个数据块将会被备份成3份,分别储存在不同的节点上,预防文件丢失和丢失后找回数据。

  • 基础架构
    HDFS集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。
    在这里插入图片描述
    namenode:管理文件系统的命名空间,维护者文件系统树及整棵树内所有的文件和目录 。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个快所在的数据节点信息,但它并不永久保存快的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。
    datanode:文件系统的工作节点。他们根据需要储存并检索数据块(受客户端或namenode调度,并切定期向namenode发送他们所储存的块的列表。

  • 容错机制
  1. 备份那些组成文件系统元数据持久状态的文件系统。Hadoop可以通过配置使namenode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,且是原子操作。一般的配置是,将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)。
  2. 另一种可行的方法是运行一个辅助namenode(SecondaryNamenode),但它不能用作namenode。SecondaryNamenode的两个重要作用,一是定期合并编辑日志edits与命名空间镜像fsimage,以防止编辑日志过大;二是镜像备份。SecondaryNamenode工作流程如下:
  • HDFS高可用性(HA)
      在容错机制正常运行的情况下,namenode仍旧存在单点失效的问题(单点问题)。如果namenode失效了,那么所有的客户端,包括MapReduce作业,均无法读写或列举文件,因为namenode是唯一储存元数据与文件数据块映射的地方。
      因此Hadoop2中针对这个问题增加了对HDFS高可用性的支持,在这一实现中,配置了一对活动-备用(active-standby)namenode当活动namenode失效,备用namenode就会接管它的任务并开始服务于客户端的请求,不会有任何明显的中断
      系统中有一个成为故障转移控制器(failover controller) 的新实体,管理着将活动namenode转移为备用namenode的转换过程。有多种故障转移控制器,但默认的一种是使用了Zookeeper来确保有且仅有一个活动namenode。

  • 副本存放策略
  1. 写请求方所在的机器如果是其中一个DataNode,则第一份副本直接存在写请求方的本地,否则随机选取集群中的一个DataNode。
  2. 第二个副本存放在不同与第一个副本所在的机架中。
  3. 第三个副本放在第二个副本所在的机架中,但不属于用一个节点。

  • 读文件
    在这里插入图片描述
  1. 客户端通过调用FileSystem对象的open()方法来打开希望读取的文件,对于HDFS来说,这个对象是DistributedFileSystem的一个示例(如上图中的步骤1)
  2. DistributedFileSystem通过使用远程过程调用(RPC)来调用namenode,以确定文件起始块的位置(步骤2)
  3. 客户端对这个输入流调用read方法(步骤3)
  4. 储存着文件起始几个快的datanode地址的DFSInputStream随机连接距离最近的文件中的第一个块所在的datanade。通过对数据流反复调用read()方法,可以将数据从datanode传输到客户端(步骤4)
  5. 到达块的末端时,DFSInputStream关闭与该datanode的连接,然后寻找下一个快的最佳datanode(步骤5)。
  6. 当客户端读取完毕数据的时候,调用FSDataInputStream的close方法关闭掉所有的流。(步骤6)
    在这里插入图片描述

  • 写文件

在这里插入图片描述

  1. 客户端通过对DistributedFileSystem对象调用create()来新建文件(步骤1)
  2. DistributedFileSystem对namenode创建一个RPC调用,在文件系统的命名空间中新建一个文件,此时该文件中还没有相应的数据快,namenode执行各种不同的检查以确保这个文件不存在以及客户端有新建该文件的权限。(步骤2)
  3. DistributedFileSystem向客户端返回FSDataOutputStream对象,由此客户端可以开始写入数据。(步骤3)
  4. 客户端开始写数据到DFSOutputStream,DFSOutputStream会把数据切成一个个packet包,以数据队列“data queue”的形式管理这些packet(步骤4)
  5. DFSOutputStream也维护着一个内部数据包队列来等待datanode的收到确定回执,成为“确认队列”(ack queue)。收到管道中所有datanode确认信息后,该数据包才会从确定队列中删除。
  6. 当客户端结束写入数据,调用stream的close()方法关闭数据流。

在这里插入图片描述

5.MapReduce

  MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语
言借来的特性。

  • 工作流程
    在这里插入图片描述
  1. map过程,即映射过程,主要工作为在各个数据所在的节点上将对应的内容映射成预先设定的键值对(默认为[word,1]这种形式的键值对)。在这阶段中,具备数据本地化的优势,运行速度较快。map任务将其输出写入本地磁盘,而非HDFS,因为map的输出是中间结果,这也是MapReduce计算速度的一个限制,涉及了多次的磁盘读写。
  2. Shuffle过程,这过程是MapReudce最核心的过程,接收来自Map过程的数据,处理后传送到Reduce得到最终结果,包括根据键的ASCII码进行输出、排序(sort)、溢写、合并(merge)。shuffle一般比图中所示的更复杂,而且调整混洗参数对作业总执行时间的影响非常大。因为每个reduce任务输入都来自许多map任务,所以shuffle至关重要。
  3. Reduce过程,即规约过程,主要的工作是将Shuffle处理后的数据按照一定的规则进行规约,Reduce任务并不具备数据本地化的优势,单个Reduce任务的输入通产来自于所有mapper的输入。

MapReduce编程涉及方面很广,所以不在此归纳,将会在后面的MapReduce高级编程详细介绍。

6.Yarn

  资源调度框架(Yarn):负责接受运行任务的请求与资源的调度、任务的运行。

  • 主要组件
    ResourceManager:RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,包括 scheduler 和 ApplicationMaster, NodeManager、处理客户端请求、监控NodeManager、启动或监控ApplicationMaster。
    ApplicationMaster:NodeManager 管理 container、资源下载、健康检测后汇报,复制数据的切分、为应用程序申请资源并分配给内部的任务、任务的监控与容错。
    Container:Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、 CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该 Container 中描述的 资源。容器是一个动态划分资源。
    NodeManager:主要作用管理单个节点上的资源、处理来自ResourceManager的命令、处理来自ApplicationMaster。

  • 工作流程

在这里插入图片描述

  1. ① 用户通过客户端Client提交一个应用程序到YARN中进行处理,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
  2. ② ResourceManager为该应用程序分配第一个Container,并与分配的Container所在位置的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
  3. ③ ApplicationMaster启动后先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后开始为提交的应用程序所需要执行的各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤④~⑦。这个示例应用中需要执行两个Map任务和一个Reduce任务,所以需要轮番执行④~⑦步骤3次,先执行Map任务后再执行Reduce任务。
  4. ④ ApplicationMaster采用轮流询问的方式通过RPC协议向ResourceManager申请和领取资源。所以多个应用程序同时提交时,不一定是第一个先执行。
  5. ⑤ 一旦ApplicationMaster申请到资源后,便与资源对应的NodeManager通信,要求它在分配的资源中启动任务。
  6. ⑥ NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  7. ⑦ 被启动的任务开始执行,各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
  8. ⑧ 应用程序运行完成后,ApplicationMaster向ResourceManager
    注销自己。

在这里插入图片描述
事实上,Yarn的出现才真正意义上地让Hadoop生态圈问世,因为它实现了多个工具在同一集群上高效率地运行,对于Hadoop生态圈的技术栈集成具有重要意义。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值