5 WAYS TO MAKE YOUR HIVE QUERIES RUN FASTER

今天看了一篇[文章]

(http://zh.hortonworks.com/blog/5-ways-make-hive-queries-run-faster/),讲述了优化Hive的5个建议。其中每个建议细说的话,都可以写一篇或者多篇文章。下面简要记录下,后续慢慢补充:

1: USE TEZ

Tez 是一个开源的支持DAG作业的计算框架,它来源于MapReduce框架。可以通过设置

set hive.execution.engine=tez;

来启动Tez。

注意Hive2.1.0的版本有一个BUGHIVE-14121。使用Tez的时候需要

set hive.mapjoin.hybridgrace.hashtable=false

2: USE ORCFILE

ORCfile 使用了predicate push-down, compression等多种技术。Hive使用 ORCfile 作为表结构不仅可以节省存储空间,而且能够快速提高Hive Query的速度。

CREATE TABLE A_ORC (
customerID int,
name string,
age int,
address string ) STORED AS ORC tblproperties (“orc.compress" = “SNAPPY”);

3: USE VECTORIZATION

矢量查询(Vectorized query) 每次处理数据时会将1024行数据组成一个batch进行处理,而不是一行一行进行处理,这样能够显著提高执行速度。

可以通过设置

set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;

开启来。

具体请参考:

[1] https://cwiki.apache.org/confluence/display/Hive/Vectorized+Query+Execution

4: COST BASED QUERY OPTIMIZATION

COST BASED QUERY OPTIMIZATION可以优化hive的每次查询。如果想要使用CBO,需要开启一下选项:

set hive.cbo.enable=true;

set hive.compute.query.using.stats=true;

set hive.stats.fetch.column.stats=true;

set hive.stats.fetch.partition.stats=true;

如果我们想要使用CBO,需要通过HIVE的分析模式来收集表的不同统计数据,我们可以通过下面的命令来进行:

analyze table tweets compute statistics for columns;

这样子,HIVE就可以通过消耗评估和不同的执行计划来让我们的查询跑的更快。

更多的查询请看这里.

5: WRITE GOOD SQL

SQL是一种强有力的解释性语言,在执行sql查询的时候,可以通过不同的sql语法来实现。虽然查询的结果是相同的,但是不同的SQL语句会有不同的性能表现。

例如,创建一个点击事件表,表中的每条记录都代表一个事件。

CREATE TABLE clicks (

timestamp date, sessionID string, url string, source_ip string

) STORED as ORC tblproperties (“orc.compress” = “SNAPPY”);

如果想要查询出每个sessionID 最后访问的url,一种可能的执行方式是这样的:

SELECT clicks.* FROM clicks inner join

(select sessionID, max(timestamp) as max_ts from clicks

group by sessionID) latest

ON clicks.sessionID = latest.sessionID and

clicks.timestamp = latest.max_ts;

上面的查询语句通过一个子查询获取每个sessionID最后的访问时间,然后通过inner join

来过滤到其它的事件。下面是另一种方法:

SELECT * FROM

(SELECT *, RANK() over (partition by sessionID,

order by timestamp desc) as rank

FROM clicks) ranked_clicks

WHERE ranked_clicks.rank=1;

第二种方法通过HIVE的开窗函数避免了两个大表的join,这样就能提高查询效率。

其实还有很多其它的优化方式,例如LLAP,优化无止境。

HIVE的几种优化的更多相关文章

  1. 写好Hive 程序的若干优化技巧和实际案例

    使用Hive可以高效而又快速地编写复杂的MapReduce查询逻辑.但是一个”好”的Hive程序需要对Hive运行机制有深入的了解,像理解mapreduce作业一样理解Hive QL才能写出正确.高效 ...

  2. Hive使用Calcite CBO优化流程及SQL优化实战

    目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...

  3. Hive的三种安装方式(内嵌模式,本地模式远程模式)

    一.安装模式介绍:     Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景.     1.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)   ...

  4. Unity 几种优化建议

    转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...

  5. Hive性能分析和优化方法

    Hive性能分析和优化方法 http://wenku.baidu.com/link?url=LVrnj-mD0OB69-eUH-0b2LGzc2SN76hjLVsGfCdYjV8ogyyN-BSja5 ...

  6. Hive的三种Join方式

    Hive的三种Join方式 hive Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示. 参考链接:https://cwiki.apache.org/confluence/dis ...

  7. 2.Hive的几种常见的数据导入方式

    好久没写Hive的那些事了,今天开始写点吧.今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3 ...

  8. tensorflow的几种优化器

    最近自己用CNN跑了下MINIST,准确率很低(迭代过程中),跑了几个epoch,我就直接stop了,感觉哪有问题,随即排查了下,同时查阅了网上其他人的blog,并没有发现什么问题 之后copy了一篇 ...

  9. 详解Oracle数据货场中三种优化:分区、维度和物化视图

    转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...

随机推荐

  1. Spring Boot基础教程》 第1节工具的安装和使用

    <Spring Boot基础教程> 第1节 工具的安装和使用 Spring Boot文档 https://qbgbook.gitbooks.io/spring-boot-reference ...

  2. 待字闺中之Magic Index 分析

    给定一个数组A,当中有一个位置被称为Magic Index,含义是:如果i是Magic Index.则A[i] = i. 如果A中的元素递增有序.且不反复,请给出方法,找到这个Magic Index. ...

  3. cocos2d-x 粒子效果

    大规模运动的物体通常有两种方法实现 1.使用帧动画来模拟 2,粒子效果 粒子系统有CCParticleSystem类实现,CCParticleSystem实现了对粒子的控制与调度,对粒子的操作包含: ...

  4. Delphi的时间 x87 fpu control word 精度设置的不够

    在win7 64位系统下, 一个DELPHI写的DLL注入一个C语言程序后. 出现非常奇怪的浮点数相加出错的情况. (注: 在XP系统下是正常的).比如: 40725.0001597563 + 0.7 ...

  5. 8.解决IntelliJ Idea 集成TortoiseSVN 时找不到svn.exe

    转自:https://blog.csdn.net/beibeijia125/article/details/70183533?utm_source=blogxgwz9 首先我们可以在http://su ...

  6. zookeeper图形界面工具zooinspector

    链接: https://pan.baidu.com/s/1rabrwuC 密码: trwa zooinspector下载地址 解压后进入

  7. java9新特性-22-总结

    1.在java 9 中看不到什么? 1.1 一个标准化和轻量级的JSON API 一个标准化和轻量级的JSON API被许多java开发人员所青睐.但是由于资金问题无法在Java 9中见到,但并不会削 ...

  8. <Sicily>Greatest Common Divisors

    一.题目描述 A common divisor for two positive numbers is a number which both numbers are divisible by. It ...

  9. 洛谷 P4180 【模板】严格次小生成树[BJWC2010] LCT

    首次采用了压行,感觉还不错. Code: // luogu-judger-enable-o2 #include <cstdio> #include <algorithm> #i ...

  10. Kubernetes1.5 集成Heapster

    Kubernetes1.5 集成Heapster Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收 ...