【Hadoop】Hadoop概述与核心组件

Hadoop 三大发行版本

Apache、Cloudera、Hortonworks。

  • Apache 版本最原始(最基础)的版本,对于入门学习最好。【2006】
  • Cloudera 内部集成了很多大数据框架,对应产品 CDH。【2008】
  • Hortonworks 文档较好,对应产品 HDP。【2011】现在已经被 Cloudera 公司收购,推出新的品牌 CDP。官网地址:https://www.cloudera.com/products/pricing.html
    在这里插入图片描述

1.Apache Hadoop(常用)

官网地址:http://hadoop.apache.org
下载地址:https://hadoop.apache.org/releases.html

2.Cloudera Hadoop

官网地址:https://www.cloudera.com/downloads/cdh
下载地址:https://docs.cloudera.com/documentation/enterprise/6/releasenotes/topics/rg_cdh_6_download.html

  • 2008 年成立的 Cloudera 是最早将 Hadoop 商用的公司,为合作伙伴提供 Hadoop 的
    商用解决方案,主要是包括支持、咨询服务、培训。
  • 2009 年 Hadoop 的创始人 Doug Cutting 也加盟 Cloudera 公司。Cloudera 产品主
    要为 CDH,Cloudera Manager,Cloudera Support
  • CDH 是 Cloudera 的 Hadoop 发行版,完全开源,比 Apache Hadoop 在兼容性,安
    全性,稳定性上有所增强。Cloudera 的标价为每年每个节点 10000 美元。
  • Cloudera Manager 是集群的软件分发及管理监控平台,可以在几个小时内部署好一
    个 Hadoop 集群,并对集群的节点及服务进行实时监控。

3.Hortonworks Hadoop

官网地址:https://hortonworks.com/products/data-center/hdp/
下载地址:https://hortonworks.com/downloads/#data-platform

  • 2011 年成立的 Hortonworks 是雅虎与硅谷风投公司 Benchmark Capital 合资组建。
  • 公司成立之初就吸纳了大约 25 名至 30 名专门研究 Hadoop 的雅虎工程师,上述
    工程师均在 2005 年开始协助雅虎开发 Hadoop,贡献了 Hadoop80%的代码。
  • Hortonworks 的主打产品是 Hortonworks Data Platform(HDP),也同样是 100%开
    源的产品,HDP 除常见的项目外还包括了 Ambari,一款开源的安装和管理系统。
  • 2018 年 Hortonworks 目前已经被 Cloudera 公司收购

优势

  • Hadoop 是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。
  • Hadoop可以用单节点模式安装,但是只有多节点集群才能发挥 Hadoop 的优势,我们可以把集群扩展到上千个节点,而且扩展过程中不需要先停掉集群。
优势总结——4高(高可靠、高扩展、高效、高容错)
  1. 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
    在这里插入图片描述
  2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
    在这里插入图片描述
  3. 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
    在这里插入图片描述
  4. 高容错性:能够自动将失败的任务重新分配。
    在这里插入图片描述

Hadoop组成

在这里插入图片描述

1.HDFS

HDFS :即 Hadoop 分布式文件系统(Hadoop Distribute File System),以分布式存储的方式存储数据。负责海量数据的存储

HDFS 也是一种 Master-slave 架构,NameNode 是运行 master 节点的进程,它负责命名空间管理和文件访问控制。DataNode 是运行在 slave 节点的进程,它负责存储实际的业务数据,如下图:
在这里插入图片描述

管理者:NameNode(nn)

存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。

作用:负责管理,管理集群内各个节点。

  • 维护管理文件系统的元数据(指的是数据的存放位置或存放路径)或名字空间
  • 负责确定指定的文件块到具体的Datanode结点的映射关系。
  • 维护管理 DataNode上报的心跳信息
  • 管理真实的数据的元数据(也就是文件、日志、视频、图片、等)
    在这里插入图片描述
工作者:DataNode(dn)

在本地文件系统存储文件块数据,以及块数据的校验和。
作用:主要进行负责真实数据的块存储,负责工作,进行读写数据。 周期向NameNode汇报。
在这里插入图片描述

  1. 执行数据的读写(响应的是客户端)
  2. 周期性向NameNode做汇报(数据块的信息、校验和)
    若datanode 10分钟没有向NameNode做汇报,表示已丢失(已宕机)
    心跳周期 3秒
  3. 执行流水线的复制(将一份大数据切成若干份,一份一份的复制到三个节点,复制完一份下一份才开始复制)

在这里插入图片描述

辅助管理者:SecondaryNameNode(2nn)

每隔一段时间对NameNode元数据备份。
作用:责辅助NameNode管理工作。主要是对NameNode进行数据的备份,一般要恢复数据时候才会用到这个的。

HDFS的优缺点
优点:
  1. 高容错性
     数据采用多副本保存方式,当集群中的某些机器宕机了,数据可以从其他正常运行的机器获取
  2. 适合处理大数据
      通过将大文件切分成小的数据块存储到不同服务器上,可以实现一个大文件的存储,同时通过联合多个服务器多块硬盘实现整个存储系统的大容量,大文件的分片存储,不同分片可以进行并行读写操作,进而实现数据的高速访问。
      NameNode负责文件元数据的操作,DataNode负责处理文件的读写请求,文件数据流不会经过NameNode的处理,只会跟存储在具体DataNode进行联系,因此NameNode不会成为系统的瓶颈,成百上千台DataNode节点应对文件内容数据流的读写,其吞吐量大大提高了。
  3. 可靠性
缺点
  1. 不适合做实时数据访问
  2. 无法对大量小文件进行存储。存储大量小文件会占用NameNode大量的内存去存储元数据信息。小文件存储的寻址时间会超过读取时间
最佳传输损耗理论:在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!
目前硬件的发展条件,普通磁盘写的速率大概为100M/S, 寻址时间一般为10ms!
(10ms / 1%) * 100M/S = 100M

  1. 不支持并发写入,文件随机修改。一个文件不允许多个线程同时写,仅支持追加,不支持修改
HDFS的写数据流程
  1. 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,并返回结果
  2. 客户端请求 Block上传到哪几个DataNode上,NameNode返回DataNode节点
  3. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。dn1、dn2、dn3逐级应答客户端。
  4. 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
  5. 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。
HDFS的读数据流程
  1. 客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
  2. 就近原则挑选一台DataNode(然后随机)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
  4. 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

2.YARN

Yet Another Resource Negotiator 简称 YARN :是一个资源管理系统,其作用就是把资源管理和任务调度/监控功分割成不同的进程,Yarn 有一个全局的资源管理器叫 ResourceManager,每个 application 都有一个 ApplicationMaster 进程。一个 application 可能是一个单独的 job 或者是 job 的 DAG (有向无环图)。

在 Yarn 内部有两个守护进程:

  1. ResourceManager :负责给 application 分配资源
  2. NodeManager :负责监控容器使用资源情况,并把资源使用情况报告给 ResourceManager。这里所说的资源一般是指CPU、内存、磁盘、网络等。

ApplicationMaster 负责从 ResourceManager 申请资源,并与 NodeManager 一起对任务做持续监控工作。在这里插入图片描述

  • ResourceManager(RM):整个集群资源(内存、CPU等)的老大
    • 处理客户端请求。
    • 监控 NodeManager。
    • 启动或监控 ApplicationMaster。
    • 资源的分配与调度。
  • ApplicationMaster(AM):单个任务运行的老大
    • 负责数据的切分。
    • 为应用程序申请资源并分配给内部的任务。
    • 任务的监控与容错。
  • NodeManager(N M):单个节点服务器资源老大
    • 管理单个节点上的资源。
    • 处理来自 ResourceManager 的命令。
    • 处理来自 ApplicationMaster 的命令。
    • 资源的分配与调度。
  • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。
    • Container 是 Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
YARN工作机制
  1. MR程序提交到客户端所在的节点。
  2. YarnRunner向ResourceManager申请一个Application。
  3. RM将该应用程序的资源路径返回给YarnRunner。
  4. 将运行所需资源提交到HDFS上。资源提交完毕后,申请运行mrAppMaster。
  5. RM将用户的请求初始化成一个Task。
  6. 其中一个NodeManager领取到Task任务,并创建容器Container,产生MRAppmaster。
  7. Container从HDFS上拷贝资源到本地。MRAppmaster向RM 申请运行MapTask资源。
  8. RM将运行MapTask任务分配给另外两个NodeManager,并创建容器。
  9. MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
  10. MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
  11. ReduceTask向MapTask获取相应分区的数据。
  12. 程序运行完毕后,MR会向RM申请注销。
YARN作业提交过程
1.作业提交

客户端向yarn提交一个作业

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

Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。
Apache Hadoop3.1.3默认的资源调度器是容量调度器,
CDH框架默认调度器是公平调度器。

1. FIFO调度器(First In First Out)
  • 特点:FIFO调度器按照任务到达的时间排序,先到先服务, 在当前强调多租户和资源利用率的大环境下,FIFO的使用率并不高。
  • 优点:简单,不需要配置。
  • 缺点:不适合共享集群。如果有大的app需要很多资源,那么其他app可能会一直等待。

在这里插入图片描述

2.容量调度器(Capacity Scheduler)
  • 是Yahoo开发的多用户调度器。
  • 调度策略:优先学则资源利用率低的队列。
  • 每个队列可以单独设置资源分配方式:FIFO、DRF
特点
  • 多队列:每个队列可以配置一定的资源量,每个队列采用FIFO调度策略
  • 容量保证:管理员可以为每个队列设置资源,保证最低资源和资源使用上限
  • 灵活性:如果一个队列中的资源有剩余,可以把这些资源共享给需要资源的队列,如果该队列有新的应用程序提交,则会收回对应资源
  • 多用户:支持多用户共享集群和多应用程序同时运行。为了防止一个用户的作业独占资源,该调度器会对同一个用户提交的作业所占的资源量进行限定。

在这里插入图片描述

资源分配算法

队列资源分配: 从root开始使用深度优先算法,优先选择资源占用率最低的队列分配资源。
作业资源分配: 默认按照提交作业的优先级和提交时间的顺序分配资源。
容量资源分配: 按照容器的优先级分配资源,如果优先级相同则按照数据本地性原则

  • 任务和数据在同一节点
  • 任务和数据在同一机架
  • 任务和数据不在同一节点也不在同一机架
3.公平调度器
  • 公平调度器由FaceBook开发,其设计目的是在事件尺度上,所有作业获得公平的资源。
  • 核心调度策略:优先选择对资源缺额比较大的。
特点
  • 每个队列可以单独设置资源分配方式:FIFO、FAIR、DRF
  • 与Capacity Scheduler调度器具有相同的1~4点。
  • 缺额:某一时刻一个作业应获资源和实际资源的差距叫“缺额”。
    在这里插入图片描述在这里插入图片描述
公平调度器队列资源分配方式:
  1. FIFO策略
  • 采用此种方法则与容量调度器一致。公平调度器每个队列资源分配策略如果选择FIFO,则公平调度器相当于容量调度器。
  1. Fair策略
  • Fair策略是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。
  • FAIR策略默认情况下是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下每个队列内部采用该方法来分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可以得到1/2的资源。具体资源分配流程和容器调度器一致:【选择队列——选择作业——选择容器】
  • 上述三个步骤都是按照公平策略分配资源:
    • 实际最小资源份额:mindshare = Min(资源需求量,配置的最小配额)
    • 是否饥饿:isNeedy = 资源使用量 < mindshare(实际最小资源份额)
    • 资源分配比:mindShareRatio = 资源使用量 / Max(mindshare, 1)
    • 资源使用权重比:useToWeightRatio = 资源使用量 /权重
      在这里插入图片描述在这里插入图片描述
  1. DRF策略
  • DRF(Dominant Resource Fairness),通常的资源都是单一的标准,例如只考虑内存的情况(YARN默认情况),但是多数情况是多种资源的复合,从而难以衡量两个应用应该分配的资源比例。
  • YARN中DRF的调度方式: 假设集群一共有100 CPU 和10T内存,而应用 A 需要(2 CPU ,300GB),应用 B 需要(6 CPU ,100GB)。则两个应用分别需要 A (2%CPU。3%内存)和 B (6%CPU,1%肉存)的资源,这就意味着 A 是内存主导的,,B 是 CPU 主导的,针对这种情况,可以选择 DRF 策略对不同应用进行不同资源,CPU和内存的一个不同比例的限制。

3.MapReduce

Hadoop MapReduce 是一种编程模型,它是 Hadoop 最重要的组件之一。它用于计算海量数据,并把计算任务分割成许多在集群并行计算的独立运行的 task。

MapReduce核心思想

MapReduce 是 Hadoop的核心,分布式的离线并行计算框架,对海量数据的处理。将计算过程主要分为Map和Reduce两个阶段,Map阶段并行处理输入数据,Reduce阶段对Map结果进行汇总。它会把计算任务移动到离数据最近的地方进行执行,因为移动大量数据是非常耗费资源的。

  1. 分布式的运算程序往往需要分成至少2个阶段,map阶段和reduce阶段。
  2. map阶段的MapTask并发实例,并行运行,互不相干。
  3. reduce阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
  4. MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

总结: 分析WordCount数据流走向深入理解MapReduce核心思想。

在这里插入图片描述

Mapper:
  1. 第一阶段是把输入文件进行分片(inputSplit)得到block。有多少个block就对应启动多少maptask
  2. 第二阶段是对输入片中的记录按照一定的规则解析成键值对。键(key)表示每行首字符偏移值,值(value)表示本行文本内容。
  3. 第三阶段是调用map方法。解析出来的每个键值对,调用一次map方法。
  4. 第四阶段是按照一定规则对第三阶段输出的键值对进行分区。
  5. .第五阶段是对每个分区中的键值对进行排序。首先按照键进行排序,然后按照值。完成后将数据写入内存中,内存中这片区域叫做环形缓冲区。
Reduce:
  1. 第一阶段(copy)reduce任务从Mapper任务复制输出的键值对。
  2. 第二阶段(sort)合并排序是把复制到Reduce本地数据,全部合并。再对合并后的数据排序
  3. 第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。
    在这里插入图片描述
MapReduce优缺点
优点:
  1. 易于编程:简单的实现一些接口就可以完成分布式程序。
  2. 良好的拓展性:计算资源不足时可以通过增加机器提高能力。
  3. 高容错性:一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,这个过程由hadoop内部完成。
  4. 适合PB级以上的海量数据的离线处理
缺点:
  1. 不擅长实时计算
  2. 不擅长流式计算:因为MapReduce自身的设计特点决定了数据源必须是静态的。
  3. 不擅长有向无环图计算:MapReduce不擅长后一个应用程序的输入为前一个的输出,因为每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

educe自身的设计特点决定了数据源必须是静态的。
3. 不擅长有向无环图计算:MapReduce不擅长后一个应用程序的输入为前一个的输出,因为每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

[外链图片转存中…(img-LDWjwts0-1714256890710)]
[外链图片转存中…(img-Y7qqOgQ3-1714256890710)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值