大数据大数据大数据

Impala 介绍

2018-11-01  本文已影响0人  ZX_JS

一、简介

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架构

1、Impala的核心组件

Statestore Daemon

Catalog Daemon

Impala Daemon(impalad) <具有数据本地化的特性所以放在DataNode上>

考虑集群性能问题,一般将StateStoreDaemon与 Catalog Daemon放在统一节点上,因之间要做通信

2、整体架构流程

  1. 客户端向某一个Impalad发送一个query(SQL)

    上Impalad会与StateStore保持连接(通信),确定impala集群哪写Impalad是否健康可工作,与NameNode得到数据元数据信息(数据的位置等);每个Impalad通过Catalog可知表元数据据信息;

  2. Impalad将query解析为具体的执行计划Planner, 交给当前机器Coordinator即为中心协调节点

    Impalad通过jni,将query传送给java前端,由java前端完成语法分析和生成执行计划(Planner),并将执行计划封装成thrift格式返回执行计划分为多个阶段,每一个阶段叫做一个(计划片段)PlanFragment,每一个PlanFragment在执行时可以由多个Impalad实例并行执行(有些PlanFragment只能由一个Impalad实例执行),

  3. Coordinator(中心协调节点)根据执行计划Planner,通过本机Executor执行,并转发给其它有数据的impalad用Executor进行执行

  4. impalad的Executor之间可进行通信,可能需要一些数据的处理

  5. 各个impalad的Executor执行完成后,将结果返回给中心协调节点

    用户调用GetNext()方法获取计算结果,如果是insert语句,则将计算结果写回hdfs

    当所有输入数据被消耗光,执行结束(完成)。

    在执行过程中,如果有任何故障发生,则整个执行失败

  6. 有中心节点Coordinator将汇聚的查询结果返回给客户端

3、Impala与Hive的异同

数据存储

元数据:

SQL解释处理:

执行计划:

数据流:

内存使用:

调度

容错

三、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

上一篇 下一篇

猜你喜欢

热点阅读