Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具。
使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,
所以需要去掉原有关系型数据库下开发的一些固有思维。
基本原则:
1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段
select ... from A
join B
on A.key = B.key
where A.userid>10
and B.userid<10
and A.dt='20120417'
and B.dt='20120417';
应该改写为:
select .... from (select .... from A
where dt='201200417'
and userid>10
) a
join ( select .... from B
where dt='201200417'
and userid < 10
) b
on a.key = b.key;
2:尽量原子化操作,尽量避免一个SQL包含复杂逻辑
可以使用中间表来完成复杂的逻辑
drop table if exists tmp_table_1;
create table if not exists tmp_table_1 as
select ......;
drop table if exists tmp_table_2;
create table if not exists tmp_table_2 as
select ......;
drop table if exists result_table;
create table if not exists result_table as
select ......;
drop table if exists tmp_table_1;
drop table if exists tmp_table_2;
3:单个SQL所起的JOB个数尽量控制在5个以下
4:慎重使用mapjoin,一般行数小于2000行,大小小于1M(扩容后可以适当放大)的表才能使用,小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边)。
否则会引起磁盘和内存的大量消耗
5:写SQL要先了解数据本身的特点,如果有join ,group操作的话,要注意是否会有数据倾斜
如果出现数据倾斜,应当做如下处理:
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce个数
set hive.groupby.mapaggr.checkinterval=100000 ;--这个是group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true
set hive.skewjoin.key=100000; --这个是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 应该设置为true
6:如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%
insert overwite table tablename partition (dt= ....)
select ..... from (
select ... from A
union all
select ... from B
union all
select ... from C
) R
where ...;
可以改写为:
insert into table tablename partition (dt= ....)
select .... from A
WHERE ...;
insert into table tablename partition (dt= ....)
select .... from B
WHERE ...;
insert into table tablename partition (dt= ....)
select .... from C
WHERE ...;
相关推荐
深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存
深入浅出Hive企业级架构优化、Hive Sql优化,视频!!!
hiveSQL优化整理版,基于hive2整理,从数据倾斜、表优化、并行、压缩、语法树方面整理
HiveSQL详细和优化,以及部分个人点评 This is a brief tutorial that provides an introduction on how to use Apache Hive HiveQL with Hadoop Distributed File System. This tutorial can be your first step ...
从数据倾斜,jvm重用,语句编写等方面对hive查询进行优化。
Hive思维导图之Hive优化
Hive SQL性能优化
Hive与SQL优化.md
1、MapReduce实现基本SQL操作的原理 ...2.4 Phase4 逻辑层优化器 ........... 2.5 Phase5 OperatorTree生成MapReduce Job的过程 2.5.1 对输出表生成MoveTask .......... 2.5.9 OperatorTree生成MapReduceTask全貌
大数据hive数据倾斜,hive-sql优化
Hive原理/Hive SQL/Hive 函数/数据仓库分层和建模/Hive sql优化/数据倾斜
和HIVE SQL优化。 1、适合学习对象: 数据仓库IT人员 数据分析人员 对Hive及分布式系统有一定基础的学员 2、课程目标: 希望授课对象能够掌握数据仓库工具Hive的高级语法、Hive性能调优等的相关知识 具备在...
作为企业Hadoop应用的核心产品,Hive承载着FaceBook、淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive...本系列课结合企业实战和场景从作业架构层面、Hql(Hive sql)语法层面、Hive参数层面依次讲述。
Hive优化以及执行原理,一位前辈总结的hive知识,个人觉得非常有用,资源难找,现在贡献给大家,独乐乐不如众乐乐。
二万字讲解HiveSQL技术原理、优化与面试.pdf
hiveSQL常见语句的性能分析和优化,关于mapreduce介绍
利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...
1、Hive是基于Hadoop的一个数据仓库系统,在...对这一过程的理解不仅帮助我们解决了一些Hive的bug,也有利于我们优化HiveSQL,提升我们对Hive的掌控力,同时有能力去定制一些需要的功能。详细讲解SQL编译为MapReduce之
hive 优化经典。pdf文档。 讨论常见的hive执行瓶颈,对sql的写法和效率较低的情况进行分析和调优