Hive Tunning(二)优化存储

接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储。
下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要讲一下ORCFile。
Built-in Formats: 
– ORCFile 
– RCFile 
– Avro 
– Delimited Text 
– Regular Expression 
– S3 Logfile 
– Typed Bytes 
• 3 
rd 
-Party Addons: 
– JSON 
– XML
674aaafaf9285cfcc97f55c543f26e7243bc0c51
这种格式非常适合HDFS,它有以下的 优点
•高压缩 
– 高压缩比. 
– 字典编码. 
•高性能 
– 自带索引. 
– 高效的精确查询. 
• 灵活的数据模型 
– 支持所有的hive类型,包括maps.
389f1dd2e500ef0d50cd43082d541143f86702b9
从图中可以看出,orc格式的文件存储大小仅为文本的30%左右,比gz格式的都小,采用zlib压缩的话,更小,仅有22%左右。
使用orc格式存储的方式很简单,在建表的时候STORED AS orc即可
CREATE  TABLE  sale(     
      id    int,   timestamp  timestamp,    
      productsk   int,  storesk  int,     
      amount   decimal,  state  string    
)STORED   AS   orc;   
相关参数,自己看,不解释了。
4c720b7c9a03b3bd81241ce52f15a1bac44fd212
不适用zlib压缩的话,查询速度更快,但是也大一些。
CREATE    TABLE    sale(    
                id    int,    timestamp    timestamp,    
productsk    int,    storesk    int,    
                amount    decimal,    state    string    
)STORED    AS    orc    tblproperties    ("orc.compress"="NONE");   

下面是加快hive查询的一些可以参考的方式:

f7689d4ce179503cdb5a7d6d56a508b2fbc8111d
(1)跳跃读取:采用分区Partition或者使用Skew,才用ORCFile二次排序。
(2)在连接字段上排序并且bucket,在连接小表的时候采用Broadcast joins。
(3)对经常使用的数据,增加备份因子,激活Short-Circuit Read,采用Tez。
d2bf1424a092ee5396f557f63877a146705c8251
当某个表很大的时候,我们往往要对其进行分区,比如按照时间来分区。
CREATE    TABLE    sale(    
                id    int,    amount    decimal,    ...    
)partitioned    by    (xdate    string,    state    string);   
其中的xdate和state是不存在的列,你可以认为它们是虚拟列,虚拟列会在HDFS当中建立子目录,属于分区的记录会存在那个子文件夹中。 
使用分区之后,在查询和插入的时候,就必须带有至少一个分区字段,否则查询将会失败。
INSERT    INTO    sale    (xdate=‘2013-03-01’,    state=‘CA’)    
SELECT    *    FROM    staging_table 
WHERE    xdate    =    ‘2013-03-01’    AND    state    =    ‘CA’;
如果你想一次查出所有数据,不想受这个限制的话,你可以 hive.exec.dynamic.partition.mode参数置为nonstrict。 
set    hive.exec.dynamic.partition.mode=nonstrict;
INSERT    INTO    sale    (xdate,    state)    
SELECT    *    FROM    staging_table;
有时候插入数据的时候,我们需要重新排序,在select 语句里面把虚拟列也加上,这样会有排序的效果。
INSERT    INTO    sale    (xdate,    state=‘CA’)    
SELECT    
            id,    amount,    other_stuff,    
xdate,    state    
FROM    staging_table 
WHERE    state    =    ‘CA’;

下面我们讲一下常用的hive查询调优 

74555004e55b80b3df9215fb5383e5460d44acdc
mapred.max.split.size和mapred.min.split.size
min    太大->   太少mapper.    
max    太小->   mapper太多.   
Example:    
– set    mapred.max.split.size=100000000;    
– set    mapred.min.split.size=1000000; 
当然也有个原则,当mappers出现抢占资源的时候,才调整这些参数。
a2ace13f4718e1cbd6c9f6be30c0626510911c5f
– set    io.sort.mb=100;    
• All    the    time:    
– set    hive.optmize.mapjoin.mapreduce=true;    
– set    hive.optmize.bucketmapjoin=true;    
– set    hive.optmize.bucketmapjoin.sortedmerge=true;    
– set    hive.auto.convert.join=true;    
– set    hive.auto.convert.sortmerge.join=true;    
– set    hive.auto.convert.sortmerge.join.nocondi1onaltask=true;    
• When    bucketing    data:    
– set    hive.enforce.bucketing=true;    
– set    hive.enforce.sortng=true;    
• These and more are set by default in HDP 1.3(明显的广告词,说明HDP比较强大,已经给我们设置好了).    
这些参数我们可以在hive-site.xml中查询到,我们也可以在shell中查询。
(1)查询所有的参数
38af0dd07f21a3fc44e43a3fc29209f39c3a00df
(2)查询某一个参数
21bd01b8b0d9608ccb9e7b6e2b248f39b396a3b5
(3)修改参数
9fd7900ccf77bd940bd659b74b3be28e7bfe2bf8
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/60181

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。