分组

1、读文件
2、调用map逻辑,输出的类型  OrderBean   NullWritable
3、定义orderBean   orderId    price   重写compareTo方法,判断,相同的orderId的数据按照价格排序
4、分区   按照orderId来进行分区规则,相同的orderId发送到同一个reduce里面去
5、排序
6、规约 省掉不写
7、分组  集成WritableComparator  
8、reduce逻辑
     接收k2  v2   直接输出
9、直接输出,输出我们k3  就是我们top1

资源相关参数

以下调整参数都在mapred-site.xml这个配置文件当中有
//以下参数是在用户自己的mr应用程序中配置就可以生效
(1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死。
(2) mapreduce.reduce.memory.mb: 一个Reduce Task可使用的资源上限(单位:MB),默认为1024。如果Reduce Task实际使用的资源量超过该值,则会被强制杀死。
(3) mapred.child.java.opts  配置每个map或者reduce使用的内存的大小,默认是200M
 (4) mapreduce.map.cpu.vcores: 每个Map task可使用的最多cpu core数目, 默认值: 1
(5) mapreduce.reduce.cpu.vcores: 每个Reduce task可使用的最多cpu core数目, 默认值: 1
virtual 虚拟的

//shuffle性能优化的关键参数,应在yarn启动之前就配置好
(6)mapreduce.task.io.sort.mb   100         //shuffle的环形缓冲区大小,默认100m
(7)mapreduce.map.sort.spill.percent   0.8    //环形缓冲区溢出的阈值,默认80%

//应该在yarn启动之前就配置在服务器的配置文件中才能生效
以下配置都在yarn-site.xml配置文件当中配置
(8) yarn.scheduler.minimum-allocation-mb	  1024   给应用程序container分配的最小内存
(9) yarn.scheduler.maximum-allocation-mb	  8192	给应用程序container分配的最大内存
(10) yarn.scheduler.minimum-allocation-vcores	1	container最小的虚拟内核的个数
(11)yarn.scheduler.maximum-allocation-vcores	32 container最大的虚拟内核的个数
(12)yarn.nodemanager.resource.memory-mb   8192  每个nodemanager给多少内存

容错相关参数

(1) mapreduce.map.maxattempts: 每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
(2) mapreduce.reduce.maxattempts: 每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
(3) mapreduce.job.maxtaskfailures.per.tracker: 当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0. 
 (5) mapreduce.task.timeout: Task超时时间,默认值为600000毫秒,经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒)。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等)

Yarn资源调度

yarn主要就是为了调度资源,管理任务等

一级调度管理:
计算资源管理(CPU,内存,网络IO,磁盘)
App生命周期管理 (每一个应用执行的情况,都需要汇报给ResourceManager)
二级调度管理:
	任务内部的计算模型管理  (AppMaster的任务精细化管理)
	多样化的计算模型 

yarn当中的各个主要组件的介绍


ResourceManager:yarn集群的主节点,主要用于接收客户端提交的任务,并对资源进行分配
NodeManager:yarn集群的从节点,主要用于任务的计算
ApplicationMaster:当有新的任务提交到ResourceManager的时候,ResourceManager会在某个从节点nodeManager上面启动一个ApplicationMaster进程,负责这个任务执行的资源的分配,任务的生命周期的监控等
Container:资源的分配单位,ApplicationMaster启动之后,与ResourceManager进行通信,向ResourceManager提出资源申请的请求,然后ResourceManager将资源分配给ApplicationMaster,这些资源的表示,就是一个个的container
JobHistoryServer:这是yarn提供的一个查看已经完成的任务的历史日志记录的服务,我们可以启动jobHistoryServer来观察已经完成的任务的所有详细日志信息
TimeLineServer:hadoop2.4.0以后出现的新特性,主要是为了监控所有运行在yarn平台上面的所有任务(例如MR,Storm,Spark,HBase等等)

yarn当中各个主要组件的作用:


resourceManager主要作用:
		处理客户端请求
		启动/监控ApplicationMaster
		监控NodeManager
		资源分配与调度
NodeManager主要作用:
		单个节点上的资源管理和任务管理
		接收并处理来自resourceManager的命令
		接收并处理来自ApplicationMaster的命令
		管理抽象容器container
		定时向RM汇报本节点资源使用情况和各个container的运行状态
ApplicationMaster主要作用:
		数据切分
		为应用程序申请资源
		任务监控与容错
负责协调来自ResourceManager的资源,开通NodeManager监视容的执行和资源使用(CPU,内存等的资源分配)

Container主要作用:
	对任务运行环境的抽象
	任务运行资源(节点,内存,cpu)
	任务启动命令
	任务运行环境

yarn调度器

1:fifo  队列调度器,first  in  first  out 没人用  
第一个任务来了,先执行,第二个任务来了,等着
如果一个很大的计算任务先来,需要执行两个小时,再来一个小任务,需要执行两分钟


2:capacity  scheduler  容量调度器  apache的hadoop版本默认使用的
     容量调度器:将我们集群的资源,划分成好几个队列  
	 30%  40%  30%
	3      4     3
	任务提交的时候,可以选择不同的队列来进行提交
	根据提交的任务需要的资源大小不同,可以将我们的任务,划分到不同的队列下面去


3:fairScheduler  公平调度器  CDH版本的hadoop默认的调度规则
如果没有任务提交,第一个任务过来,将集群当中的所有的资源全部给第一个任务
第二个任务来了,将第一个任务的资源划分一点出来给第二个任务,保证第二个任务也可以窒息感
保证每一个任务都可以公平的一起执行
posted on 2020-05-31 18:08  hatcher_h  阅读(605)  评论(0)    收藏  举报