当前位置:   article > 正文

Hadoop 简介

hadoop

一、Hadoop 是什么

Hadoop 是一个提供分布式存储和计算的开源软件框架,它具有无共享、高可用(HA)、弹性可扩展的特点,非常适合处理海量数量。

  • Hadoop 是一个开源软件框架
  • Hadoop 适合处理大规模数据
  • Hadoop 被部署在一个可扩展的集群服务器上

二、Hadoop 三大核心组件

  • HDFS(分布式文件系统) -—— 实现将文件分布式存储在集群服务器上
  • MAPREDUCE(分布式运算编程框架) —— 实现在集群服务器上分布式并行运算
  • YARN(分布式资源调度系统) —— 帮用户调度大量的 MapReduce 程序,并合理分配运算资源(CPU和内存)

 1.X和2.X版本的区别

1、HDFS

定义

HDFS (Hadoop Distributed File System) ,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS 的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

优缺点

优点:

1 )高容错性
        ①数据自动保存多个副本。它通过增加副本的形式,提高容错性。
        ②某一个副本丢失以后,它可以自动恢复。
(2)适合处理大数据
        ①数据规模:能够处理数据规模达到 GB TB 、甚至 PB 级别的数据;
        ②文件规模:能够处理百万规模以上的文件数量,数量相当之大。
(3)可构建在廉价机器上,通过多副本机制,提高可靠性。
缺点:
1 )不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
(2)无法高效的对大量小文件进行存储。
        ①存储大量小文件的话,它会占用 NameNode 大量的内存来存储文件目录和块信息。这
样是不可取的,因为 NameNode 的内存总是有限的;
        ②小文件存储的寻址时间会超过读取时间,它违反了 HDFS 的设计目标。
(3)不支持并发写入、文件随机修改。
        ①一个文件只能有一个写,不允许多个线程同时写;
        ②仅支持数据 append ( 追加 ) ,不支持文件的随机修改。

核心思想

1 NameNode (nn) :就是 Master , 它是一个主管、管理者。
        ①管理 HDFS 的名称空间;
        ②配置副本策略;
        ③管理数据块(Block) 映射信息;
        ④处理客户端读写请求。
(2) DataNode :就是 Slave NameNode 下达命令, DataNode 执行实际的操作。
        ①存储实际的数据块;
        ③执行数据块的读/ 写操作。
(3) Client :就是客户端。
        ①文件切分。文件上传 HDFS 的时候, Client 将文件切分成一个一个的 Block, 然后进行上传;
        ②与 NameNode 交互,获取文件的位置信息;
        ③与 DataNode 交互,读取或者写入数据;
        ④Client 提供一些命令来管理 HDFS, 比如 NameNode 格式化;
        ⑤Client 可以通过一些命令来访问 HDFS ,比如对 HDFS 增删查改操作;
(4) Secondary NameNode :并非 NameNode 的热备。当 NameNode 挂掉的时候, 它并不能马上替换 NameNode 并提供服务。
        ①辅助 NameNode ,分 担其工 作量 ,比如 定期合 并 Fsimage Edits, 并推送给NameNode ;
        ②在紧急情况下,可辅助恢复 NameNode

 重点

HDFS 中的文件在物理上是分块存储 (Block) ,块的大小可以通过配置参数 ( dfs.blocksize)来规定,默认大小在 Hadoop2.x 版本中是 128M ,老版本中是 64M
思考:为什么块的大小不能设置太小,也不能设置太大?
        (1) HDFS 的块设置太小,会增加寻址时间,程序一直在找块的开始位置;
        (2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
总结 : HDFS 块的大小设置主要取决于磁盘传输速率。

2、MapReduce

定义

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

优缺点

优点:

1MapReduce易于编程它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
(2)良好的扩展性
当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。

(3)高容错性
MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。
(4)适合PB级以上海量数据的离线处理可以实现上千台服务器集群并发工作,提供数据处理能力。

缺点:

(1)不擅长实时计算MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果
(2)不擅长流式计算
流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的不擅长DAG(有向图)计算

(3)多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下

核心思想 

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

MapReduce进程

 

执行流程

3、Yarn

定义

yarn是一种通用的资源管理系统和调度平台。
资源管理系统 :管理集群内的硬件资源,和程序运行相关,比如内存,CPU等。
调度平台:多个程序同时申请计算资源时提供分配,调度的规则(算法)。
通用:不仅仅支持MapReduce程序,理论上支持各种计算程序如spark,flink。yarn不关系程序的计算内容,只关心程序所需的资源,在程序申请资源的时候根据调度算法分配资源,计算结束之后回收计算资源。使用yarn作为资源调度平台的计算框架自身需要提供ApplicationMaster来负责计算任务的调度。

优缺点

优点

(1)将资源管理和作业控制分离,减小JobTracker压力

(2)YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

(3)老的框架中,JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在,这个部分就扔给ApplicationMaster做了而ResourceManager中有一个模块叫做ApplicationsManager(ASM),它负责监测ApplicationMaster的运行状况。

(4)能够支持不同的计算框架

(5)资源管理更加合理

(6)使用Container对资源进行抽象,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,比之前以slot数目更合理。

(7)且使用了轻量级资源隔离机制Cgroups进行资源隔离。

(8)Container的设计避免了之前的map slot/reduce slot分开造成集群资源闲置的尴尬情况。

 缺点:

(1)各个应用无法感知集群整体资源的使用情况,只能等待上层调度推送信息。

(2)资源分配采用轮询、ResourceOffer机制(mesos),在分配过程中使用悲观锁,并发粒度小。

(3)缺乏一种有效的竞争或优先抢占的机制。

(4)简化了双层调度器中的全局资源管理器,改为由一个Cell State来记录集群内的资源使用情况,这些使用情况都是共享的数据,以此来达到与全局资源管理器相同的效果。

(5)所有任务访问共享数据时,采用乐观并发控制方法。

核心思想

  

步骤说明:
1,客户端向ResourceManager中的ApplicationManager提交作业申请,申请jobID。
2,ApplicationManager 返回一个jobID,以及运行的hdfs临时路径(hdfs://… jobID)。
3,客户端将作业的jar包,配置信息等上传到分配的hdfs临时路径(hdfs://… jobID)中。
4,客户端上传文件成功后,向ApplicationManager发送执行作业请求。
5,ApplicationManager将请求转发给Scheduler,申请执行所需资源。
6,调度器将作业放置到相关队列中,当执行到该作业时,开始让ApplicationManager分配Containers。
7,ApplicationManager命令NodeManager使用分配的container资源启动ApplicationMaster。
8,ApplicationMaster启动后去分配的hdfs临时路径(hdfs://… jobID)中读取作业的具体信息,根据分片信息创建map任务,reduce任务。
9,ApplicationMaster向Scheduler请求资源来执行map任务,reduce任务。
10,Scheduler返回申请结果。
11,AppMaster通知NodeManager,启动map,reduce任务。
12,NodeManager启动map,reduce任务。
13,map,reduce任务读取数据,进行逻辑计算。计算过程中如果有map,reduce任务执行失败了,AppMaster负责重启任务。
14,程序执行成功后,AppMaster向Scheduler发送请求,释放资源。

摘抄部分原文链接:https://blog.csdn.net/weixin_43172032/article/details/117759068 

调度策略

  Yarn中有三种资源调度器:FIFO调度器(FIFO Scheduler)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)。

(1)FIFO调度器

        简介:顾名思义,FIFO调度器把应用放在队列里,按照先进先出的提交顺序执行应用。

        优点:简单,不需要额外配置。

        缺点:不适合共享集群。大应用会占满整个集群的资源,导致小应用长时间等待。

(2)容量调度器

        简介:容量调度器设有一个专门的队列给小作业使用。

        优点:大作业不会占满全部资源,小作业不需要长时间等待大作业完成。

        缺点:整个集群的资源利用率降低了,大作业需要更长的时间来执行。

(3)公平调度器

        简介:公平调度器旨在为所有运行的应用公平地分配资源。

        优点:同时解决了FIFO大作业占满整个集群资源的问题和Capacity小作业队列空闲导致集群资源利用率降低的问题。

        缺点:存在延迟问题,后面的作业需要等待前面的作业让出资源。

具体策略介绍请看:https://blog.csdn.net/m0_37795099/article/details/124211350

三、Hadoop 生态圈

Hadoop 生态圈是指围绕 Hadoop 软件框架为核心而出现的越来越多的相关软件框架,这些软件框架和 Hadoop 框架一起构成了一个生机勃勃的 Hadoop 生态圈。在特定场景下,Hadoop 有时也指代 Hadoop 生态圈。

Hadoop 生态圈的架构图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/424852
推荐阅读
相关标签
  

闽ICP备14008679号