hive参数配置及任务优化
一、hive常用参数
0.常用参数
--@Name:
--@Description:
--@Type:全量加载
--@Author:---
--@CreateDate:
--@Target:
--@SourceTable:
--@ModifyBy:
--@ModifyDate:
--@ModifyDesc:
--@Copyright
--设置作业名
set mapred.job.name = hive_xxx(${statisdate});
--Map输入合并大小
set mapreduce.input.fileinputformat.split.maxsize=300000000;
set mapreduce.input.fileinputformat.split.minsize=100000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=100000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=100000000;
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
--设置reduce数目
set hive.exec.reducers.bytes.per.reducer= 300000000;
set hive.exec.reducers.max=300;
--输出合并
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set hive.merge.size.per.task = 128000000;
set hive.merge.smallfiles.avgsize=16000000;
--是否使用mapjoin
set hive.auto.convert.join = false;
--设置默认用户
use xxx_db;
1.任务名设置
set mapreduce.job.name=xxxx(${statis_date}) # 方便定位具体任务
2.输入合并参数设置
set mapreduce.input.fileinputformat.split.maxsize=300000000;
set mapreduce.input.fileinputformat.split.minsize=100000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=100000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=100000000;
set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; --不进行小文件合并
3.输出合并参数设置
set hive.merge.mapfiles = true #在Map-only的任务结束时合并小文件
set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件
set hive.merge.size.per.task = 256*1000*1000 #合并文件的大小
set hive.merge.smallfiles.avgsize=16000000 #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge
4.reduce设置
set hive.exec.reducers.bytes.per.reducer= 300000000;
set hive.exec.reducers.max=300;
set mapred.reduce.tasks=10; #固定reduce大小
5.mapjoin参数设置
set hive.auto.convert.join= false; -- 是否开启mapjoin
set hive.auto.convert.join.noconditionaltask = true ; -- 是否将多个mj合并成一个
set hive.auto.convert.join.nonconditionaltask.size = ; -- 多个mj合并后的大小(阈值)
6.map端聚合
set hive.map.aggr = true;
7.mapreduce的物理内存、虚拟内存
set mapreduce.map.memory.mb = 4096;
set mapreduce.reduce.memory.mb = 4096;
set mapreduce.map.java.opts=-Xmx3278m;
set mapreduce.reduce.java.opts=-Xmx3278m;
---------------------------------------------------
-- set mapreduce.map.memory.mb = 4096;
-- set mapreduce.reduce.memory.mb = 4096;
-- 此参数设计必须在允许范围内
-- yarn.scheduler.maximum-allocation-mb=8192;
-- yarn.scheduler.minimum-allocation-mb=1024;
---------------------------------------------------
-- 堆内存设置要小于物理内存,一般设置为80%
-- set mapreduce.map.java.opts=-Xmx1638m;
-- set mapreduce.reduce.java.opts=-Xmx3278m;
---------------------------------------------------
-- Application application_1409135750325_48141 failed 2 times due to AM Container for
-- appattempt_1409135750325_48141_000002 exited with exitCode: 143 due to: Container
-- [pid=4733,containerID=container_1409135750325_48141_02_000001] is running beyond physical memory limits.
-- Current usage: 2.0 GB of 2 GB physical memory used; 6.0 GB of 4.2 GB virtual memory used. Killing container.
-- #虚拟内存打开:yarn.nodemanager.vmem-check-enabled=true
-- 最大允许使用的虚拟内存=最大可使用的物理内存 * yarn.nodemanager.vmem-pmem-ratio=2.1
-- #物理内存检查打开:yarn.nodemanager.pmem-check-enabled=true
-- 两者中有一个超过允许最大内存,此container容器均会被杀
---------------------------------------------------
8.动态分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict; # 非严格模式
9. shuffle端内存溢出oom (BoundedByteArrayOutputStream)
set mapreduce.reduce.shuffle.memory.limit.percent=0.10;
10.map段谓词下推
set hive.optimize.ppd=true;
11.并行执行
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=16; # 并行度
12.reduce申请资源时机
mapreduce.job.reduce.slowstart.completedmaps=0.05
控制当map任务执行到哪个比例的时候就可以开始为reduce task申请资源 mapreduce.job.reduce.slowstart.completedmaps这个参数如果设置的过低,那么reduce就会过早地申请资源,造成资源浪费;
如果这个参数设置的过高,比如为1,那么只有当map全部完成后,才为reduce申请资源,开始进行reduce操作,实际上是串行执行,不能采用并行方式充分利用资源。 如果map数量比较多,一般建议提前开始为reduce申请资源。
二、hive任务优化
1.分区裁剪
1.查询涉及分区表时,限制分区范围
2.使用to_unix_timestamp代替unix_timestamp(),避免全表扫描
2.列裁剪
只读取查询中需要用到的列,忽略其他不关心的列
Select * from table_test;
Select field_1,field_2,… from table_test;
Select * 跟select 所有字段是否一样?(网络IO,索引)
3.合理设置map、reduce个数
Map数: splitSize=Math.max(minSize, Math.min(maxSize, blockSize))
reduce数: reducers = Math.min(maxReducers, totalInputFileSize/bytesPerReducer)
# 根据任务运行效率,调整map reduce处理数据量大小
4.group by 优化
set hive.map.aggr=true;
select id,count(1) from test group by id;
set hive.groupby.skewindata = true;
• 先不按GroupBy字段分发,随机分发做一次聚合
• 额外启动一轮job,拿前面聚合过的数据按GroupBy字段分发再算结果
5.join优化
大表跟小表之间join时,可打开mapjoin,将小表加载到内存中
set hive.mapjoin.smalltable.filesize 25M
set hive.auto.convert.join = true;
ps:不能只看文件大小,决定使用使用mapjoin,容易导致OOM(字段、过滤、去重后的记录数跟文件大小) --map端join把小表读入内存
set hive.exec.parallel=true;
select /*+mapjoin(t2)*/
t1.vendor_cd,
t2.vendor_cd
from (select vendor_cd
from tmp_tt
) t1
left outer join
(select vendor_cd
from tmp_tt
limit 10
) t2
on t1.vendor_cd=t2.vendor_cd
limit 100; --控制map数,并且用mapjoin实现笛卡尔积
set mapred.reduce.tasks=10;
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; --不进行小文件合并
set hive.exec.parallel=true;
select /*+mapjoin(t2)*/
t1.vendor_cd,
t2.vendor_cd
from (select vendor_cd
from tmp_tt
distribute by vendor_cd
) t1
left outer join
(select vendor_cd
from tmp_tt
distribute by vendor_cd
) t2
limit 100;
6.数据倾斜
--特殊倾斜值的处理(null值很多的时候)
set hive.exec.parallel=true;
select t1.vendor_cd,
t2.vendor_cd
from (select vendor_cd
from tmp_tt
) t1
left outer join
(select vendor_cd
from tmp_tt
) t2
on nvl(t1.vendor_cd,concat('hive_',rand()))=t2.vendor_cd
limit 100;
--当心关联的类型是否一致,类型不一致可能会导致数据倾斜或者算出意想不到的结果
set hive.exec.parallel=true;
select t1.vendor_cd,
t2.vendor_cd
from (select vendor_cd //int类型
from tmp_tt
) t1
left outer join
(select vendor_cd //string类型
from tmp_tt
) t2
on cast(t1.vendor_cd as string)=t2.vendor_cd
limit 100;
hive参数配置及任务优化的更多相关文章
- hive参数配置详细
hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...
- hive参数配置
CLI参数 两种修改方式: 1)启动时 hive --hiveconf hive.cli.print.current.db=true 2)修改当前用户home目录下 .hiverc文件,hive c ...
- Hive命令行及参数配置
1 . Hive 命令行 输入$HIVE_HOME/bin/hive –H 或者 –help 可以显示帮助选项: 说明: 1. -i 初始化 HQL 文件. 2. -e 从命令行执行指定的 HQL ...
- Mysql性能优化之参数配置(转)
前言: Mysql作为数据库中广泛应用的开源产品,需要面对不同的生产压力,而有些性能问题通过配置优化就可以得到解决,优化可以分为几个方向:1.优化参数配置.2.优化数据库索引.3.优化数据库结构,如分 ...
- [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。
背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...
- java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置
过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器.还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置. G1回收器 G1 (Garbage-First)是一款面向服务器的垃 ...
- Hive 教程(五)-参数配置
配置基本操作 hive> set; 查看所有配置hive> set key: 查看某个配置hive> set key value: 设置某个配置 我们可以看到一些 hadoop 的配 ...
- Hive设置配置参数的方法,列举8个常用配置
Hive设置配置参数的方法 Hive提供三种可以改变环境变量的方法,分别是: (1).修改${HIVE_HOME}/conf/hive-site.xml配置文件: (2).命令行参数: (3).在已经 ...
- Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.nginx 原理与优化参数配置 master-workers 的机制的好处 首先,对于每个 ...
随机推荐
- hbase搭建
0. 软件版本下载 http://mirror.bit.edu.cn/apache/hbase/ 1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 S ...
- layui前端框架
项目中需要弹出层效果,使用了layui前端框架,主要使用了里面的弹出层特效(可以移动) html代码 要给这个标签绑定click方法 <a href='javascript:;' data-me ...
- log4j 知识点
什么是log4j? log4j 是一个帮助程序员将日志语句输出到各种输出目标的工具. log4j 包的设计使得日志语句可以保留在已发布的代码中,而不会产生高性能成本. log4j 使用分层记录器可以有 ...
- Confluence 6 内存使用和需求和一些问题
系统备份和恢复 Confluence 的备份和恢复是与数据库中数据量的大小有关.这个操作可能会对 Confluence 的性能产生很多关键性的影响并且大量消耗内存.如果你在 Confluence 的 ...
- Confluence 6 创建-使用-删除快捷链接
创建快捷链接 如何创建一个快捷键链接: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧面板中选择 快捷链接(Shortcut Links). 为 ...
- mongoDB基础使用
环境交代 操作系统: CentOS 6.8 64位 mongodb: 4.06 安装 官方下载地址:https://www.mongodb.org/dl/linux/x86_64-rhel62 阿里云 ...
- linux之xxx 不在 sudoers 文件中,此事将被报告(转载)
linux中创建用户命令为:useradd 用户名, eg: useradd test 指定密码:passwd test 但是有时候我们需要使用test运行执行一些root用户才有权限执行的命令,此时 ...
- 1010:Tempter of the Bone
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Problem Description The doggie found a bone in a ...
- LeetCode(89):格雷编码
Medium! 题目描述: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以 0 开头. 例如,给定 ...
- C#概念总结(三)
1.定义结构体 定义了结构体,必须使用了stuct语句,struct定义了一个带有多个成员的的新数据类型.C# 的结构不同于C的.具有一下等特点: 结构可以有方法.字段.索引.属性.运算方法和事件.结 ...