-
1)由客户端向RM发送计算任务的请求,
-
2)RM的APPlocationManager接收计算的任务,然后在namemanager中生成一个applocationmaster
-
3)applocationmaster接收请求后,向RM中的ResourceScheduler申请计算资源,申请成功后告知applocationmaster
-
4)applocationmaster接收到申请成功的消息后,通知NM按照分配资源,提供相应的资源数据
-
5)NM中的map和reduce将计算信息通知给applocationmaster
-
6)applocationmaster接收到计算完成信息后,通知NM回收资源
-
7)之后applocationmaster计算任务完成后告知RM中的applocationmanager,释放自己的资源.
-
多个计算任务的资源调度的分配
-
FIFO:队列形式,先进先出
-
-
-
容量调度:会划分不同的通道,进行大任务和小任务的计算,
-
其中会有动态调整机制:可以设置资源上限,若发现其中一个通道没有计算任务,则会将该通道内的资源分配给另一个通道,但不会达到百分之百的资源使用
-
初始值:30%、70%
-
max:45%、85%
-
-
公平调度,在一个计算任务时间较长时,在进行map阶段结束后,会将资源分配给较小任务进行计算任务
-
-
1)最少要有2个hadoop服务,5台服务器,Node1、Node2、Node3、Node4、Node5
-
2)Node1和Node2上安装Namenode、Resourcemanager,如果服务器多可以将NN和RM分开安装,Node3、Node4、Node5上安装DataNode、Namemanager、Zookeeper
-
3)Node1和Node2中的NN通过ZKFC连接zookeeper服务,
-
ZKFC服务是hadoop自带的,由hadoop服务启动
-
负责监控各自NN的状态
-
连接zk服务创建节点,确认主服务是谁
-
备用服务的ZKFC会去监听主服务的节点
-
监听到主服务的节点有变化时,启动备用的服务作为主服务
-
zk服务需要维护一个终端会话
-
-
4)两个NN之间的数据同步是依靠journal manager
-
NN会将元数据传递给journal manager中的journal node进行保存,
-
JN也会对所收到的元数据进行备份,JN有几个就备份多少份数据,
-
JN存储数据也遵循过半机制,有超过一半的JN存储成功,数据才算真的存储成功,
-
JN会持续不断的接收NN产生的新的数据进行保存
-
-
1)namenode中如果有新的事务指令(写,删除,移动)操作写入,则先将食物之灵写入本地的edits文件,写入成功后再写入内存
-
2)secondarynamenode向namenode定时询问是否存需要存储数据,
-
3)namenode接收后,如果需要存储,则向secondarynamenode发送edits和fsimage
-
4)secondarynamenode接收后,执行edits中的指令,把发生变化的文件信息(文件的路径发生变化)写入fsimage,(合并操作)生成新的new_fsimage,并将其发送到内存,
-
5)同时,secondarynamenode将新的new_fsimage重新传递给namenode,然后namenode将最近最新的edits按照指令拆解成一个一个的新的new-edits
-
1)先对datanode中的数据按照块进行分片操作,并分成key-value的形式,key为行号,value为行中的数据
-
2)然后,每个分片会对应一个map,运行map进行数据的进一步的分割,分割为key-value的形式,此时运行了map代码,(若是词频统计操作)key为词,value为词的个数
-
3)进入shuffles机制中,对所得key-value数据进行分区、排序、规约、合并数据操作
-
分区:指定分区,默认情况下是一个分区对应一个reduce
-
排序:对map数据进行排序,词频统计时,是按照字母的先后顺序排序
-
规约:指定数据按照什么方式合并,hadoop自身完成
-
合并数据
-
-
4)进入reduce阶段进行合并统计,运行reduce代码,如果是多个分区,则对应会有多个reduce进行计算统计
-
5)输出数据到hdfs中进行保存展示
-
1)客户端向namenode发送上传、删除等指令请求,询问namenode是否可以存储数据,namenode会检查所存储的文件目录是否存在
-
2)如果目录存在则返回按照已有的副本数,并指定datanode的存储位置,和存储顺序
-
3)客户端收到消息后,按照NN分配好的datanode的存储顺序去连接第一个datanode
-
4)第一台datanode保存完成后回去连接第二个datanode,这之间数据的传递大小大概是64kb
-
5)第二台保存成功后会连接第三台,以此类推,直到所有的datanode保存完成
-
6)最后一个datanode保存完成后会向前一台发送保存结果,以此类推,直到第一台datanode,此时datanode会将保存结果返回给客户端
6、zk服务保存数据的过程
-
无论客户端访问的哪个zk服务,都会先把保存数据的指令请求发送给leader
-
zk服务中的leader接收请求后会询问各个follower能否存储
-
如果返回的结果中有超过一半(过半机制)的follower同意保存,则leader通知各个follower进行数据存储
-
zk服务的leader也是通过过半选举产生的,observer处理查询请求,不参加是否保存数据的选举



