Hive Tunning(二)优化存储

简介: 《Hive Tunning》读后小记第二篇——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
目录
相关文章
|
7月前
|
SQL 存储 分布式计算
Hive数据仓库设计与优化策略:面试经验与必备知识点解析
本文深入探讨了Hive数据仓库设计原则(分区、分桶、存储格式选择)与优化策略(SQL优化、内置优化器、统计信息、配置参数调整),并分享了面试经验及常见问题,如Hive与RDBMS的区别、实际项目应用和与其他组件的集成。通过代码样例,帮助读者掌握Hive核心技术,为面试做好充分准备。
624 0
|
7月前
|
存储 SQL Java
bigdata-18-Hive数据结构与存储格式
bigdata-18-Hive数据结构与存储格式
71 0
|
SQL 分布式计算 监控
Hive性能优化之计算Job执行优化 2
Hive性能优化之计算Job执行优化
231 1
|
SQL 存储 分布式计算
Hive性能优化之表设计优化1
Hive性能优化之表设计优化1
80 1
|
2月前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
61 2
|
4月前
|
存储 SQL 分布式计算
Hive存储表数据的默认位置详解
【8月更文挑战第31天】
310 1
|
7月前
|
SQL 分布式计算 资源调度
Hive 优化总结
Hive优化主要涉及HDFS和MapReduce的使用。问题包括数据倾斜、操作过多和不当使用。识别倾斜可通过检查分区文件大小或执行聚合抽样。解决方案包括整体优化模型设计,如星型、雪花模型,合理分区和分桶,以及压缩。内存管理需调整mapred和yarn参数。倾斜数据处理通过选择均衡连接键、使用map join和combiner。控制Mapper和Reducer数量以避免小文件和资源浪费。减少数据规模可调整存储格式和压缩,动态或静态分区管理,以及优化CBO和执行引擎设置。其他策略包括JVM重用、本地化运算和LLAP缓存。
158 4
Hive 优化总结
|
6月前
|
SQL 资源调度 数据库连接
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
在Tez上优化Hive查询,包括配置参数调整、理解并行化机制以及容器管理。关键步骤包括YARN调度器配置、安全阀设置、识别性能瓶颈(如mapper/reducer任务和连接操作),理解Tez如何动态调整mapper和reducer数量。例如,`tez.grouping.max-size` 影响mapper数量,`hive.exec.reducers.bytes.per.reducer` 控制reducer数量。调整并发和容器复用参数如`hive.server2.tez.sessions.per.default.queue` 和 `tez.am.container.reuse.enabled`
490 0
|
7月前
|
SQL 存储 大数据
Hive的查询、数据加载和交换、聚合、排序、优化
Hive的查询、数据加载和交换、聚合、排序、优化
141 2
|
7月前
|
SQL 存储 分布式计算
【Hive】Hive优化有哪些?
【4月更文挑战第16天】【Hive】Hive优化有哪些?