hadoop基础

一,海量信息如何处理

技术难点:稳定性,容错能力,数据一致性

核心思想:把数据分发到多个节点,移动计算逻辑到数据附近,计算节点进行本地数据处理,优先顺序读,次之随机读

二,Hadoop组成

hadoop:YARN,MapReduce,HDFS

 

三,HDFS(Hadoop Distributed File System) (一个大量文件存储的框架)

简介: 源自Google的GFS的论文,

            易于扩张的分布式系统,只需要增加机器,就可以扩容

            可以运行大量廉价的机器上,提供容错机制

优点:

  •           高容错,流式文件访问, (分块存储,并有多份副本)(一次写入,多次读取,写入之后,不再更改,智能再末尾追加,若是修改数据,需要覆盖原来的副本)

  •           适合大数据存储及批处理(HDFS会把文件的位置暴露给计算框架,如MapReduce,计算框架会根据数据的位置,采用移动计算,不移动数据的方式,快速启动任务,减少再网络的传输。)GB,TG,PB(百度,雅虎)

  •           构建成本低,安全可靠

缺点:

  •           不适合低延迟数据访问,如毫米级别的访问HDFS中的某一行数据无法实现,HDFS没有像数据库那样的索引可以快速定位数据,都是按照Block的形式存储,所以更适合高吞吐率的批处理使用

  •           不适合大量小文件存储,HDFS在存储文件时,NameNode会存储文件的源数据信息,这些源数据信息包括有哪些Block组成,存储的节点位置,NameNode会将这些源数据加载到内存中,大量的小文件的源数据会占用NameNode大量             的内存空间,并且小文件在读取时需要耗费大量的磁盘通道。

  •           不适合文件随机修改,HDFS不提供文件的随机修改,只支持最后的数据追加。

          

          

基本架构:

 

采用Master Slaver的结构,

Master:NameNode,负责管理HDFS文件系统的命名空间

1, NameNode会存储HDFS中文件的源数据信息,这些源数据信息包括有哪些Block列表,存储的节点位置,NameNode会将这些源数据加载到内存中

2, 管理副本数量,默认为3个副本,写入到HDFS的文件会被切分成128M的Block,为了提高容错性,每个Block及其副本,会被保存在3个不同的DataNode中,

      为了实现高可用,通常会启动2个NameNode,一个时Active,一个时Standby,只有Active的NameNode才能处理客户端的读写请求,Standby的不会处理客户端的请求,但是会与Active状态NameNode同步数据节点,只有当Active的节点挂掉,才会接管整个集群,保证HDFS的容错性。

Slaver: DataNode

  真正的存储数据的节点,执行客户端的读写请求,并且会周期性的与Name Node进行通信,汇报一些当前存储的所有的Block的信息,已经自身的运行状态,NameNode会根据这些汇报的信息,了解DataNode的运行状态,若是某个DataNode挂掉,或者网络的原因,与NameNode通信超时,NameNode会认为这个DataNode不可用,并标记该DataNode为死亡,也不会转发任何客户端的读写请求给该DataNode节点。这时NameNode会检测到存储在该节点上的Block的副本数会低于正常值,在必要时,会复制那些Block到其他可用的DataNode节点,来保证副本为3的状态。

对于客户端发起的请求,NameNode只是负责对Block源数据信息的操作,真正响应客户端读写请求的是DataNode。

客户端的请求只是从NameNode获取Block的源信息,如列表信息,位置信息,获取读写权限等,客户端获取到源信息或者权限之后,才去DataNode读写操作。若所有的访问都经过NameNode,则NameNode会成为瓶颈。

Hdfs中一个文件被切分成多个128M的好处,及使用Block存储的好处:

一个磁盘的大小是固定的,若一个文件的大小大于磁盘的大小,则该磁盘存储不了,但是把这个文件切分成多个Block,每个Block存储在多个DataNode的磁盘里面,那么这个大文件就会被分散到不同的Datanode上去存储。

 

4, HDFS的核心概念

类似与Linux操作系统,在NameSpace的任何写操作,都会对文件系统产生影响,并保存到磁盘中。

NameNode: 在HDFS的系统里一般会有2个NameNode,一个是Active,一个是Standby,但是主master只有一个,

  1) 负责管理HDFS文件系统的命名空间(NameSpace)

         NameNode维护文件目录树的层级关系。可以把所有文件以及目录可以看成一个Tree,跟Linux的文件系统rootfs类似。这个Tree的信息就是HDFS命名空间的信息,类似与Linux的NameSpace。

         客户端对文件的写操作会首先产生edits日志。

          NameNode会把这些命名空间信息以镜像文件fsimage形式,以及编辑日志edits文件永久性的存储在本地磁盘。

          NameNode会定期将编辑日志edits与镜像文件fsimage合并并保存成新的fsimage到磁盘中

          但是在集群运行时,会将这些命名空间的信息都会加载到内存里。

  2) 存储HDFS中文件的源数据信息,这些源数据信息包括有哪些Block列表,存储的节点位置,NameNode会将这些源数据加载到内存中

         NameNode维护Datanode的源数据信息,如Block list,每个Block的副本数,生成时间,文件的权限,以及Block所在DataNode的位置映射信息,但是这些源数据信息并不会在NameNode磁盘中永久保存的,NameNode会通过与DataNode周期性的心跳信息通信,来获取DataNode的最新状态信息,如存储的Block所有的存储信息。

  3)  管理副本策略(默认为3)

        若是某个DataNode挂掉,或者网络的原因,与NameNode通信超时,NameNode会认为这个DataNode不可用,并标记该DataNode为死亡,也不会转发任何客户端的读写请求给该DataNode节点。这时NameNode会检测到存储在该节点上的Block的副本数会低于正常值,在必要时,会复制那些Block到其他可用的DataNode节点,来保证副本为3的状态。

  4)  处理客户端的读写请求

        NameNode里有DataNode的院数据的信息,所以在客户端请求时,客户端首先时要从NameNode中获取这些源数据信息和权限,然后客户端在于DataNode联系,进行正真的读写操作。

  Standby NameNode:    

   是Active NameNode的热备节点。

   周期性的同步Active NameNode的edits编译日志,定期合并命名空间的镜像文件fsimage与edits到本地磁盘

   当Active NameNode故障时快速切换到Active状态。

  5)NameNode源数据文件

        edits:编译日志,客户端对目录和文件的写操作时,首先被记到edits日志中,如创建,删除文件等。(该操作是在内存中进行的,所以该edits日志里的内容是最新的,比如在Linux文件系统上编写一个日志,当编写的适合,内容是在内存上的,         只有保存之后,才会到磁盘中。)

        fsimage: 文件系统元数据检查点镜像文件,保存了文件系统中所有的目录和文件信息,如一个目录下有拿些子目录,子文件,文件名,文件副本树,文件由哪些块组成等。

        但是磁盘中fsimage里的内容不一定是最新的,需要在NameNode设置一个时间检查点,来定期将内存中最新的新增的edits与磁盘中fsimages合并并保存到磁盘中。

DataNode:

Slave工作节点,可以启动多个

存储数据块

执行客户端的读写请求操作

通过心跳机制定期向NameNode汇报运行状态和所有块列表信息

在集群启动时DataNode想NameNode提供存储Block快列表信息。

Block数据块:

文件写入到HDFS会被切分成若干个Block块

数据大小固定为128M,但也可自行修改。

HDFS的最小存储单元

若一个块的大小小于设置的数据块大小,则不会占用整个块的空间,也就是时保存的文件小于128M时,保存的大小不会占用128M

默认情况下每个Block有三个副本

Client

文件切分

与NameNode交互获取文件源数据信息

与DataNode交换,读取或写入数据

管理HDFS

HDFS高可用原理

四,   YARN基本架构与原理(一个计算资源的调度框架)

产生背景:

多集群运维成本高,离线批处理->MapReduce;实时流计算->Spark;

跨集群移动数据成本高,资源浪费

离线计算,实时计算,算法模型训练等不同类型计算机需要优化计算资源

集群资源利用率低

YARN简介:

Yet Another Resource Negotiator的简称

另一个资源协调者,对HDFS的计算与内存资源进行调度。

Hadoop2.0以后引进YARN

主要功能:

集群资源管理系统

负责集群的统一管理和调度

与客户端交互,处理客户端的请求

YARN基本架构

解释: 跟HDFS的架构差不多,只是YARN处理客户端的时计算申资源请的任务。也是主从关系,ResourceManager是主,NodeManager是从。

           只有一个ResourceManager,有多个NodeManager,并且每个NodeManager一般会有HDFS的每个DataNode一一对应。ResouceManager一般是放在单独的机器上,不与NodeManager在一个机器上。

           Resourcemanager负责集群的所有资源的统一管理和调度,NodeManager负责节点资源的监控和管理。NodeMange也会通过心跳通信的机制,将DataNode的信息汇报给ResourceManager。

           接收客户端计算任务的请求,真正执行任务的是DataNode里的Container。Container是CPU,内存等计算资源的容器。

ResouceManager接收到客户端的计算任务的请求,会与NodeManager进行通信,要求NodeManager启动一个Container,Container会根据运行的客户端程序封装所需要的CPU,内存的资源,启动Container之后,还会根据这个客户端程序启动一个ApplicationMaster,每个程序都只会有一个ApplicationMaster,也就是说客户端每次向ResouceManager提交的计算任务的请求时,都会在启动一个ApplicationMaster,该ApplicationsMaster负责具体任务的资源申请,任务调度,监控,它会向ResouceManager申请资源,申请完资源之后,会向NodeManager通信,要求NodeManager启动一个Container,执行具体的任务,该任务在执行的过程中,会不断与ApplicationMaster进行通信,汇报运行的情况。比如,执行一个MapReduce的任务,MapReduce会不断与ApplicationMaster,汇报一下当前任务执行的情况和状态。 客户端会通过ResourceMaster获取ApplicationMaster连接信息,并不断的与ApplicationMaster进行通信,获取最新的连接信息与运行状态,直到任务结束,释放占用的资源,关闭相应的Container。

注意:自ResourceManager的请求,NodeManager启动一个Container来启动一个ApplicationMaster,处理来自ResourceManager的授权,为作业的执行分配Container,前后这2个Cantainer可以是在一个节点上,也可以是在不同的节点上,容错机制保证了即使ApplicationMaster的节点失败,ResouceManager也在能使用的节点上,为该请求重启一个新的运行ApplicationMaster的容器。

对于YARN来说,其实没有节点的概念,对于它来说,所有的节点都可以看成一个庞大的计算资源来分配与调度,YARN会根据作业请求的资源的大小,来为该作业分配相应的资源以及启动Container。

YARN核心组件

  • ResourceManager

整个集群只有一个Master

功能:

处理客户端的请求

通过与NodeManager协调来启动/监控ApplicationMaster

监控NodeManager的健康状态

负责集群全局资源的分配和调度

  • NodeManager

每个节点只有一个,集群中会有多个,一般与DataNode一一对应,在相同的机器上部署。

功能:

单个节点上的资源监控和管理

定时向ResourceManager汇报本机的资源使用情况

处理来自ResourceManager的请求,为作业的执行分配Container

处理来自ApplicationMaster的请求,启动和停止Container

 

  • ApplicationMaster

每个应用程序只有一个。

只有在提交一个作业时,才会为这个作业启动一个ApplicationMaster。

在YARN上运行的每一个作业就是一个应用程序,每个应用只有一个ApplicationMaster,这个ApplicationMaster负责应用程序的管理,资源申请和任务调度,即每个作业的管理,资源申请和任务调度,申请资源时是与ResourceMaster来协调资源的。之前的ResourceMaster是负责集群全局的资源调度与管理。

功能:

与ResourceManager协商为应用程序申请资源

与NodeManager通信启动/停止作业任务

监控任务运行状态和失败处理

  • Container

任务运行环境的抽象,只有在分配任务的时候才会抽象出一个Container

功能:

任务运行资源(节点,内存,CPU)

任务启动命名

任务运行环境

YARN容错

  • ResourceManager

基于Zookeeper实现高可用

在集群中实现2个或多个ResourceMaster,但是只有一个是Active的状态,其他的都是热备节点的ResouceMaster,也是基于Zookeeper实现的高可用。当Active挂掉时,Zookeeper会选举出来新一个Active的ResouceMaster。

  • NodeManager

NodeManager故障将导致运行在该节点的任务失败,任务失败后,ResourceManager将失败的任务通知相应的ApplicationMaster

ApplicationMaster决定如何处理失败的任务,即是重新调度执行还是放弃任务。

  • ApplicationMaster

ApplicationMaster失败后,由ResourceManager负责重启

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值