hadoop的工作原理?hadoop是什么?hadoop的内部三大模块是怎么运行的?

hadoop是什么?

hadoop是一个开源框架,主要包括三大块内容:hdfs(分布式文件存储系统),yarn(资源管理和任务调度系统),mapreduce(分布式计算框架);

hadoop的工作原理是什么?或者说hadoop的内部工作机制是什么?

想要知道上边问题的答案,就首先需要了解hadoop这三大块的架构,接下来就先一一介绍这三大块分别是什么?这三大块内部都是怎么运行的?

hdfs内部架构:

NameNode:存储元数据信息,负责管理DataNode,给从节点分配任务,并起到监控从节点心跳的作用;

SecondaryNameNode:辅助NameNode管理,但是不可以替代NameNode,即使NameNode主节点宕机也轮不到SecondaryNameNode上位,而是由zookeeper中的选举机制在DataNode从节点中重新选举新的主节点。那么SecondaryNameNode到底是辅助管理哪些工作呢?主节点启动时会把元数据信息存在FSImage中,同时每次对主节点有操作记录的行为都存储在Edits中,那么这些小文件肯定会越来越多,占据的空间也就会越来越大,这个时候就需要看时间长短和文件大小来决定什么时候这些小文件合并,合并之后主节点将这些文件交由SecondaryNameNode辅助管理;

DataNode:从节点,主要用于存储具体的数据,负责执行主节点分配的任务;

hdfs内部工作流程

客户端上传文件,把文件需要切分成若干个block块,然后向主节点发出创建文件夹的请求,主节点创建成功后将消息告知给客户端,同时主节点查找闲置的从节点,同时把从节点的地址信息告知给客户端,从节点同时需要保证时刻和主节点的心跳汇报,然后客户端按照主节点告知的具体存储地址去找从节点,然后block块依次进行上传,这个时候上传文件的时候每台服务器上需要保证至少有三个副本信息,也就是为什么hdfs能保证数据不丢失的原因,这就是hdfs的内部工作流程;

Yarn内部架构:

ResourceManager主节点:负责资源管理和任务调度,监控着所有资源;

ApplicationMaster:负责具体每个应用程序的任务调度协调;

NodeManager从节点:负责对自己节点的维护;

Container:资源容器,容器中运行Task任务,或者更通俗点来说就是MapReduce计算的容器,敲黑板,划重点!!!

yarn内部原理:

客户端向主节点发出请求运行时所需的计算机资源,然后主节点也就是ResourceManager开始启动最近的一个从节点,启动该从节点的Container,运行ApplicationMaster,然后AM向主节点注册自己,并且保持心跳信息的实时通信,AM向主节点申请需要的若干数目的Container容器,主节点向每个容器分配资源,同时AM把申请的容器地址告知给客户端,客户端把资源完整的发给每个容器,而AM就是负责对从节点进行监控管理.。

MapReduce内部架构:

Map:负责分,将文件分片处理,然后转化成map阶段自定义逻辑的K,V键值对形式;

shuffle:分区,排序,规约,分组,简单直白点说就是map阶段的输出到reduce阶段的输入的中间过程这就是shuffle阶段;

reduce:对数据进行全局汇总;

MapReduce内部工作原理机制:

原理其实就是上边架构的顺序,依次执行即可,此处就不再赘述了

重点了,现在开始讲讲这三大块是怎么连到一起的?

敲黑板!讲重点了!!!!

hadoop工作原理是什么?其中三大块怎么互相调用的?

当客户端提向yarn资源调度框架提交job任务,并申请处理该job的资源,yarn调度系统返回给客户端一个job任务的唯一标识ID,然后yarn这个资源管理调度系统马上通知hdfs主节点,告知hdfs有任务过来了,准备接驾,然后hdfs主节点就开始去找能调用的闲置从节点,hdfs中具体怎么运转的上边刚讲过,然后hdfs找到可以调用的从节点地址后马上返给yarn资源调度系统,然后资源调度系统拿着hdfs从节点的地址去找负责具体存储的从节点datanode,然后把数据上传到指定的从节点中。存储到hdfs上之后,客户端的任务可以开始进行真正的分析统计了,yarn资源调度系统开始给客户端分配计算机资源,按照就近原则找一个从节点,启动该从从节点的容器,然后启动该从节点中的AM,这个时候当AM向yarn主节点申请相应数目的容器时,敲黑板了!主节点会分配给若干个容器给AM,然后这些容器去到hdfs上下载资源,其实这个时候这些分配的容器去下载资源的时候就已经进入到Map阶段了,为什么这样说呢?因为mapreduce运行任务就是在容器中进行的,所以就开始对文件进行切分,分区,排序,规约,分组,聚合,全局汇总,最终将结果保存在hdfs上,这个时候可能就会有人问了?那hdfs上已经存储过分析前的数据了,那分析时的容器中的数据要放在哪里呢?如果想保存在hdfs上就保存在hdfs上,如果不想保存就直接释放掉就ok了,具体看场景而定!

累死本宫了!总结完毕,碎觉!以上内容仅代表自己现阶段的初步认识,如有不对之处还望指出!!!

 

你可能感兴趣的:(hadoop)