分组
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默认的调度规则
如果没有任务提交,第一个任务过来,将集群当中的所有的资源全部给第一个任务
第二个任务来了,将第一个任务的资源划分一点出来给第二个任务,保证第二个任务也可以窒息感
保证每一个任务都可以公平的一起执行
浙公网安备 33010602011771号