4-MapReduce、YARN、HA

hadoop离线day04--Hadoop MapReduce、YARN、HA


今日课程学习目标

理解分布式计算分而治之的思想
学会提交MapReduce程序
掌握MapReduce执行流程
掌握YARN功能与架构组件
掌握程序提交YARN交互流程
理解YARN调度策略
掌握Hadoop HA实现原理

今日课程内容大纲

#1、初识MapReduce
	MapReduce背后的思想	先分再合,分而治之
	MapReduce设计构思
	官方MapReduce示例
    MapReduce Python接口
    	
#2、MapReduce基本原理
	整体流程梳理
	map阶段执行流程
	reduce阶段执行流程
	shuffle机制
	
#3、Hadoop YARN
	介绍:集群资源管理 任务调度
	3大组件 架构
	程序在yarn运行流程:以mr程序提交为例
	yarn调度器
    
#4、Hadoop HA集群
	高可用概念:持续可用 一直可用
		解决单点故障问题  主备集群
	Hadoop HDFS HA实现方案--QJM、YARN HA
	搭建HA集群

知识点01:Hadoop MapReduce--理解分而治之的思想


知识点02:Hadoop MapReduce--官方团队设计构思

4-MapReduce、YARN、HA_image.png

!Pasted image 20250309210336.png

!Pasted image 20250309211508.png


知识点03:Hadoop MapReduce官方示例--计算圆周率(如何提交mr到yarn)

最终MR程序需要用户的代码和Hadoop自己实现的代码整合在一起 才能叫做完整MR程序。

由于当下企业中MapReduce计算引擎已经日薄西山,所以很少涉及到MapReduce编程了。

可以通过官方提供的示例来感受MapReduce。


image-20210921165418451.png


知识点04:Hadoop MapReduce官方示例--单词统计(WordCount)需求剖析

#map阶段的核心:把输入的数据经过切割,全部标记1,因此输出就是<单词,1>。

#shuffle阶段核心:经过默认的排序分区分组,key相同的单词会作为一组数据构成新的kv对。

#reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数。

#读取数据组件  写出数据组件MR框架已经封装好(自带)

知识点05:Hadoop MapReduce官方示例--Wordcount--java代码梳理


知识点06:Hadoop MapReduce--python接口接入

#虽然Hadoop是用Java编写的一个框架, 但是并不意味着他只能使用Java语言来操作;

#在Hadoop-0.14.1版本后, Hadoop支持了Python和C++语言;

#在Python中的sys包中存在stdin和stdout(输入输出流), 可以利用这个方式来进行MapReduce的编写;

#在Hadoop的文档中提到了Hadoop Streaming, 可以使用流的方式来操作它;
	https://hadoop.apache.org/docs/r3.3.0/hadoop-streaming/HadoopStreaming.html

知识点07:Hadoop MapReduce--Hadoop Streaing提交python脚本


知识点08:Hadoop MapReduce--输入输出路径及注意事项


知识点09:Hadoop MapReduce--工作机制--map阶段执行流程

image-20210730224715586.png

image-20210730224727842.png


知识点10:Hadoop MapReduce--工作机制--reduce阶段执行流程

image-20210730224735604.png

4-MapReduce、YARN、HA_image-3.png

1、拉取复制数据
2、拉取来的数据进行merge合并、sort排序
规则:key的字典序排序a--z
3、排序之后的数据进行分组
分组规则:key相同的分为一组
4、一组去调用-次reduce方法进行聚合处理
业务逻辑处理
5、TextOutPutFormat默认的输出数据组件


探究:
1、reducetask个数能否改变,难道只能有--个吗?
2、rcducctask个数改变和最终输出的结果文件个数有啥关系。
默认情况下,MR程序永远只有-一个reducetask

MR的分区(partition)问题:
当MR程序中,reducetask个数>=2个的时候,对于 maptask就会涉及到一个棘手的问题:
其输出的结果应该交给哪一个reducetask来处理?
这个问题就是MR的分区问题Partition。

关键就是分区的规则:
分区的关键就是分区规则默认规则HashPartitioner哈希取模
<key,value>
key.hashcode % ReduceTask个数 == 余数 == 分区编号
默认这个规则不会保证数据平均分区, 但是会保证,只要map输出的key-样就会到同一个分区中


知识点11:Hadoop MapReduce--工作机制--shuffle机制

image-20210730224743959.png

Map端Shuffle
Collect阶段:将MapTask的结果收集输出到默认大小为100M的环形缓冲区,保存之前会对key进行分区的计算,默
认Hash分区。
Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对
数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
Merge阶段:把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
Reducer端shuffle
Copy阶段:ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。
Merge阶段:在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
Sort阶段:在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序, ReduceTask只需保证Copy的数据的最终整体有效性即可。
shuffle的弊端
Shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在。
Shuffle也是MapReduce被垢病最多的地方所在。MapReduce相比较于Spark、Flink计算引l擎慢的原因,跟Shuffle机制有很大的关系。
suffle中频繁涉及到数据在内存、磁盘之间的多次往复


---------------------------------

知识点12:Hadoop YARN--功能职责概述

简介

image-20210921173212023.png

4-MapReduce、YARN、HA_image-4.png


知识点13:Hadoop YARN--集群架构、yarn3大组件

官方给的图↓
image-20210921173320913.png

4-MapReduce、YARN、HA_image-5.png


知识点14:Hadoop YARN--MR程序提交YARN流程

image-20210730224812277.png

流程

  1. 客户端提交,客户端连接resourceManager请求资源运行本次程序的AM(Application是 Manager)
  2. RM指定NM预留资源,配合客户端启动容器container(图中MR App Mstr)客户端到指定的NM上,通过和NM的配合启动容器运行AM进程
  3. AM启动向RM进行注册,保持通信
  4. NM根据切片个数,向RM申请与之对应的容器运行MapTask
    1. Resource Scheduler:申请安排至调度队列中,根据调度策略该你执行你猜执行
  5. AM根据申请的容器到各个机器上和NM配合启动容器运行MapTask并监督其执行情况
  6. AM根据ReduceTask个数申请容器运行,过程同上
  7. 整个MR程序执行过程中,都是AM在申请资源、监督执行,并且把执行的情况汇报给RM(所以网页里才看得到)
  8. 程序运行完毕AM向RM申请回收资源,并且申请注销自己

注意:
1、YARN只负责分配资源回收资源不负责程序内部的逻辑
2、不管是客户端、还是AM,只要想申请新的资源,必须找RM,因为RM才是资源分配的唯一仲裁者
3、真正负责操心程序内部执行情况的是AM,每个程序都有自己的AM
MR ---> MrAppMaster
SparkFlink叫什么呢?后面好好学习。


知识点15:Hadoop YARN--scheduler调度策略


知识点16:Hadoop YARN--capacity配置示例说明

image-20210921172135028.png
4-MapReduce、YARN、HA_image-11.png

---------------------------------------

知识点17:Hadoop HA集群--什么是高可用、实现高可用注意事项

image-20210921173435657.png

背景知识:
4-MapReduce、YARN、HA_image-13.png
4-MapReduce、YARN、HA_image-14.png

4-MapReduce、YARN、HA_image-12.png
4-MapReduce、YARN、HA_image-15.png

知识点18:Hadoop HA集群--HDFS HA--QJM实现原理

QJM解决单点故障

image-20210921173452718.png


知识点19:Hadoop HA集群--YARN HA

4-MapReduce、YARN、HA_image-20.png
image-20210921173504825.png
4-MapReduce、YARN、HA_image-21.png



今日作业

#理解分布式计算分而治之的思想
	分为几步 每步做什么
    如何理解map单词 如何理解reduce单词
    
#学会提交MapReduce程序
	hadoop jar 
	yarn jar
	
#掌握MapReduce执行流程  重要
	map阶段
		1、maptask个数如何决定的
		2、读文件组件textinputFormat 读数据行为是?
		3、map处理完数据进行分区  分区是什么  默认分区规则是啥
		4、缓冲区作用 0.8 100M
		5、spill 溢写
		6、sort排序 行为是什么
		7、merge 合并
		
	reduce阶段
		0、reducetask个数如何决定的 默认1 手动设置
		1、copy主动拉取自己的数据
		2、merge合并
		3、sort排序
		4、分组 行为
		5、默认输出组件textoutputFormat
		
	shuffle机制
		什么是shuffle 缺点是什么
		map端shuffle有哪些步骤
		reduce端shuffle有哪些步骤
		
#MR程序中maptask个数、reducetask个数怎么决定的		
	maptask影响因素(并行度个数)
	
	reducetask影响因素(并行度个数)
		人干预
	
#掌握YARN功能与架构组件
	3个组件
		RM
		NM
		AM

#掌握程序提交YARN交互流程  重要
	申请资源就找RM
	程序内部首先启动AM

#理解YARN调度策略
	几个策略 默认是谁  优缺点是啥
	FIFO
	Capacity
	Fair

#掌握Hadoop HA实现原理
	HA相关名称
	设计角度:如何顺利实现HA系统?
		如何避免脑裂?  脑裂的后果是什么?  追求的是什么?
		如何实现主备数据状态同步?
	
    NN HA---QJM
    	zkfc是啥功能
    	jn是啥