圆咕噜咕噜 发表于 2024-7-26 08:32:07

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

Hadoop

Hadoop是Apache开源的分布式大数据存储与盘算框架,由HDFS、MapReduce、Yarn三部分构成。广义上的Hadoop实在是指Hadoop生态圈,包括的组件就不但是HDFS、MapReduce、Yarn,还包括Spark、Flink、Zookeeper、Sqoop、Hive、HBase等工具,但是我们讨论的不是Hadoop生态圈。
https://img-blog.csdnimg.cn/direct/3c9766dcff724ac691f5ec807b9a057b.png
由于要办理大数据量的存储和盘算问题,因此数据不能再存储在关系型数据库,而是存储在分布式文件体系HDFS中;然后通太过布式离线盘算框架MapReduce举行盘算;而Yarn则是负责资源调理,也就是决定盘算使命调理到哪些节点上执行。
https://img-blog.csdnimg.cn/direct/e114e5025c7d421f8a8230d29107fa66.png
HDFS

HDFS是一个分布式文件体系,用于存储海量的文件数据。其优点是可以存储达PB级别的文件数据,百万级别以上的文件数目;而缺点则是不适合低延时数据访问,并且不支持文件修改,只支持追加。
HDFS架构

https://img-blog.csdnimg.cn/direct/c4e60306d8e745f8ae5a52c6da150485.png
HDFS一共由四部分构成:Client、NameNode、DataNode、SecondaryNameNode。


[*]Client:负责文件上传之前的文件切分,切分好后传输每一个文件数据块到DataNode,上传数据块前询问NameNode该数据块上传的目标DataNode;从HDFS读取文件前询问NameNode返回文件元数据信息,再根据元数据从DataNode读取每个数据块。
[*]NameNode:担当DataNode的注册,存储文件的元数据信息,配置副本计谋等。
[*]DataNode:存储文件数据块。
[*]SecondaryNameNode:给NameNode举行FsImage(磁盘中的元数据)和Edits(内存中的元数据,还未写入FsImage,在Edits中举行追加写记载日记)的归并。
写文件流程

文件写入流程如下:
https://img-blog.csdnimg.cn/direct/90837470d8d741d6abcbdad5896b8cfd.png
客户端在上传文件时会举行文件切割,把文件切割成一个一个的数据块block,然后分别上传每个数据块;上传每个数据块时,询问NameNode得知该数据块传输到哪些DataNode上;然后根据NameNode返回结果,上传数据块到DataNode。
读文件流程

文件读取流程如下:
https://img-blog.csdnimg.cn/direct/8bea8174e84a4315a7be4afcd54d5a36.png
NameNode记载了文件元数据信息,比如哪个block存储在哪些DataNode。Client读取文件时,请求NameNode获取元数据信息,就可以根据元数据信息请求对应的DataNode读取对应的每个block。
MapReduce

MapReduce简介

MapReduce是一个分布式离线盘算框架,专门用于处理大数据场景中与及时性无关的一些离线盘算使命。
https://img-blog.csdnimg.cn/direct/3e75975ac9e04902a730fd6cff8e0cbd.png
MapReduce的数据输入一般是HDFS,然后经过InputFormat举行输入格式化,变成<K,V>格式;然后执行用户实现的Mapper范例的map方法,举行数据映射,映射处理的结果也是<K,V>格式;然后执行一个shuffle过程,对映射结果举行按key举行分组分区,把同一区域的所有KV发送到同一个Reducer,由一个节点举行;Reducer对同一个key分组下的所有value举行聚合操纵;然后Reducer的输出结果再经过OutputFormat举行格式化处理后举行结果输出。
MapReduce整体流程

下面是MapReduce运行的整体流程:
https://img-blog.csdnimg.cn/direct/9c0acfea7a624adeb28009c264f576a1.png

[*]client从HDFS读取指定文件的元数据,然后根据文件大小和block大小盘算切片信息,得出切片规划文件,然后提交job到Yarn指定的路径,job中包括切片规划文件和jar包等,这个jar包包罗了用户编写的Mapper和Reducer。
[*]Yarn根据切片数目盘算MapTask的数据量,一般一个block对应一个MapTask,然后把对应的task和程序启动脚天职派给block所在的节点上运行。
[*]每个节点执行对应的MapTask,默认的InputFormat读取每一行数据,然后以该行数据在文件中的起始字节偏移量为key,行数据本身作为value,调用Mapper的map方法。
[*]Mapper的map方法举行数据映射处理,那是用户自己实现的逻辑。
[*]对盘算结果举行Shuffle处理,根据key举行分组排序,然后对所有的key举行分区处理,同一分区的所有key会指派给一个ReduceTask执行,每个ReduceTask又会分派给一个节点执行。
[*]执行ReduceTask的节点下载分区数据,然后对差别MapTask得出的同一partition举行归并并排序。
[*]调用Reducer的reduce方法举行相应的聚合盘算,这里也是由用户自己实现。
[*]OutputFormation把Reducer产生的结果做格式化处理,默认会写为行数据。
[*]最后把结果存入HDFS中。
Yarn

Yarn是负责资源调理的,由Yarn管理每个Node节点然后举行使命分派,也就是把MapTask和ReduceTask分配给对应的Node。
https://img-blog.csdnimg.cn/direct/56414fc78f9045a391568024e67b5f7e.png
yarn有ResourceManager和NodeManager两角色。ResourceManager负责监控NodeManager,吸收客户端提交的job,然后举行资源分配调理;NodeManager负责管理单个节点上的资源,并执行ResourceManager的命令,启动并运行相应的MapTask和ReduceTask。
https://img-blog.csdnimg.cn/direct/1d22faee858044d9aadb168042854388.png
然而真正举行使命分配的并不是ResourceManager,ResourceManager每吸收一个job,会选一个NodeManager来启动一个ApplicationMaster,由ApplicationMaster向ResourceManager申请资源并发送使命和启动脚本到对应的NodeManager。
而task都是在Container中运行,Container是节点资源的抽象(比如cpu、内存等),也就是限制了该task只能使用这么多资源,避免一个task占满整个node的所有资源。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn