Hive性能调优详解系列之hive建表设计层面调优_数仓工程师必备hive调优方案

一.调优概述

Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率。影响Hive效率的几 乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce分配不合理等等。对Hive的调优既包含Hive的建表设计方面,对HiveHQL语句本身的优化,也包含Hive配置参数和底层引擎MapReduce方面的调整。
所地这次调优主要分为以下四个方面展开:
1、 Hive的建表设计层面
2、 HQL语法和运行参数层面
3、 Hive架构层面
4、 Hive数据倾斜
总之,Hive调优的作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。

二.调优须知

  • 对于大数据计算引擎来说:数据量大不是问题,数据倾斜是个问题。
  • Hive的复杂HQL底层会转换成多个MapReduce Job并行或者串行执行,Job数比较多的作业运行效率相对比较低,比如即使只有几百行数据的表,如果多次关联多次汇总,产生十几个Job,耗时很长。 原因MapReduce作业初始化的时间是比较长的。
  • 在进行Hive大数据分析时,常见的聚合操作比如sum, count, max, min,
    UDAF等,不怕数据倾斜问题,MapReduce在Mappe阶段的预聚合操作,使数据倾斜不成问题。
  • 好的建表设计,模型设计事半功倍。
  • 设置合理的MapReduce的Task并行度,能有效剧性能。(比如,10w数据量级计算,用100个reduceTask,那是相当的浪费,1个足够,但是如果是亿级的数据量,那么1个Task又会很少,至少保证1个tast处理10w+即可)
  • 数据量较大的情况下,慎用count(distinct), group by容易产生倾斜问题。
  • 对小文件进行合并,是行之有效的提高调度效率的方法,假如所有的作业设置合理的文件数,对任 务的整体调度效率也会产生积极的正向影响
  • 优化时把握整体,单个作业最优不如整体最优。

3.调优具体细节

3.1. Hive建表设计层面

Hive的建表设计层面调优,主要以建表的类型, 文件存储格式,压缩格式等多方面进行参考。
1.利用分区表优化

分区表是在某一个或者几个维度上对瞄进行分类存储,一个分区对应一个目录。如果筛选条件里有分区字段,那么Hive只需要遍历对应分区目录下的文件即可,不需要遍历全局数据,使得处理的数据量 大大减少,从而提高新旬效率。

也就是说:当一个Hive表的查询大多数情况下,会根据某一个字段逬行筛选时,那么非常适合创建为 分区表,该字段即为分区字段。

seiectl:	seiect	....	where	country	=	"china"
seiect2:	seiect	....	where	country	=	"chinaH
seiect3:	seiect	....	where	country	=	"china"
select4:	seiect	....	where	country	=	"china"

分门别类:这个city字段的每个值,就单独形成为一个分区。其实每个分区就对应带HDFS的一个目录 在创建表时通过启用partitioned by实现,用来partition的维度并不是实际数据的某一列,具体分 区的标志是由插入内容时给定的。

当要查询某一分区的内容时可以采用where语句,形似where tablename. partition_column = a 来实现。

1.创建含分区的表:

create TABLE page_vi ew(vi ewTime INT, useri d BIGINT,
page_url string, referrer_url string,
ip string comment 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值