Impala基于内存的SQL引擎的详细介绍
一、简介
1、概述
Impala是Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。
•基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点
impala使用hive的元数据, 完全在内存中计算
•是CDH平台首选的PB级大数据实时查询分析引擎
2、Impala的特点
impalak快的原因:1、2、3、6
1、基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
2、无需转换为MR,直接读取HDFS及Hbase数据 ,从而大大降低了延迟。
Impala没有MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成
3、C++编写,LLVM统一编译运行
在底层对硬件进行优化, LLVM:编译器,比较稳定,效率高
4、兼容HiveSQL
支持hive基本的一些查询等,hive中的一些复杂结构是不支持的
5、具有数据仓库的特性,可对hive数据直接做数据分析
6、支持Data Local
数据本地化:无需数据移动,减少数据的传输
7、支持列式存储
可以和Hbase整合:因为Hive可以和Hbasez整合
8、支持JDBC/ODBC远程访问
3、Impala劣势
1、对内存依赖大
只在内存中计算,官方建议128G(一般64G基本满足),可优化: 各个节点汇总的节点(服务器)内存选用大的,不汇总节点可小点
2、C++编写 开源 ?
对于java, C++可能不是很了解
3、完全依赖hive
4、实践过程中分区超过1w 性能严重下下降
定期删除没有必要的分区,保证分区的个数不要太大
5、稳定性不如hive
因完全在内存中计算,内存不够,会出现问题, hive内存不够,可使用外存
4、Impala的缺点
- Impala不提供任何对序列化和反序列化的支持。
- Impala只能读取文本文件,而不能读取自定义二进制文件。
- 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。
二、Impala架构
1、Impala的核心组件
Statestore Daemon
- 负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息
- 负责query的调度
Catalog Daemon
从Hive元数据库中同步元数据,分发表的元数据信息到各个impalad中
接收来自statestore的所有请求
impala版本1.2之后开始有的,不是很只能,有些元数据信息并不能同步到各个impalad的,例如hive中创建表,Catalog Daemon不能同步,需要在imapala手动执行命令同步。
Impala Daemon(impalad) <具有数据本地化的特性所以放在DataNode上>
接收client、hue、jdbc或者odbc请求、Query执行并返回给中心协调节点
子节点上的守护进程,负责向statestore保持通信,汇报工作
Impala daemon:执行计算。因内存依赖大,所最好不要和imapla的其他组件放到同意节点
考虑集群性能问题,一般将StateStoreDaemon与 Catalog Daemon放在统一节点上,因之间要做通信
2、整体架构流程
客户端向某一个Impalad发送一个query(SQL)
上Impalad会与StateStore保持连接(通信),确定impala集群哪写Impalad是否健康可工作,与NameNode得到数据元数据信息(数据的位置等);每个Impalad通过Catalog可知表元数据据信息;
Impalad将query解析为具体的执行计划Planner, 交给当前机器Coordinator即为中心协调节点
Impalad通过jni,将query传送给java前端,由java前端完成语法分析和生成执行计划(Planner),并将执行计划封装成thrift格式返回执行计划分为多个阶段,每一个阶段叫做一个(计划片段)PlanFragment,每一个PlanFragment在执行时可以由多个Impalad实例并行执行(有些PlanFragment只能由一个Impalad实例执行),
Coordinator(中心协调节点)根据执行计划Planner,通过本机Executor执行,并转发给其它有数据的impalad用Executor进行执行
impalad的Executor之间可进行通信,可能需要一些数据的处理
各个impalad的Executor执行完成后,将结果返回给中心协调节点
用户调用GetNext()方法获取计算结果,如果是insert语句,则将计算结果写回hdfs
当所有输入数据被消耗光,执行结束(完成)。
在执行过程中,如果有任何故障发生,则整个执行失败
有中心节点Coordinator将汇聚的查询结果返回给客户端
3、Impala与Hive的异同
数据存储
- 使用相同的存储数据池都支持把数据存储于HDFS, HBase。
元数据:
- 两者使用相同的元数据
SQL解释处理:
- 比较相似都是通过词法分析生成执行计划。
执行计划:
- Hive: 依赖于MapReduce执行框架,执行计划分成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会 被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。
- Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的 map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。
数据流:
- Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。
- Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。
内存使用:
- Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
- Impala: 在遇到内存放不下数据时,当前版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一 定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)
调度
- Hive任务的调度依赖于Hadoop的调度策略。
- Impala的调度由自己完成,目前的调度算法会尽量满足数据的局部性,即扫描数据的进程应尽量靠近数据本身所在的物理机器。但目前调度暂时还没有考虑负载均衡的问题。从Cloudera的资料看,Impala程序的瓶颈是网络IO,目前Impala中已经存在对Impalad机器网络吞吐进行统计,但目前还没有利用统计结果进行调度。
容错
- Hive任务依赖于Hadoop框架的容错能力,可以做到很好的failover
- Impala中不存在任何容错逻辑,如果执行过程中发生故障,则直接返回错误。当一个Impalad失败时,在这个Impalad上正在运行的所有query都将失败。但由于Impalad是对等的,用户可以向其他Impalad提交query,不影响服务。当StateStore失败时,也不会影响服务,但由于Impalad已经不能再更新集群状态,如果此时有其他Impalad失败,则无法及时发现。这样调度时,如果谓一个已经失效的Impalad调度了一个任务,则整个query无法执行。
三、Impala Shell
1、Impala 外部shell
不进入Impala内部,直接执行的ImpalaShell
例如:
$ impala-shell -h -- 通过外部Shell查看Impala帮助
$ impala-shell -p select count(*) from t_stu -- 显示一个SQL语句的执行计划
下面是Impala的外部Shell的一些参数:
-h (--help) 帮助
-v (--version) 查询版本信息
-V (--verbose) 启用详细输出
--quiet 关闭详细输出
-p 显示执行计划
-i hostname (--impalad=hostname) 指定连接主机格式hostname:port 默认端口21000, impalad shell 默认连接本机impalad
- r(--refresh_after_connect)刷新所有元数据
-q query (--query=query) 从命令行执行查询,不进入impala-shell
-d default_db (--database=default_db) 指定数据库
-B(--delimited)去格式化输出
--output_delimiter=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)执行查询文件,以分号分隔
-o filename (--output_file filename) 结果输出到指定文件
-c 查询执行失败时继续执行
-k (--kerberos) 使用kerberos安全加密方式运行impala-shell
-l 启用LDAP认证
-u 启用LDAP时,指定用户名
2、Impala内部Shell
# impala shell进入
# 普通连接
impala-shell
# impala shell命令
# 查看impala版本
select version;
# 特殊数据库
# default,建立的没有指定任何数据库的新表
# _impala_builtins,用于保存所有内置函数的系统数据库
# 库操作
# 创建
create database tpc;
# 展示
show databases;
# 展示库名中含有指定(格式)字符串的库展示
# 进入
use tpc;
# 当前所在库
select current_database();
#表操作
# 展示(默认default库的表)
show tables;
# 指定库的表展示
show tables in tpc;
# 展示指定库中表名中含有指定字符串的表展示
show tables in tpc like 'customer*';
# 表结构
describe city; 或 desc city;
# select insert create alter
# 表导到另一个库中(tcp:city->d1:city)
alter table city rename to d1.city
# 列是否包含null值
select count(*) from city where c_email_address is null
# hive中 create、drop、alter,切换到impala-shell中需要如下操作
invalidate metadata
# hive中 load、insert、change表中数据(直接hdfs命令操作),切换到impala-shell中需要如下操作
refresh table_name
3、参考文章
https://www.w3cschool.cn/impala/impala_overview.html
https://blog.csdn.net/flyingsk/article/details/8590000
https://blog.csdn.net/qiyongkang520/article/details/51067803
转载自链接:https://www.jianshu.com/p/257ff24db397
Impala基于内存的SQL引擎的详细介绍的更多相关文章
- 【转】Spark是基于内存的分布式计算引擎
Spark是基于内存的分布式计算引擎,以处理的高效和稳定著称.然而在实际的应用开发过程中,开发者还是会遇到种种问题,其中一大类就是和性能相关.在本文中,笔者将结合自身实践,谈谈如何尽可能地提高应用程序 ...
- DRDS分布式SQL引擎—执行计划介绍
摘要: 本文着重介绍 DRDS 执行计划中各个操作符的含义,以便用户通过查询计划了解 SQL 执行流程,从而有针对性的调优 SQL. DRDS分布式SQL引擎 — 执行计划介绍 前言 数据库系统中,执 ...
- Unity3d 引擎原理详细介绍、Unity3D引擎架构设计
体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于 ...
- Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife
时间 2014-03-24 11:18:00 博客园-所有随笔区原文 http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的 ...
- Unity3d 引擎原理详细介绍
体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于 ...
- SQL之存储过程详细介绍及语法(转)
1:定义 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 存储过程分为系统存储过程和自定义 ...
- Unity3d 发动机原理详细介绍
Unity3d 发动机原理详细介绍 www.MyException.Cn 发布于:2013-10-08 16:32:36 浏览:46次 0 Unity3d 引擎原理详细介绍 体系结构 ...
- 大数据时代快速SQL引擎-Impala
背景 随着大数据时代的到来,Hadoop在过去几年以接近统治性的方式包揽的ETL和数据分析查询的工作,大家也无意间的想往大数据方向靠拢,即使每天数据也就几十.几百M也要放到Hadoop上作分析,只会适 ...
- 转:大数据时代快速SQL引擎-Impala
本文来自:http://blog.csdn.net/yu616568/article/details/52431835 如有侵权 可立即删除 背景 随着大数据时代的到来,Hadoop在过去几年以接近统 ...
随机推荐
- 数据卷(Data Volumes)
Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及 ...
- C#开发微信小程序(四)
导航:C#开发微信小程序系列 关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中 ...
- kibana的query string syntax 笔记
kibana的query string syntax 并不是 Query String Query,只能说类似.kibana的 Lucene query string syntax(es的query ...
- IT兄弟连 HTML5教程 CSS3属性特效 文字排版
direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr.文字排版的参数说明如表1所示. 表1 CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to ...
- [转]UiPath Invoke Code
本文转自:https://dotnetbasic.com/2019/08/uipath-invoke-code.html We will learn step by step tutorial for ...
- C++ map insert 另一个map的子集
C++map中 会有insert操作,举个例子 存在map A,我们截取一部分到map B中,void insert (InputIterator first, InputIterator last) ...
- OpenTSDB 简单使用 .NET
OpenTSDB是基于Hbase的时序数据库[时间序列数据库].不具备通用性,主要针对具有时间特性和需求的数据,如监控数据.温度变化数据等. 1.安装OpenTSDB 安装前一定要安装HBase,相关 ...
- 使用Data Guard迁移到RAC (Doc ID 273015.1)
Migrating to RAC using Data Guard (Doc ID 273015.1) APPLIES TO: Oracle Database Cloud Exadata Servic ...
- mysql在本地已经启动,但是在网页上不能直接访问的解决
1.将mysql文件下的my.ini中的路径代码 # 设置mysql的安装目录 basedir=E:/Develop/mysql # 设置mysql数据库的数据的存放目录 datadir=E:/Dev ...
- ResultSet RS_resultxtgg=connDbBean.executeQuery(sqlxtgg);
<%String sqlxtgg="select * from dx where leibie='系统公告'"; ResultSet RS_resultxtgg=connDb ...