参考:http://blog.csdn.net/beckham008/article/details/23741151?utm_source=tuicool&utm_medium=referral
1.设置合理solt数
.设置任务名称,方便查找监控
.决定是否可以在 Map 端进行聚合操作
.有数据倾斜的时候进行负载均衡
iveQL 去重操作
SQL一样,HiveQL中同样支持DISTINCT操作,如下示例:
1) SELECT count(DISTINCT uid) FROM log
2) SELECT ip, count(DISTINCT uid) FROM log GROUP BY ip
3) SELECT ip, count(DISTINCT uid, uname) FROMlog GROUP BY ip
4) SELECT ip, count(DISTINCTuid), count(DISTINCT uname) FROMlog GROUP BY ip
我们使用Hive QL中的去重关键字DISTINCT时,需要注意的一点是:
多个列上进行的去重操作与hive环境变量hive.groupby.skewindata存在关系。
hive.groupby.skewindata=true时,hive不支持多列上的去重操作,并报错:
rror in semantic analysis: DISTINCT on different columns notsupported with skew in data.
意:上面示例中的(3)不属于多列上的DISTINCT操作。
roup By 语句
- Map 端部分聚合:
- 并不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端进行部分聚合,最后在 Reduce端得出最终结果。
- 基于 Hash
- 参数包括:
- hive.map.aggr = true 是否在 Map 端进行聚合,默认为True
- hive.groupby.mapaggr.checkinterval =100000 在 Map 端进行聚合操作的条目数目
- 有数据倾斜的时候进行负载均衡
- hive.groupby.skewindata = false
- 当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group ByKey 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce中),最后完成最终的聚合操作。
.每个MapReduce作业的任务可以申请的内存资源数量
个MapReduce作业的map任务可以申请的内存资源数量
个MapReduce作业的reduce任务可以申请的内存资源数量
5.对于简单的不需要聚合的类似SELECT <col> from <table> LIMIT n语句,不需要起MapReduce job,直接通过Fetch task获取数据
username,默认APP;
password,默认mine;
是否支持并发访问metastore,默认是true;
使用连接池来访问JDBC metastore,默认是DBCP;
检查是否存在表的schema,默认是false;
检查是否存在列的schema,默认false;
检查是否存在constraint的schema,默认false;
元数据存储类型,默认rdbms;
在不存在时是否自动创建必要的schema,默认是true;
如果元数据表不正确,抛出异常,默认是checked;
默认的事务隔离级别,默认是read-committed;
使用二级缓存,默认是false;
二级缓存的类型,有两种,SOFT:软引用,WEAK:弱引用,默认是SOFT;
id工厂生产表和列名的名字,默认是datanucleus;
当plugin被发现并且重复时的行为,默认是LOG;
非安全模式,设置为true会令metastore以客户端的用户和组权限执行DFS操作,默认是false,这个属性需要服务端和客户端同时设置;
metastore的事件监听器列表,逗号隔开,默认是空;
:当新建分区时自动继承的key列表,默认是空;
metastore函数执行结束时的监听器列表,默认是空;
metastore函数执行结束时的监听器列表,默认是空;
事件表中事件的过期时间,默认是0;
metastore中清理过期事件的定时器的运行周期,默认是0;
创建metastore连接时的重试次数,默认是5;
创建metastore连接时的失败重试次数,默认是3;
客户端在连续的重试连接等待的时间,默认1;
客户端socket超时时间,默认20秒;
原始metastore的存储实现类,默认是org.apache.hadoop.hive.metastore.ObjectStore;
在一个batch获取中,能从metastore里取出的最大记录数,默认是300,集群设置值是1000;
Hive 是否检查输出的文件格式。默认true;
•
说明:
决定是否可以在 Map 端进行聚合操作,默认true;
•
说明:
决定 group by 操作是否支持倾斜的数据。默认是false;
•说明:这个应该是如果一张表的查询用到相同的distinct字段,可以写成如下格式:
•
说明:对
于 Group By 操作的 Map 聚合的检测时间,以毫秒为单位。默认100000
•
说明:
Mapper/Reducer 在本地模式的最大内存量,以字节为单位,0为不限制。 默认0。
map端聚合时hash表的内存占比,该设置约束group by在map join后进行,否则使用hive.map.aggr.hash.percentmemory来确认内存占比,默认值0.3;
map端聚合时hash表的最大可用内存,如果超过该值则进行flush数据,默认是0.9;
map端聚合时hash表所占用的内存比例,默认0.5,这个在map端聚合开启后使用。
Hive Map 端聚合的哈稀存储的最小 reduce 比例。默认0.5;
:自动使用索引,默认不开启false;
:是否使用聚集索引优化group-by查询,默认关闭false;
:是否支持谓词下推,默认开启;所谓谓词下推,将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块(例如视图),从而能够提早进行数据过滤以及有可能更好地利用索引。
:谓词下推开启时,谓词是否下推到存储handler,默认开启,在谓词下推关闭时不起作用;
:在等值join条件下是否产地重复的谓词过滤器,默认开启;
:在做分区和表查询时是否做分桶group by,默认开启true;
将多个group by产出为一个单一map/reduce任务计划,当然约束前提是group by有相同的key,默认是false;
在发出join结果之前对join最右操作缓存多少行的设定,默认1000;hive jira里有个对该值设置太小的bugfix;
在做表join时缓存在内存中的行数,默认25000;
在做表smb (smb不知道是啥,Sort-Merge-Bucket
) join时缓存在内存中的行数,默认10000
;
•说明:
是否开启数据倾斜的join优化,默认不开启false;
•说明:
判断数据倾斜的阈值,如果在join中发现同样的key超过该值则认为是该key是倾斜的join key,默认是100000;
在数据倾斜join时map join的map数控制,默认是10000;
数据倾斜join时map join的map任务的最小split大小,默认是33554432,该参数要结合上面的参数共同使用来进行细粒度的控制;
hive操作执行时的模式,默认是nonstrict非严格模式,如果是strict模式,很多有风险的查询会被禁止运行,比如笛卡尔积的join和动态分区;
当用户调用transform或者map或者reduce执行脚本时,最大的序列化错误数,默认100000,一般也不用修改;
hive是否允许脚本不从标准输入中读取任何内容就成功退出,默认关闭false;
在用户使用transform函数做自定义map/reduce时,存储唯一的脚本标识的环境变量的名字,默认HIVE_SCRIPT_OPERATOR_ID;
一个查询的最后一个map/reduce任务输出是否被压缩的标志,默认为false,但是一般会开启为true,好处的话,节省空间不说,在不考虑cpu压力的时候会提高io;
类似上个,在一个查询的中间的map/reduce任务输出是否要被压缩,默认false;
hive的执行job是否并行执行,默认不开启false,在很多操作如join时,子查询之间并无关联可独立运行,这种情况下开启并行运算可以大大加速;
是否提供行偏移量的虚拟列,默认是false不提供,Hive有两个虚拟列:一个是INPUT__FILE__NAME,表示输入文件的路径,另外一个是BLOCK__OFFSET__INSIDE__FILE,表示记录在文件中的块偏移量,这对排查出现不符合预期或者null结果的查询是很有帮助的;
控制hive是否在执行过程中周期性的更新任务进度计数器,开启这个配置可以帮助job tracker更好的监控任务的执行情况,但是会带来一定的性能损耗,当动态分区标志hive.exec.dynamic.partition开启时,本配置自动开启;
hive在web接口是的war文件的路径,默认是lib/hive-hwi-xxxx(version).war;
hwi监听的host地址,默认是0.0.0.0;
hwi监听的端口,默认是9999;
执行前置条件,一个用逗号分隔开的实现了org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext接口的java class列表,配置了该配置后,每个hive任务执行前都要执行这个执行前钩子,默认是空;
做count的job的统计发布类列表,由逗号隔开,默认是空;必须实现org.apache.hadoop.hive.ql.stats.ClientStatsPublisher接口;
在只有map的作业结束时合并小文件,默认开启true;
在一个map/reduce作业结束后合并小文件,默认不开启false;
作业结束时合并文件的大小,默认256MB;
在作业输出文件小于该值时,起一个额外的map/reduce作业将小文件合并为大文件,小文件的基本阈值,设置大点可以减少小文件个数,需要mapfiles和mapredfiles为true,默认值是16MB;
输入表文件的mapjoin阈值,如果输入文件的大小小于该值,则试图将普通join转化为mapjoin,默认25MB;
mapjoin本地任务执行时hash表容纳key/value的最大量,超过这个值的话本地任务会自动退出,默认是0.9;
类似上面,只不过是如果mapjoin后有一个group by的话,该配置控制类似这样的query的本地内存容量上限,默认是0.55;
在运算了多少行后执行内存使用量检查,默认100000;
根据输入文件的大小决定是否将普通join转换为mapjoin的一种优化,默认不开启false;
多个mapjoin转换为1个时,所有小表的文件大小总和的最大值。
:默认false。hive的transform/map/reduce脚本执行时是否自动的将进度信息发送给TaskTracker来避免任务没有响应被误杀,本来是当脚本输出到标准错误时,发送进度信息,但是开启该项后,输出到标准错误也不会导致信息发送,因此有可能会造成脚本有死循环产生,但是TaskTracker却没有检查到从而一直循环下去;
:
http://blog.csdn.net/skywalker_only/article/details/38335235
默认值为binary(TCP),可选值HTTP。
HTTP的监听端口,默认值为10001。
服务的端点名称,默认为 cliservice。
服务池中的最小工作线程,默认为5。
服务池中的最小工作线程,默认为500。
写数据到脚本时的默认writer,默认org.apache.hadoop.hive.ql.exec.TextRecordWriter;
:输入格式,默认是org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,如果出现问题,可以改用org.apache.hadoop.hive.ql.io.HiveInputFormat; 这个你们应该熟悉哦
UDTF执行时hive是否发送进度信息到TaskTracker,默认是false;
reduce任务推测执行是否开启,默认是true;
运行中job轮询JobTracker的时间间隔,设置小会影响JobTracker的load,设置大可能看不出运行任务的信息,要去平衡,默认是1000;
每次检查作业的进度时是否记录计划的进度到日志中。这些日志保存在hive.querylog.location指定的位置(Hive-0.10版本开始)。
数据分桶是否被强制执行,默认false,如果开启,则写入table数据时会启动分桶。
开启强制排序时,插数据到表中会进行强制排序,默认false;
ive.auto.convert.sortmerge.join.bigtable.selection.policy:
查找JDO连接url时hook的名字,默认是javax.jdo.option.ConnectionURL;
当出现连接错误时重试连接的次数,默认是1次;
metastore重试连接的间隔时间,默认1000毫秒;
在thrift服务池中最小的工作线程数,默认是200;
最大线程数,默认是100000;
metastore的server是否开启长连接,长连可以预防半连接的积累,默认是true;
metastore thrift接口的安全策略,开启则用SASL加密接口,客户端必须要用Kerberos机制鉴权,默认是不开启false;
metastore thrift接口将会使用TFramedTransport。
在开启sasl后kerberos的keytab文件存放路径,默认是空;
zk的token存储连接串,默认是localhost:2181;
token存储的节点跟路径,默认是/hive/cluster/delegation;
在cache中支持的metastore的对象类型,由逗号分隔,默认是Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order;
如果数据已经根据相同的key做好聚合,那么去除掉多余的map/reduce作业,此配置是文档的推荐配置,建议打开,默认是true;
在DML/DDL中是否支持动态分区,默认false;
默认strict,在strict模式下,动态分区的使用必须在一个静态分区确认的情况下,其他分区可以是动态;
动态分区的上限,默认1000;
每个mapper/reducer节点可以创建的最大动态分区数,默认100;
当动态分区启用时,如果数据列里包含null或者空字符串的话,数据会被插入到这个分区,默认名字是__HIVE_DEFAULT_PARTITION__;
一个mapreduce作业能创建的HDFS文件最大数,默认是100000;
存储hive临时统计信息的数据库,默认是jdbc:derby;
在insert overwrite命令时自动收集统计信息,默认开启true;
数据库临时存储hive统计信息的jdbc驱动;
如果dbclass不是jdbc或者hbase,那么使用这个作为默认发布,必须实现StatsPublisher接口,默认是空;
jdbc连接超时配置,默认30秒;
当统计发布合聚集在更新数据库时出现异常时最大的重试次数,默认是0,不重试;
重试次数之间的等待窗口,默认是3000毫秒;
hive是否支持并发,默认是false,支持读写锁的话,必须要起zookeeper;
获取锁时尝试的重试次数,默认是100;
获取解锁时尝试的重试次数,默认是100;
在重试间隔的睡眠时间,默认60秒;
zk地址列表,默认是空;
zk服务器的连接端口,默认是2181;
zk客户端的session超时时间,默认是600000;
在所有zk节点创建后的父节点,默认是hive_zookeeper_namespace;
在session结束时清除所有额外node;
访问Hadoop Archives的实现类,低于hadoop 0.20版本的都不兼容,默认是org.apache.hadoop.hive.shims.HiveHarFileSystem;
是否允许归档操作,默认是false;
FetchTask序列化fetch输出时需要的SerDe,默认是org.apache.hadoop.hive.serde2.DelimitedJSONSerDe;
是否由hive决定自动在local模式下运行,默认是false;
在drop表或者视图时如果发现表或视图不存在,是否报错,默认是true;
在作业失败时是否提供一个任务debug信息,默认true;
运行自动progressor的时间间隔,默认是0等价于forever;
写入hbase时是否强制写wal日志,默认是true;
新建表的属性字段默认值,默认是empty空;
是否支持变量替换,如果开启的话,支持语法如${var} ${system:var}和${env.var},默认是true;
hive客户端是否认证,默认是false;
:metastore的认证管理类,默认是org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider;用户定义的必须实现org.apache.hadoop.hive.ql.security.authorization.HiveMetastoreAuthorizationProvider接口;接口参数要包含org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider接口;使用HDFS的权限控制认证而不是hive的基于grant的方式;
:hive客户端授权的管理类,默认是org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator;用户定义的需要实现org.apache.hadoop.hive.ql.security.HiveAuthenticatorProvider;
metastore端的授权管理类,默认是org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator,自定义的必须实现org.apache.hadoop.hive.ql.security.HiveAuthenticatorProvider接口;
当表创建时自动授权给用户,默认是空;
同上,自动授权给组,默认是空;
同上,自动授权给角色,默认是空;
同上,自动授权给owner,默认是空;
在做类似drop partition操作时,metastore是否要认证权限,默认是false;
在遇到结果为空的动态分区时是否报错,默认是false;
在索引文件中存储的hdfs地址将在运行时被忽略,如果开启的话;如果数据被迁移,那么索引文件依然可用,默认是false;
压缩索引自动应用的最小输入大小,默认是5368709120;
同上,相反含义,如果是负值代表正无穷,默认是-1;
一个使用压缩索引做的查询能取到的最大数据量,默认是10737418240 个byte;负值代表无穷大;
使用压缩索引查询时能读到的最大索引项数,默认是10000000;负值代表无穷大;
在索引表中是否开启二分搜索进行索引项查询,默认是true;
在导入导出数据时提供的一个白名单列表,列表项之间由逗号分隔,默认hdfs,pfile;
控制是否在查询时加锁,默认是false;
字面意思理解就是在使用limit做数据的子集查询时保证的最小行数据量,默认是100000;
使用简单limit查询数据子集时,可抽样的最大文件数,默认是10;
使用简单limit抽样数据时是否开启优化选项,默认是false,关于limit的优化问题,在hive programming书中解释的是这个feature有drawback,对于抽样的不确定性给出了风险提示;
使用简单limit抽样数据允许的最大行数,默认50000,查询query受限,insert不受影响;
是否重做mapreduce,默认是false;
如果设置为true,那么在做ALTER TABLE tbl_name CONCATENATE on a table/partition(有索引) 操作时,抛出错误;可以帮助用户避免index的删除和重建;
用来区分抽样的数字,默认是0;
io异常处理handler类列表,默认是空,当record reader发生io异常时,由这些handler来处理异常;
服务principal的keytab。默认空。
LDAP的URL。默认空。
基于DN的LDAP。默认空。
匿名连接用户,默认true。
- 压缩
Q22 | Q23 | Q24 | |
未压缩 | 2m9.787s | 14m19.011s | 4m41.635s |
压缩 | 2m22.371s | 13m57.379s | 4m43.945s |
|
Q22
|
Q23
|
Q24
|
未压缩
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
压缩
|
2m14.084s
|
13m48.921s
|
4m40.755s
|
结论:
性能未见明显提升
- Mapper settings
set mapred.max.split.size=67108864;
|
Q22
|
Q23
|
Q24
|
8388608 (8MB)
|
1m40.767s
|
9m54.701s
|
4m54.342s
|
16777216 (16MB)
|
1m44.801s
|
10m45.015s
|
4m41.974s
|
33554432 (32MB)
|
2m0.222s
|
12m43.198s
|
4m36.464s
|
67108864 (64MB)
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
134217728 (128MB)
|
2m51.450s
|
16m3.758s
|
4m43.410s
|
10G Data, Q22/Q23 随着mapred.max.split.size的减小而性能提升,Q24无明显性能提升
- Reducer Settings
set hive.exec.reducers.bytes.per.reducer=256000000;
|
Q22
|
Q23
|
Q24
|
128000000
|
2m7.526s
|
13m44.007s
|
4m42.296s
|
256000000
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
512000000
|
2m7.969s
|
13m45.184s
|
4m39.975s
|
性能未见明显提升
从日志看,reducer数量远小于999,因此配置这个对性能影响应该不会太大。
- join
a.
set hive.auto.convert.join=true;
Q22 | Q23 | Q24 | |
True | 2m9.787s | 14m19.011s | 4m41.635s |
False | 9m44.347s | 45m1.006s | 5m23.501s |
结论:
Enable这个属性能够显著提高性能。
set hive.auto.convert.join.noconditionaltask = true;set hive.auto.convert.join.noconditionaltask.size = 10000000;
解释:hive.auto.convert.join.noconditionaltask.size表明可以转化为MapJoin的表的大小总合。例如有A、B两个表,他们的大小都小于该属性值,那么他们都会都会分别被转化为MapJoin,如果两个表大小总和加起来也小于该属性值,那么这两个表会被合并为一个MapJoin。
测试:
1.
set hive.auto.convert.join=false;
set hive.auto.convert.join.noconditionaltask = true;
Q22 | Q23 | Q24 |
9m22.254s | 44m56.032s | 5m26.398s |
2.
Q22
|
Q23
|
Q24
|
9m5.161s
|
18m6.333s
|
4m45.650s
|
3.
set hive.auto.convert.join=True;
|
Q22
|
Q23
|
Q24
|
10000 (10K)
|
9m17.021s
|
16m8.071s
|
4m46.207s
|
10000000 (10M Default)
|
2m11.891s
|
13m38.050s
|
4m33.742s
|
100000000 (100M)
|
1m34.005s
|
10m43.252s
|
4m39.885s
|
1000000000 (1G)
|
1m30.704s
|
10m49.992s
|
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:229)
at org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask.executeInProcess(MapredLocalTask.java:349)
at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.main(ExecDriver.java:744)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Execution failed with exit status: 1
Obtaining error information
Task failed!
|
1000000000 (1G)
export HADOOP_CLIENT_OPTS=”-Xmx2g”
|
1m35.893s
|
10m45.741s
|
10m26.837s
|
结论:
hive.auto.convert.join会覆盖hive.auto.convert.join.noconditionaltask
2)
第二个测试说明需要将两个都设为True
hive.auto.convert.join.noconditionaltask.size应该设置的较大一点
4 )
Job 数目变少了
该属性对性能没有多少影响
|
Q22
|
Q23
|
Q24
|
Undefined
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
True
|
Query returned non-zero code: 1, cause: hive configuration hive.optimize.mapjoin.mapreduce does not exists.
|
|
|
结论:
出错
|
Q22
|
Q23
|
Q24
|
0
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
1024
|
2m11.625s
|
13m41.085s
|
4m39.853s
|
结论:
性能未见明显提升
- SMB Map Join
set hive.auto.convert.sortmerge.join.noconditionaltask=true; //此属性不存在
Sort-Merge-Bucket (SMB) joins可以被转化为SMB Map Join。这种join归结于将已排好序的表进行合并,使得该操作比传统的map join更加快速。但是如果表是划分表,速度会慢上一些,因为每一个mapper都需要获取一个划分的一小块,这些小块具有一个单一的key。
|
Q22
|
Q23
|
Q24
|
Origin
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
After
|
2m12.891s
|
13m50.629s
|
4m39.853s
|
结论:
性能未见明显提升
- Skewjoin
hive.optimize.skewjoin=false
|
Q22
|
Q23
|
Q24
|
Origin
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
After
|
FAILED: ParseException line 2:4 missing KW_ROLE at ‘hive’ near ‘hive’
line 2:8 missing EOF at ‘.’ near ‘hive’
|
|
|
hive.groupby.skewindata=false
Q22 | Q23 | Q24 | |
False | 2m9.787s | 14m19.011s | 4m41.635s |
True | 2m48.965s | 17m2.289s | 5m59.542s |
结论:
性能显著下降
- 并行
hive.exec.parallel=false
解释:是否并行的执行job以及并行执行job的最大数量
测试:
|
Q22
|
Q23
|
Q24
|
False
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
True
|
2m16.959s
|
9m32.682s
|
3m12.682s
|
结论:
Q23/Q24性能显著提升,Q22未见明显提升
- 其他
hive.optimize.ppd.storage=true
|
Q22
|
Q23
|
Q24
|
False
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
True
|
2m13.427s
|
14m7.106s
|
4m50.376s
|
结论:
性能未见明显提升
Q22 | Q23 | Q24 | |
False | 2m9.787s | 14m19.011s | 4m41.635s |
True | 2m15.132s | 14m10.505s | 4m49.860s |
结论:
性能未见明显提升
Q22 | Q23 | Q24 | |
1M | 2m17.173s | 14m11.657s | 4m57.931s |
5M | 2m9.787s | 14m19.011s | 4m41.635s |
10M | 2m15.576s | 14m20.439s | 5m0.655s |
结论:
性能未见明显提升
- 综合性能提升配置:
True
;
false
True
10G Data:
|
Q22
|
Q23
|
Q24
|
Origin
|
2m9.787s
|
14m19.011s
|
4m41.635s
|
After
|
1m20.856s (37.7% up) |
7m22.865s (48.4% up)
|
3m42.101s (21.1 % up)
|
|
Q22
|
Q23
|
Q24
|
Origin
|
20m8.207s
|
24m50.490s
|
12m47.515s
|
|
Q22
|
Q23
|
Q24
|
8388608 (8MB)
|
10m57.554s
|
40+m
|
(
skip ) |
16777216 (16MB)
|
7m27.275s
|
40+m
|
(skip)
|
33554432 (32MB)
|
6m9.236s
|
36m27.416s
|
(skip)
|
67108864 (64MB default)
|
5m36.872s
|
31m55.655s
|
远大于12min
|
134217728 (128MB)
|
4m49.397s
|
29m44.575s
|
20m17.109s
|
268435456 (256MB)
|
5m43.634
|
skip
|
skip |
set mapred.max.split.size=
134217728
;
hive.auto.convert.join.noconditionaltask.size=
; (export HADOOP_CLIENT_OPTS=”-Xmx2g”)
|
Q22
|
Q23
|
Q24
|
10M(default)
|
40min+
|
|
|
100M
|
4m49.397s
|
29m44.575s
|
20m17.109s
|
500M
|
4m57.060s
|
29min左右
|
同上
|
1G (export HADOOP_CLIENT_OPTS=”-Xmx2g”) |
4m56.741s
|
29min左右
|
同上
|
True
;
false
True
|
Q22
|
Q23
|
Q24
|
Origin
|
44m56.835s
|
45m18.217s
|
34m43.947s
|
After
|
4m49.397s |
29m44.575s
|
20m17.109s
|
Q22 | Q23 | Q24 | |
Origin | 23m7.372s | 26m49.460s | 15m57.590s |
After | 2m31.808 (89% up) | 18m18.278s (31.8% up) | 12m55.900s (19.0% up) |
Map Reduce数量相关
- 1
- 2
- 3
set mapreduce.input.fileinputformat.split.maxsize=750000000;
- 1
- 2
- 3
set hive.exec.reducers.bytes.per.reducer=629145600;
- 1
- 2
set hive.tez.auto.reducer.parallelism = true;
执行计划相关
- 1
- 2
set hive.execution.engine=mr;
- 1
- 2
set hive.cbo.enable=true;
- 1
- 2
set hive.optimize.reducededuplication=true;
- 1
- 2
set hive.optimize.reducededuplication.min.reducer=4;
- 1
- 2
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask=true;
- 1
- 2
set hive.smbjoin.cache.rows=10000;
- 1
- 2
set hive.auto.convert.join.noconditionaltask.size=894435328;
- 1
- 2
- 3
- 4
- 5
set hive.map.aggr=false;
- 1
- 2
set hive.map.aggr.hash.percentmemory=0.5;
- 1
- 2
set hive.fetch.task.conversion=more;
set hive.fetch.task.conversion.threshold=1073741824;
- 1
- 2
set hive.fetch.task.aggr=false;
- 1
- 2
set hive.optimize.bucketmapjoin= false;
set hive.optimize.bucketmapjoin.sortedmerge=false;
- 1
- 2
- 3
- 4
set hive.vectorized.execution.enabled=false;
set hive.vectorized.execution.reduce.enabled=false;
set hive.vectorized.groupby.checkinterval=4096;
set hive.vectorized.groupby.flush.percent=0.1;
动态分区相关
- 1
- 2
set hive.optimize.sort.dynamic.partition=false;
- 1
- 2
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
小文件相关
- 1
- 2
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.tezfiles=true;
set hive.merge.sparkfiles=false;
set hive.merge.size.per.task=536870912;
set hive.merge.smallfiles.avgsize=536870912;
set hive.merge.orcfile.stripe.level=true;
ORC相关
https://orc.apache.org/docs/hive-config.html
- 1
- 2
set hive.orc.splits.include.file.footer=false;
- 1
- 2
set hive.exec.orc.default.stripe.size=67108864;
统计相关
- 1
- 2
set hive.stats.autogather=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;
- 1
- 2
ANALYZE TABLE COMPUTE STATISTICS;
ANALYZE TABLE COMPUTE STATISTICS for COLUMNS;
ANALYZE TABLE partition (coll=”x”) COMPUTE STATISTICS for COLUMNS;
其他
- 1
- 2
set hive.limit.pushdown.memory.usage=0.1;
- 1
- 2
set hive.optimize.index.filter=true;
- 1
- 2
set mapreduce.input.fileinputformat.list-status.num-threads=5;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14391.html