赞
踩
2、参数项(基于)
参考链接:数据类型_云原生大数据计算服务 MaxCompute-阿里云帮助中心
2.1、参数设置
set hive.exec.dynamic.partition=true; -- 设置为true表示开启动态分区功能(默认为false)
set hive.exec.dynamic.partition.mode=nonstrict; -- 允许所有分区都是动态的,(默认为strict,表示必须保证至少有一个分区是静态的)
set hive.exec.max.dynamic.partitions=10000 -- 允许的最大的动态分区的个数。可以手动增加分区。默认1000
set hive.exec.max.dynamic.partitions.pernode=1000 -- 一个 mapreduce job所允许的最大的动态分区的个数。默认是100
set hive.exec.parallel=true; -- 开启并行运算
set hive.exec.parallel.thread.number=12; -- 表示同时运行的job的个数
set hive.optimize.sort.dynamic.partition=true; -- 每个分区只产生一个文件,可以解决动态分区时的OOM(hadoop内存溢出)问题,但会严重降低reduce处理并写入一个分区的速度
set mapreduce.map.memory.mb = 2304; -- Mapper阶段JVM堆内存溢出参数调优 container的内存
set mapreduce.map.java.opts = -Xmx2048m; -- Mapper阶段JVM堆内存溢出参数调优 表示jvm堆内存,注意是mapreduce不是mapred
set mapreduce.reduce.java.opts=-=-Xmx2048m; -- Reducer:(默认参数,表示jvm堆内存)
set mapreduce.reduce.memory.mb=2304; -- Reducer:(container的内存)
注意:因为在yarn container这种模式下,map/reduce task是运行在Container之中的,所以上面提到的mapreduce.map(reduce).memory.mb大小都大于mapreduce.map(reduce).java.opts值的大小。mapreduce.{map|reduce}.java.opts能够通过Xmx设置JVM最大的heap的使用,一般设置为0.75倍的memory.mb,因为需要为java code等预留些空间
set mapred.job.name = jobname; -- 如果脚本中有多个sql语句,那么你设定jobname后,所有的sql生成的job都会有同一个名字
set mapreduce.job.priority=VERY_HIGH; -- Hadoop 设置任务执行的队列以及优先级 优先级默认有5个:low、 very_low、 norman(默认)、 high、 very_high
set hive.support.concurrency=false; -- 关闭并发(关闭锁机制) 遇到锁报错的时候
常用参数:
set odps.sql.hive.compatible=true; -- 兼容hive
set odps.sql.type.system.odps2=true; -- 兼容新数据类型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY)
set odps.ext.oss.orc.native=true;
set odps.sql.decimal.odps2=true; -- 打开Decimal 2.0数据类型
set odps.service.mode=off ; -- 关闭准实时模式,限制脚本运行时间,默认为Off
set odps.sql.unstructured.oss.commit.mode=true; -- MaxCompute使用分片上传功能,以two-phase commit的方式保证数据的一致性,兼容其他数据处理引擎。
小文件合并参数:
set odps.merge.cross.paths=true; --设置跨路径合并(合并每个路径下的小文件)
set odps.merge.smallfile.filesize.threshold = 256; --设置合并文件的小文件大小阀值,文件大小超过该阀值,则不进行合并,单位为M,可以不设,不设时,则使用全局变量odps_g_merge_filesize_threshold,该值默认为32M,设置时必须大于32M。
set odps.merge.maxmerged.filesize.threshold = 256; --设置合并输出文件量的大小,输出文件大于该阀值,则创建新的输出文件,单位为M,可以不设,不设时,则使用全局变odps_g_max_merged_filesize_threshold,该值默认为256M,设置时必须大于256M。
set odps.sql.allow.fullscan=true; --开启全局扫描
set odps.merge.quickmerge.flag=false; --一般sql task比merge task低1到n个版本,sql产生的文件版本更低,直接用quickmerge可能会产生数据不兼容【解决办法】是关掉quickmerge
set odps.stage.reducer.num=1000; --增加reduce并行数
set odps.stage.mapper.split.size=1024; --调整每个Mapper读取数据的大小为1024 MB(默认256),从而控制map个数。
2.2、explain
HIVE提供了EXPLAIN命令来展示一个查询的执行计划,这个执行计划对于我们了解底层原理,hive 调优,排查数据倾斜等很有帮助
使用语法如下:
EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query
explain 后面可以跟以下可选参数,注意:这几个可选参数不是 hive 每个版本都支持的
EXTENDED:加上 extended 可以输出有关计划的额外信息。这通常是物理信息,例如文件名。这些额外信息对我们用处不大
CBO:输出由Calcite优化器生成的计划。CBO 从 hive 4.0.0 版本开始支持
AST:输出查询的抽象语法树。AST 在hive 2.1.0 版本删除了,存在bug,转储AST可能会导致OOM错误,将在4.0.0版本修复
DEPENDENCY:dependency在EXPLAIN语句中使用会产生有关计划中输入的额外信息。它显示了输入的各种属性
AUTHORIZATION:显示所有的实体需要被授权执行(如果存在)的查询和授权失败
LOCKS:这对于了解系统将获得哪些锁以运行指定的查询很有用。LOCKS 从 hive 3.2.0 开始支持
VECTORIZATION:将详细信息添加到EXPLAIN输出中,以显示为什么未对Map和Reduce进行矢量化。从 Hive 2.3.0 开始支持
ANALYZE:用实际的行数注释计划。从 Hive 2.2.0 开始支持
2.3 hive锁
hive存在两种锁:共享锁Shared(S)、互斥锁Exclusive(X)
只触发S锁允许并发操作;只要一个操作者对表或者分区触发了互斥锁,则该表或者分区不能并发操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。