当前yarn上任务只有队列间的资源抢占,队列内缺乏任务优先级配置,因此所有任务的优先级都是默认的,默认优先级的配置通过此参数配置yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority,默认值为0;此外hive on tez的任务在maper阶段会尽可能申请所需的最大资源来运行,极端情况下如果存在一个有问题的任务一直占用集群所有资源会导致其他任务都无法运行,因此需要一种方式能够让重要的任务尽可能的抢占到资源。
当前yarn的队列资源调度使用的是capacity容量调度器,该调度器支持队列间和队列内抢占的,当前的集群配置也是启用了两类抢占方式的,但队列内的抢占依赖任务的优先级,从网上找到的内容是需要在任务运行前配置SET mapreduce.job.priority=50,尝试过没有效果,造成无效有两个原因:
一是最大优先级参数(yarn.cluster.max-application-priority)没有配置,hadoop官网可以查到该值得默认值是0,设置为大于最大优先级的值时均按最大优先级设置;
二是tez中设置任务优先级的参数确实不是mapreduce.job.priority,通过查看tez源码发现对应的参数应该为tez.am.application.priority,该值越大代表获取资源的优先级越高。
二、集群配置
增加最大优先级参数配置yarn.cluster.max-application-priority=100;意味着在配置任务优先级tez.am.application.priority时值不能大于该值。
三、使用方式
在hive sql运行前配置set tez.am.application.priority=【0到100之间的数字】
验证方式: 在yarn页面中找到对应任务,查看Application Priority值是否为配置的值。
Tez是一个Hive的运行引擎,性能优于MR
Tez可以将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能
首先启动zk和hdfs
添加
pom.xml
启动hive
视频表结构
用户表结构
思路:使用order by按照views字段做一个全局排序即可,同时我们设置只显示前10条。
(1)即统计每个类别有多少个视频,显示出包含视频最多的前10个类别。
(2)我们需要按照类别group by聚合,然后count组内的videoId个数即可。
(3)因为当前表结构为:一个视频对应一个或多个类别。所以如果要group by类别,需要先将类别进行列转行(展开),然后再进行count即可。
(4)最后按照热度排序,显示前10条。
(1)先找到观看数最高的20个视频所属条目的所有信息,降序排列
(2)把这20条信息中的category分裂出来(列转行)
(3)最后查询视频分类名称和该分类下有多少个Top20的视频
(1)要想统计Music类别中的视频热度Top10,需要先找到Music类别,那么就需要将category展开,所以可以创建一张表用于存放categoryId展开的数据。
(2)向category展开的表中插入数据。
(3)统计对应类别(Music)中的视频热度。
(1)求出上传视频最多的10个用户
(2)关联gulivideo_orc表,求出这10个用户上传的所有的视频,按照观看数取前20
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)