hive 简单优化

基本语法

基本数据类型

hive支持多种不同长度的整型和浮点型数据,支持布尔型,也支持无长度限制的字符串类型。例如:TINYINT、SMALINT、BOOLEAN、FLOAT、DOUBLE、STRING等基本数据类型。这些基本数据类型和其他sql方言一样,都是保留字。

集合数据类型

hive中的列支持使用struct、map和array集合数据类型。大多数关系型数据库中不支持这些集合数据类型,因为它们会破坏标准格式。关系型数据库中为实现集合数据类型是由多个表之间建立合适的外键关联来实现。在大数据系统中,使用集合类型的数据的好处在于提高数据的吞吐量,减少寻址次数来提高查询速度。

使用集合数据类型创建表实例:

CREATE TABLE STUDENTINFO

(

NAME STRING,

FAVORITE ARRAY<STRING>,

COURSE MAP<STRING,FLOAT>,

ADDRESS STRUCT<CITY:STRING,STREET:STRING>

)

查询语法:SELECT S.NAME,S.FAVORITE[0],S.COURSE["ENGLISH"],S.ADDRESS.CITY FROM STUDENTINFO S;

分区表

创建分区表:create table employee (name string,age int,sex string) partitioned by (city string) row format delimited fields terminated by '\t';

分区表装载数据:load data local inpath '/usr/local/lee/employee' into table employee partition (city='hubei');

Hive常用优化方法

1、join连接时的优化:当三个或多个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个mapreduce。

2、join连接时的优化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大。原因:hive在对每行记录操作时会把其他表先缓存起来,直到扫描最后的表进行计算

3、在where字句中增加分区过滤器。

4、当可以使用left semi join 语法时不要使用inner join,前者效率更高。原因:对于左表中指定的一条记录,一旦在右表中找到立即停止扫描。

5、如果所有表中有一张表足够小,则可置于内存中,这样在和其他表进行连接的时候就能完成匹配,省略掉reduce过程。设置属性即可实现,set hive.auto.covert.join=true; 用户可以配置希望被优化的小表的大小 set hive.mapjoin.smalltable.size=2500000; 如果需要使用这两个配置可置入$HOME/.hiverc文件中。

6、同一种数据的多种处理:从一个数据源产生的多个数据聚合,无需每次聚合都需要重新扫描一次。

例如:insert overwrite table student select * from employee; insert overwrite table person select * from employee;

可以优化成:from employee insert overwrite table student select * insert overwrite table person select *

7、limit调优:limit语句通常是执行整个语句后返回部分结果。set hive.limit.optimize.enable=true;

8、开启并发执行。某个job任务中可能包含众多的阶段,其中某些阶段没有依赖关系可以并发执行,开启并发执行后job任务可以更快的完成。设置属性:set hive.exec.parallel=true;

9、hive提供的严格模式,禁止3种情况下的查询模式。

a:当表为分区表时,where字句后没有分区字段和限制时,不允许执行。

b:当使用order by语句时,必须使用limit字段,因为order by 只会产生一个reduce任务。

c:限制笛卡尔积的查询。

10、合理的设置map和reduce数量。

11、jvm重用。可在hadoop的mapred-site.xml中设置jvm被重用的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值