概述

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。因此,
Hive 并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

Hive调优

Hive执行HQL最终转换的还是执行MapReduce的Job任务执行,可以在MapReduce阶段进行性能调优
开启Map阶段压缩

开启输出压缩功能
set hive.exec.compress.intermediate=true; 
开启map输出压缩功能:
set mapreduce.map.output.compress=true; 
设置压缩方式:
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

开启reduce输出端压缩

开启最终输出压缩功能
set hive.exec.compress.output=true;
开启最终数据压缩功能
set mapreduce.output.fileoutputformat.compress=true;
设置压缩方式
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
设置块压缩
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

Hive存储

Hive存储格式:TextFile/SequenceFile/orc/Parquet 
orc:Index Data/row Data/stripe Footer

HQL之Group by优化
分组:mr程序,map阶段把相同key的数据分发给一个reduce,一个key的量很大。出现数据倾斜

在map端进行聚合(combiner)
 set hive.map.aggr=true;
设置负载均衡
set hive.groupby.skewindata=true;

数据倾斜

合理避免数据倾斜
合理设置map数
合并小文件
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 
合理设置reduce数
在map端进行聚合(combiner)
 set hive.map.aggr=true;
设置负载均衡
set hive.groupby.skewindata=true;

JVM重用
修改 Hadoop配置文件mapred-site.xml 参数属性设置

mapreduce.job.jvm.numtasks 
15