文档章节

Impala介绍文档

s
 sunhongxi
发布于 2014/11/06 14:18
字数 2408
阅读 262
收藏 0
点赞 0
评论 0

Impala介绍文档


Impala介绍文档


目录 [隐藏] 

1 1、Impal架构(v1.2+)

2 2、Impala适用场景

3 3、Impala与Hive关系

4 4、Impala 为什么会比MapReduce更高效

5 5、内存依赖

6 6、Impala、Hive性能对比

[编辑] 1、Impal架构(v1.2+)


   Impala 是分布式、大规模并行处理(MPP)的数据库引擎,主要有CLI、Statestore、Catalog、Impala组件构成如下图。

Impala架构图.jpg

各组件功能介绍:

Impala:运行在DataNode节点上,由Impalad进程表示,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator解析SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作,并从catalogd服务接收广播消息

Statestore:跟踪集群中impalaed健康状态及位置。impalaed启动时进行订阅注册并保持心跳连接。并且每个impalaed都缓存一份state store信息。所以即便是state store挂掉,impala还是能够提供服务,只是无法更新每个impalaed的状态。

Catalog:用于同步impala语句产生的metadata的变化到集群里所有结点。解决1.2版本之前的问题:1)在使用CREATE DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, or DROP TABLE语句后,在其它结点执行查询前需要先执行INVALIDATE METADATA来更新结构对象;

2)在一个节点上执行INSERT 语句后要在其它节点执行REFRESH,以便识别出新增的数据。 但是当通过hive操作后,在impala节点执行查询时仍然需要执行 REFRESH 或INVALIDATE METADATA。

CLI:提供给用户查询的命令行工具,shell(Impala使用python实现)、JDBC、ODBC接口


[编辑] 2、Impala适用场景


     1)Impala 非常适合在大的数据集上,为交互式探索分析执行 SQL。

     2)业务逻辑相对简单,类似于关系型数据库。

     3)即席查询(Ad-hoc)是 Impala 的主要应用场景,比hive更高效。

     4)查询结果集不大,必须小于内存,否则不会执行成功。


[编辑] 3、Impala与Hive关系


    Impala与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Impala与Hive在Hadoop中的关系如下图所示。

    Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数据分析工具。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。

   

多数HiveQL 语句都可以直接在Impala下运行,不支持HiveQL中可用的SQL特性如下:

Impala只支持简单数据类型不支持maps, arrays, structs。

可扩展机制(Extensibility mechanisms)例如 TRANSFORM, 自定义文件格式, 或自定义 SerDes; zImpala 1.2

Impala 在 string 和 numeric 或 Boolean 之间不进行隐式转换,Impala 在 numeric 或 string 到 timestamp 之间不进行隐式转换

XML和JSON函数

HiveQL 中的某些聚合函数: variance, var_pop, var_samp, stddev_pop, stddev_samp, covar_pop, covar_samp, corr, percentile, percentile_approx, histogram_numeric,collect_set; Impala 支持这些聚合函数: MAX(), MIN(), SUM(), AVG(), COUNT()

等等

Impala&hive.jpg


[编辑] 4、Impala 为什么会比MapReduce更高效


Impala 与 Hive 和 Pig 不同,因为它使用自己的守护进程,跨集群分布式进行查询。因为 Impala 不依赖于 MapReduce,它避免了 MapReduce 作业的启动开销,让 Impala 能实时返回结果。

Impala 不会把中间结果存放到硬盘上,最大限度的使用内存及时通过网络以strem的方式传递。

Impala 避免了 MapReduce 启动时间的耗费。对于交互式查询,MapReduce 启动时间变得非常醒目。Impala 以服务方式运行,实际上没有启动时间

Impala 可以更自然的分散查询计划,而不是不得不纳入 map 和 reduce 作业管道中。这使得 Impala 可以并行处理查询的多个步骤,并避免不必要的负载如排序和混洗(This enables Impala to parallelize multiple stages of a query and avoid overheads such as sort and shuffle when unnecessary)

Impala 生成运行时代码。Impala 使用 LLVM 为要执行的查询生成汇编码(assembly code)。个别查询不需要为运行在可以支持各种查询的系统而支付代价(Individual queries do not have to pay the overhead of running on a system that needs to be able to execute arbitrary queries)

Impala 尽可能采用最新的硬件指令。Impala 使用最新的 SSE (SSE4.2) 指令集,某些情况下可以提供巨大的加速效果

Impala 采用更好的 I/O 调度。Impala 了解块在硬盘上的位置,并可以调度块处理的顺序,以便保证所有硬盘都繁忙,Impala支持直接数据块读取和本地代码计算checksum。

Impala 专为性能设计。Impala 采取以性能为导向的设计原则,为此花费了大量的时间,例如紧密内部循环、内联函数调用、最小分支、更好的缓存使用、以及最小内存使用等(A lot of time has been spent in designing Impala with sound performance-oriented fundamentals, such as tight inner loops, inlined function calls, minimal branching, better use of cache, and minimal memory usage)

通过选择合适的数据存储格式可以得到最好的性能(Impala支持多种存储格式)


[编辑] 5、内存依赖


   尽管 Impala 不是内存数据库,当处理大的表和大的结果集时, impalad 守护进程会分配大量的物理内存,假如在某一节点上处理中间结果集所需的内存超出了这一节点上 Impala 可用的内存,查询会被取消。

Impala 操作所需的内存依赖于几个因素:

表的文件格式。相同的数据,采用不同的文件格式,数据文件个数也不同。为了分析数据,根据每个文件所采用的压缩和编码格式的不同,可能需要不同数据量的临时内存来进行解压

是否为 SELECT 或 INSERT 操作。例如,查询 Parquet 表时需要相对较少的内存,因为 Impala 以 8MB /块来进行读取和解压缩数据。而向 Parquet 表插入数据则是内存密集型操作,因为每一个数据文件(最大大小为 1GB)的数据被放在内存中,直到编码、压缩并写入硬盘

表是否为分区表,并且针对分区表的查询是否可以从分区修剪(partition pruning)中受益

Impala 要求所有包含的 ORDER BY 子句的查询同时包含 LIMIT 子句,协调节点需要足够的内存进行排序,实际需要内存为LIMIT数量 *集群节点数所站的空间。

结果集的大小。当中间结果集在节点之间传输时,传输数据的数量依赖于查询返回列的数量。select 查询时避免用*,只查询所需要的字段。

使用内存的大小并不是跟输入数据集的大小直接相关。对于聚合来说,使用的内存跟分组后的行数有关。对于表连接来说,使用的内存与除了最大的表之外其他所有表的大小相关,并且 Impala 可以采用在每个节点之间拆分大的连接表而不是把整个表都传输到每个节点的连接策略

使用内存的大小并不是跟输入数据集的大小直接相关。对于聚合来说,使用的内存跟分组后的行数有关。对于连接来说,使用的内存与除了最大的表之外其他所有表的大小相关,并且 Impala 可以采用在每个节点之间拆分大的连接表而不是把整个表都传输到每个节点的连接策略

在唯一或高基数(high-cardinality)列上的 GROUP BY 操作。Impala 为 GROUP BY 查询中每一个不同的值分配一些处理结构(handler structures)。成千上万不同的 GROUP BY 值可能超出内存限制

查询涉及到非常宽、包含上千个列的表,特别是包含许多 STRING 列的表。因为 Impala 允许 STRING 值最大不超过 32 KB,这些查询的中间结果集可能需要大量的内存分配

Impala 使用 tcmalloc 分配内存,一款专为高并发优化的内存分频器。一当 Impala 分配了内存,它保留这些内存用于将来的查询。因此,空闲时显示 Impala 有很高的内存使用是很正常的。假如 Impala 检测到它将超过内存限制(通过 -mem_limit 启动选项或 MEM_LIMIT 查询选项定义),它将释放当前查询不需要的所有内存。

</br>

[编辑] 6、Impala、Hive性能对比


Impala versus Hive 0.12/Stinger

(Lower bars are better)

Impalavshive1.png

In summary, Impala outperformed Hive by 6x to 69x (and by an average of 24x) depending on the category involved:

Impalavshive2.png


参考:

http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Cloudera-Impala-Release-Notes/Cloudera-Impala-Release-Notes.html

http://blog.cloudera.com/blog/2014/01/impala-performance-dbms-class-speed/

http://blog.cloudera.com/blog/2014/05/new-sql-choices-in-the-apache-hadoop-ecosystem-why-impala-continues-to-lead/


© 著作权归作者所有

共有 人打赏支持
s
粉丝 1
博文 7
码字总数 3845
作品 0
朝阳
程序员
Impala安装json解析udf插件

背景 Impala跟Hive一样,是常用的数据仓库组件之一。熟悉Hive的同学肯定知道,Hive官方提供了getjsonobject函数用于处理json字符串,但是Impala官方并没有提供类似的方法,好在是有第三方实现...

wooyoo
2017/04/18
0
0
HDP上安装impala

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。Impala提供更快的查询速度,性能上号称比Hive快3~10倍。Impala是开源的,但一...

litterMo
2016/07/22
492
0
Hive、Impala配置Kerberos认证

一、Hive配置Kerberos认证 1、环境说明 系统环境: 操作系统:CentOs 6.6 Hadoop版本: JDK版本:1.7.0_67 集群各节点角色规划为: 2、生成keytab 在 74节点,即 KDC server 节点上执行下面命...

PeanutLike
2016/09/08
241
0
开源大数据周刊-第76期

资讯 Apache Impala 成为顶级Apache项目 5年前Cloudera公司宣布Impala项目,3年前Impala加入Apache基金会,近期Impala已经毕业成为顶级Apache软件基金会项目。Impala是一个高性能分析数据库,...

开源大数据
2017/12/21
0
0
impala测试报告

机器环境: 4个slave节点 10.200.187.86 cslave1 4核 3G 10.200.187.87 cslave2 2核 4G 10.200.187.88 cslave3 2核 4G 10.200.187.89 cslave4 2核 6G 测试效果: [img] [/img] 总结: 1.在内......

Zero零_度
2016/06/08
21
0
[Hadoop] Cloudera Impala:基于Hadoop的实时查询开源项目

CSDN报道 文/刘江 正在纽约进行的大数据技术会议Strata Conference + Hadoop World传来消息,Cloudera发布了实时查询开源项目Impala 1.0 beta版,称比原来基于MapReduce的Hive SQL查询速度提...

长平狐
2013/06/03
85
0
Cloudera 发布实时查询开源项目 Impala

摘要:号外!Cloudera发布了实时查询开源项目Impala!多款产品实测表明,比原来基于MapReduce的Hive SQL查询速度提升3~90倍。Impala是Google Dremel的模仿,但在SQL功能上青出于蓝胜于蓝。 ...

oschina
2012/10/25
3.8K
6
CCA Spark and Hadoop Developer (CCA175) 公开课信息

CCA Spark and Hadoop Developer (CCA175) 开发者认证 认证准备建议:Spark andHadoop开发者培训 考试形式:120分钟;70%通过;解决10~12基于CDH5机群上需通过实际操作的问题 线上:长期开课...

CDHandHadoop
2017/05/09
0
0
Cloudera Impala:基于Hadoop的实时查询开源项目

正在纽约进行的大数据技术会议Strata Conference + Hadoop World传来消息,Cloudera发布了实时查询开源项目Impala 1.0 beta版,称比原来基于MapReduce的Hive SQL查询速度提升3~90倍(详情可...

龙鸟
2013/01/04
0
0
[Hadoop] Cloudera Impala:基于Hadoop的实时查询开源项目

CSDN报道 文/刘江 正在纽约进行的大数据技术会议Strata Conference + Hadoop World传来消息,Cloudera发布了实时查询开源项目Impala 1.0 beta版,称比原来基于MapReduce的Hive SQL查询速度提...

长平狐
2013/06/03
138
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HTML5和CSS3新特性一览

HTML5和CSS3新特性一览 HTML5 1.HTML5 新元素 HTML5提供了新的元素来创建更好的页面结构: 标签 描述 <article> 定义页面独立的内容区域。 <aside> 定义页面的侧边栏内容。 <bdi> 允许您设置...

全部原谅
7分钟前
0
0
编程开发进阶更重要的是掌握的核心设计思维[图]

编程开发进阶更重要的是掌握的核心设计思维[图]: “单独写一个琐碎的代码块就等同于弹奏音阶一样,不幸的是,弹奏音阶并不能教会你任何关于音乐的东西,并且非常枯燥” 这是 Eric S. Raymon...

原创小博客
10分钟前
0
0
怎样确保java代码在抛出异常时都回滚,而不只是运行时异常

/** TransactionAspectSupport手动回滚事务:*/ @Transactional(rollbackFor = { Exception.class }) public boolean test() { try { ......

gulf
10分钟前
0
0
TCP-Keepalive作用

TCP交互在三次握手确定连接之后,后续可能不会一直有数据在通讯,但此时双方的连接是保持的,如果在这段时间内没有数据,客户端(或服务端)突然关掉了,或者客户端到服务端之间的网络突然断...

sensy
11分钟前
0
0
Hive学习之Hive CLI

Hive命令行接口(CLI)提供了执行Hive QL、设置参数等功能,要启用CLI只需要在命令行下执行$HIVE_HOME/bin/hive命令。在命令下执行hive –H可以查看CLI选项,如下表所示: -d,--define <key...

舒运
13分钟前
0
0
hadoop新手学习笔记之hadoop产品大全

大数据这个词也许几年前你听着还会觉得陌生,但我相信你现在听到hadoop这个词的时候你应该都会觉得“熟悉”!越来越发现身边从事hadoop开发或者是正在学习hadoop的人变多了。作为一个hadoop入...

左手的倒影
15分钟前
0
0
MySQL5.7之开启远程连接

参考这个https://blog.csdn.net/qiyueqinglian/article/details/52778230

汉斯-冯-拉特
15分钟前
0
0
FileUtils API

一、概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开...

如风达
15分钟前
0
0
详解机器学习中的梯度消失、爆炸原因及其解决方法

前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆...

tantexian
20分钟前
0
0
JavaMail 发送邮件

参考 https://www.cnblogs.com/xdp-gacl/p/4216311.html 发送html格式邮件 package com.example.stumgr;import java.util.Properties;import javax.mail.Message;import javax.mail......

阿豪boy
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部