天天看点

深入了解Hdfs和Yarn架构

目录

1.元数据节点和数据节点

2.合并流程

3.数据的分发遵循就近原则

Yarn

1主从架构

2. ApplicationMaster(AM)

3. NodeManager(NM)

4. Container

元数据节点(namenode)用来管理文件系统的命名空间,它将所有的文件和文件夹的元数据保存在一个文件系统树中。

数据节点(datanode)就是用来存储数据文件的。

从元数据节点(secondarynamenode)不是我们所想象的元数据节点的备用节点,其实它主要的功能是主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。

深入了解Hdfs和Yarn架构

1)首先,Client发起文件上传请求,即通过RPC与NameNode建立通讯。

2)NameNode与各DataNode使用心跳机制来获取DataNode信息。NameNode收到Client请求后,获取DataNode信息,并将可存储文件的节点信息返回给Client。

3)Client收到NameNode返回的信息,与对应的DataNode节点取得联系,并向该节点写文件,写入文件被切分成128m大小的数据块,最后一块可能不够128m,一个数据块里不能同时存储2个以上文件的数据。

4)文件写入到DataNode后,以流水线的方式复制到其他DataNode(以3份冗余为例,数据块副本策略为:第一个块写入最近的机架上的一台服务器,第二个块由第一个块复制到同一个机架上的另一台主机上,最后一个副本被第二个副本主机复制到不同机架的不同主机上),至于复制多少份,与所配置的hdfs-default.xml中的dfs.replication相关。

深入了解Hdfs和Yarn架构

1、fsimage

记录某一永久性检查点(Checkpoint)时整个HDFS的元信息

2、edits

所有对HDFS的写操作都会记录在此文件中

NameNode的元数据信息先往edits文件中写,当edits文件达到一定的阈值(3600秒或大小到64M)的时候,会开启合并的流程。

1.当开始合并的时候,SecondaryNameNode会把edits和fsimage拷贝到自己服务器所在内存中,开始合并,合并生成一个名为fsimage.ckpt的文件。

2.将fsimage.ckpt文件拷贝到NameNode上,成功后,再删除原有的fsimage,并将fsimage.ckpt文件重命名为fsimage。

3.当SecondaryNameNode将edits和fsimage拷贝走之后,NameNode会立刻生成一个edits.new文件,用于记录新来的元数据,当合并完成之后,原有的edits文件才会被删除,并将edits.new文件重命名为edits文件,开启下一轮流程。

这里大家注意,我们带大家去看linux中hdfs中block块数据和fsimage和edits的真正存储路径是在  $HADOOP_HOME/data/tmp/dfs 中

数据的分发遵循就近原则,block块对应的机架中的datanode的分布保证安全性流式写入:

1.将block1分成一个一个的package,将package1发送给DN1

2.DN1接受完package1,自己存一份,再将package1发送给DN2

同时,接收client发送来的package2

3.DN2接收完package1,自己存一份,再将package1发送给DN4

...

4.当block1接收完毕,DN1,DN2,DN4向NN汇报消息(接收完毕),DN1再向client汇报block1接收完毕,于是,client开始发送block2.

主:resourcemanager管理资源,分配资源

从节点:nodemanager消耗资源

深入了解Hdfs和Yarn架构

 1.ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。

1)调度器

调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

2) 应用程序管理器

应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。

用户提交的每个应用程序均包含1个AM,主要功能包括:

与RM调度器协商以获取资源(用Container表示);

将得到的任务进一步分配给内部的任务;

与NM通信以启动/停止任务;

监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

当前YARN自带了两个AM实现,一个是用于演示AM编写方法的实例程序distributedshell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另一个是运行MapReduce应用程序的AM—MRAppMaster,我们将在第8章对其进行介绍。此外,一些其他的计算框架对应的AM正在开发中,比如Open MPI、Spark等。

NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

深入了解Hdfs和Yarn架构

 1 用户向YARN中提交应用程序,其中包括阿程序、启动ApplicationMaster的命令、用户程序等。

2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

6 NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

继续阅读