Hive参数

  1. Map相关参数
set mapred.max.split.size = 256000000 ; //最大分割
set mapred.min.split.size=1 ; //最小分割
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; //Map端输入、合并文件之后按照block的大小分割(默认)
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; //Map端输入,不合并 一个文件起一个Map
set hive.mapjoin.maxsize=1000000; //Map Join 所处理的最大的行数。超过此行数,Map Join进程会异常退出  
set hive.merge.mapfiles = true ;//是否开启合并 Map 端输出小文件
set hive.merge.mapredfiles = false ;//是否开启合并 Map/Reduce 端输出小文件

  2. Reduce参数配置

set mapred.reduce.tasks=-1 ; //设置Reduce的个数,-1为默认,表示由hive自动分配管理

3. 并行计算参数

set hive.exec.parallel=true;  //无关的计算可以并行调起JOB  
set hive.exec.parallel.thread.number=8 ; //并发提交时的并发线程的个数

  4. group by 相关

set hive.groupby.skewindata=false ;//决定 group by 操作是否支持倾斜的数据。注意:只能对单个字段聚合

5. 自动分区

set hive.exec.dynamic.partition = false ; // 是否打开动态分区。 
set hive.exec.dynamic.partition.mode = strict ;//打开动态分区后,动态分区的模式,有 strict 和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict 则无此要求。 
set hive.exec.max.dynamic.partitions = 1000; // 所允许的最大的动态分区的个数。 
set hive.exec.max.dynamic.partitions.pernode = 100; //单个 reduce 结点所允许的最大的动态分区的个数。 
set hive.exec.default.partition.name = ‘__HIVE_DEFAULT_PARTITION__‘;//默认的动态分区的名称,当动态分区列为‘‘或者null时,使用此名称。‘‘

6. 笛卡尔积Join

set hive.mapred.mode = strict ;//阻止笛卡尔积    
set hive.mapred.mode = nostrict ;//允许笛卡尔积

7. Map-Side Join

set hive.auto.convert.join = true ; //将小表刷入内存中  
set hive.mapjoin.smalltable.filesize = 2500000 ;//刷入内存表的大小(字节)  
Map Join 的计算步骤分两步,将小表的数据变成hashtable广播到所有的map 端,将大表的数据进行合理的切分,然后在map 阶段的时候用大表的数据一行一行的去探测(probe) 小表的hashtable. 如果join key 相等,就写入HDFS.
map join 之所以叫做map join 是因为它所有的工作都在map 端进行计算.

hive 在map join 上做了几个优化:
hive 0.6 的时候默认认为写在select 后面的是大表,前面的是小表, 或者使用 /*+mapjoin(map_table) */ 提示进行设定. 
hive 0.7 的时候这个计算是自动化的,它首先会自动判断哪个是小表,哪个是大表,这个参数由(hive.auto.convert.join=true)来控制. 然后控制小表的大小由(hive.smalltable.filesize=25000000L)参数控制(默认是25M),当小表超过这个大小,hive 会默认转化成common join. 
你可以查看HIVE-1642.首先小表的Map 阶段它会将自己转化成MapReduce Local Task ,然后从HDFS 取小表的所有数据,将自己转化成Hashtable file 并压缩打包放入DistributedCache 里面.
目前hive 的map join 有几个限制,一个是它打算用BloomFilter 来实现hashtable , BloomFilter 大概比hashtable 省8-10倍的内存, 但是BloomFilter 的大小比较难控制.
现在DistributedCache 里面hashtable默认的复制是3份,对于一个有1000个map 的大表来说,这个数字太小,大多数map 操作都等着DistributedCache 复制.

  8. Skew Join

真实数据中数据倾斜是一定的, hadoop 中默认是使用
hive.exec.reducers.bytes.per.reducer = 1000000000

也就是每个节点的reduce 默认是处理1G大小的数据,如果你的join 操作也产生了数据倾斜,那么你可以在hive 中设定
set hive.optimize.skewjoin = true;
set hive.skewjoin.key = skew_key_threshold (default = 100000)

hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你(处理的总记录数/reduce个数)的2-4倍都可以接受.  
倾斜是经常会存在的,一般select 的层数超过2层,翻译成执行计划多于3个以上的mapreduce job 都很容易产生倾斜,建议每次运行比较复杂的sql 之前都可以设一下这个参数. 如果你不知道设置多少,可以就按官方默认的1个reduce 只处理1G 的算法,那么  skew_key_threshold  = 1G/平均行长. 或者默认直接设成250000000 (差不多算平均行长4个字节)
时间: 2024-11-19 23:09:26

Hive参数的相关文章

hive参数——深入浅出学Hive

第一部分:Hive 参数 hive.exec.max.created.files ?说明:所有hive运行的map与reduce任务可以产生的文件的和 ?默认值:100000 hive.exec.dynamic.partition ?说明:是否为自动分区 ?默认值:false hive.mapred.reduce.tasks.speculative.execution ?说明:是否打开推测执行 ?默认值:true hive.input.format ?说明:Hive默认的input format

Hive参数层面优化之一控制Map数

1.Map个数的决定因素 通常情况下,作业会通过input文件产生一个或者多个map数: Map数主要的决定因素有: input总的文件个数,input文件的大小和集群中设置的block的大小(在hive中可以通过set dfs.block.size命令查看,该参数不能自定义修改): 文件块数拆分原则:如果文件大于块大小(128M),那么拆分:如果小于,则把该文件当成一个块. 举例一: 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和

Hive参数层面优化之二控制Reduce数

Reduce数决定中间或落地文件数,文件大小和Block大小无关. 1.Reduce个数的决定因素 reduce个数的设定极大影响任务执行效率,不指定reduce个数的情况下,Hive会猜测确定一个reduce个数,基于以下两个设定: 参数1:hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G) 参数2:hive.exec.reducers.max(每个作业最大的reduce数,默认为999) 计算reducer数

hive参数详解

第一部分:Hive 参数hive.exec.max.created.files说明:所有hive运行的map与reduce任务可以产生的文件的和默认值:100000 hive.exec.dynamic.partition说明:是否为自动分区默认值:falsehive.mapred.reduce.tasks.speculative.execution说明:是否打开推测执行默认值:truehive.input.format说明:Hive默认的input format默认值: org.apache.h

[Hive] - Hive参数含义详解

hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以及当前hive会话定义的环境变量信息.其中第三种hive参数变量信息中又由hadoop hdfs参数(直接是hadoop的).mapreduce参数.metastore元数据存储参数.metastore连接参数以及hive运行参数构成. Hive-0.13.1-cdh5.3.6参数变量信息详解 参数

Hive参数配置

1. Hive 命令行输入$HIVE_HOME/bin/hive –H 或者 –help可以显示帮助选项:说明:1. -i 初始化HQL文件.2. -e从命令行执行指定的HQL3. -f 执行HQL脚本4. -v 输出执行的HQL语句到控制台5. -p <port> connect to Hive Server on port number6. -hiveconf x=y Use this to set hive/hadoop configuration variables.例如:$HIVE_

Hive参数层面常用优化

1.hive数据仓库权限问题: set hive.warehouse.subdir.inherit.perms=true; 2.HiveServer2的内存 连接的个数越多压力越大,可以加大内存:可以通过-Xmx设置,在脚本中设置:-Xmx=2048m 甚至 -Xmx=4g 3.关闭推测式任务:默认是打开的 set hive.mapred.reduce.tasks.speculative.execution=false; set mapreduce.reduce.speculative=fals

Hive调优(语法与参数层面优化)

一.简介 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商.Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经显得至关重要. 好的架构胜过任何优化,好的Hql同样会效率大增,修改Hive参数,有时也能起到很好的效果. 有了瓶颈才需要优化 1.Hadoop的主要性能瓶颈是IO负载,降IO负载是优化的重头戏. 2.对中间结果的压缩 3.合理设置分区,静态分区和动态分区 二.H

Hive入门到剖析(二)

5 Hive参数 hive.exec.max.created.files 说明:所有hive运行的map与reduce任务可以产生的文件的和 默认值:100000 hive.exec.dynamic.partition 说明:是否为自动分区 默认值:false hive.mapred.reduce.tasks.speculative.execution 说明:是否打开推测执行 默认值:true hive.input.format 说明:Hive默认的input format 默认值: org.a