在大数据技术生态当中,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调优,需要结合实际场景去综合考量。成都加米谷大数据,专业
大数据培训机构,大数据开发、数据分析挖掘,零基础班本月正在招生中,课程大纲及试学视频可联系客服领取!