主页 > 新闻资讯 > 大数据学习:Hive调优的几种思路

大数据学习:Hive调优的几种思路

作者:张老师 浏览次数: 2021-01-04 16:58
在大数据技术生态当中,Hive调优是实际运行当中常常面临的问题,企业级的数据平台,随着数据规模的不断增长,要想更高效率地运行下去,就需要根据实际情况来进行优化。今天的大数据学习分享,我们就主要来讲讲,Hive调优的几种思路。
 
Hive拥有较多在特定情况下优化的特性,如何利用好相关特性,是Hive性能调优的关键。
 
大数据学习:Hive调优的几种思路

一、本地模式
 
当一个MapReduce任务的数据量和计算任务很小的时候,在MapReduce框架中Map任务和Reduce任务的启动过程占用了任务执行的大部分时间,真正的逻辑处理其实占用时间很少,但是给用户的感受就是:很小的任务,同样执行较长的时间。
 
那么在0.7版本之后,Hive引入了本地模式,那么对于小任务的执行,Hive客户端不再需要到Yarn上申请Map任务和Reduce任务,只需要在本地进行Map和Reduce的执行,大大的加快了小任务的执行时间,通常可以把分钟级别任务的执行时间降低秒级。
 
参数设置:
 
参数名称
 
默认值
 
说明
hive.exec.mode.local.auto false 是否开启本地模式
hive.exec.mode.local.auto.inputbytes.max 134217728 该参数限定了Map输入的文件大小。如果是高压缩率列存文件,可适当减小此值,避免进入本地模式,一般选择默认值即可。
hive.exec.mode.local.auto.input.files.max 4 参数限定了Map输入的文件个数。如果是多个小文件,可适当增大此值,一般选择默认值即可。
 
实际测试中,使用本地模式之后,对于小表的计算查询能从34秒减少到2秒。
 
二、并行模式
 
Hive的Parallel特性使得某些任务中的stage子任务以并行执行模式同时执行,相对于一直串行执行stage任务来说有效的提升资源利用率。
 
Parallel特性主要针对如下几种情况:
 
多个数据表关联
 
插入多个目标表
 
UNION ALL
 
参数设置:
 
参数名称
 
默认值
 
说明
hive.exec.parallel false 是否开启自动转换为PARALLEL
hive.exec.parallel.thread.number 8 最大并行度
 
实际测试中,选用TDC-DS中的Q11,从对比结果看,在使用Parallel特性之后,由原来的743秒减少到600秒,在并行任务数据量较大,集群资源较充足,计算较复杂的情况下,任务执行效率提升会更加明显。
 
三、严格模式
 
Hive提供一个严格模式,可以防止用户执行那些可能产生意想不到的影响查询。
 
参数设置:
 
参数名称
 
默认值
 
说明
hive.mapred.mode hive 1.x默认nostrict;
hive 2.x默认strict(HIVE-12413)
设置hive的严格模式
 
通过设置hive.mapred.mode的值为strict,开启严格模式可以禁止3种类型的查询:
 
(1)对于分区表,要求必须限定分区字段,换句话说就是不允许扫描所有的分区,这是因为通常所有分区的数据量都比较大,这样可以避免消耗大量资源。
 
(2)对于使用order by的查询,要求必须使用limit语句,因为order by为了执行排序过程会将所有的结果数据分发到同一个reducer中进行处理,这样可以避免reducer执行过长的时间。
 
(3)限制笛卡尔积查询,要求两张表join时必须有on语句。
 
四、Uber模式
 
Uber模式准确的说并不是Hive的优化特性,是Yarn上针对MR小作业的优化机制,如果job任务足够小,则直接让任务串行的在MRAppMaster完成,这样整个Application只会使用一个Container(JVM重用功能),相对于分配多个Container来说执行效率要高很多。
 
参数设置:
 
参数名称
 
默认值
 
说明
mapreduce.job.ubertask.enable false 是否开启小任务ubertask优化模式
mapreduce.job.ubertask.maxmaps 9 设置Uber模式的最大Map数量
mapreduce.job.ubertask.maxreduces 1 设置Uber模式的最大Reduce数量
mapreduce.job.ubertask.maxbytes dfs.block.size 设置Uber模式的最大字节数
 
仅仅满足以上四个参数还不行,因为作业是在AM所在的Container中运行,Uber任务执行还应满足如下条件:
 
(1)Map内存设置(mapreduce.map.memory.mb)和Reduce内存设置(mapreduce.reduce.memory.mb)必须小于等于AM所在容器内存大小设置(yarn.app.mapreduce.am.resource.mb)。
 
(2)Map配置的vcores(mapreduce.map.cpu.vcores)个数和Reduce配置的vcores(mapreduce.reduce.cpu.vcores)个数也必须小于等于AM所在容器vcores个数的设置(yarn.app.mapreduce.am.resource.cpu-vcores)。
 
关于大数据学习,Hive调优的几种思路,以上就为大家做了详细的介绍了。Hive的优化,对于提升运行效率是非常重要的,要做好Hive调优,需要结合实际场景去综合考量。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析挖掘,零基础班本月正在招生中,课程大纲及试学视频可联系客服领取!
热点排行
推荐文章
立即申请>>