Impala框架

Impala框架Impala是什么?Impala是Cloudera公司推出,提供对HDFS,Hbase数据的高性能,低延迟的交互式SQL查询;      基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点;      是CDH平台首选的PB级别大数据实时查询分析引擎。优点:基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销;    …

Impala是什么?

Impala是Cloudera公司推出,提供对HDFS,Hbase数据的高性能,低延迟的交互式SQL查询

           基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点;

           是CDH平台首选的PB级别大数据实时查询分析引擎。

优点:基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销;

           无需转化为MapReduce,直接访问存储在HDFS,Hbase中的数据进行作业调度,速度快;

            使用了支持Data locality(数据本地化)的I/O调度机制,尽可能地将数据和计算分配在同一台机器上,减少了网络开销;

            支持各种文件格式,如textfile、sequencefile、rcfile、parquet;

            可以访问hive的metastore,对hive数据直接做数据分析

缺点:对内存依赖大,且完全依赖hive;

           实际情况中,分区超过1万,性能严重下降;

           只能读取文本文件,不能直接读取自定义二进制文件;

           每当新的记录、文件被添加到HDFS中的数据目录时,该表需要被刷新。

Impala的架构

Impala框架

从上图可以看出,Impala自身包含三个模块:Impalad、Statestore和Catalog,除此之外它还依赖Hive Metastore和HDFS。

     1.Impalad:

接收client的请求、Query执行并返回给中心协调节点;

子节点上的守护进程,负责向statestore保持通信,汇报工作。

     2.Catalog:

分发表的元数据信息到各个impalad中;

接收来自statestore的所有请求。

     3.Statestore:

负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息;

负责query的协调调度。

Impala是怎么处理来自客户端的一条SQL?

从上图看出:客户端发送一条SQL到Impalad,

      ①、Impala首先会把这条SQL语句转化为一个Query Planner(查询计划);

      ②、然后Impala会将Query Planner交给Query Coordinator(中心协调器);

      ③、Query Coordinator(中心协调器)将查询计划交给Query Executor(执行器);注意,并不是交给任意的执行器处理,若查询的数据在当前中心协调器节点上,则会交给当前节点的执行器执行,若数据在其他节点上,该中心协调器会将执行计划交给其他节点的执行器执行(体现了Data locality(数据本地化));

      ④、执行器执行完成之后,会将结果返回给中心协调器,中心协调器再将数据响应给客户端;

             执行器之间可以交互是因为数据可能不仅仅存在于一台节点上。

Impala访问HDFS和本地目录的方式:

      hive cli 中查看hdfs目录:dfs -ls /
      hive cli 中查看本地目录:! ls /
      beeline中查看hdfs目录:! sh hadoop fs /
      beeline中查看本地目录:! sh ls /
      impala中查看hdfs目录 :shell hadoop fs -ls / 
      impala中查看本地目录 :shell fs -ls /

Impala的外部shell

选项 描述
-h或–help 显示帮助信息
-v或–version 显示版本信息
-i

指定连接运行impala守护进程的主机

例:impala-shell -i hadoop102

-r

建立连接后刷新 Impala 元数据

例:impala-shell -i hadoop102 -r;

-q

从命令行中传递一个shell命令

例:impala-shell -i hadoop102 -q ‘select * from tbl’;

-f

执行一个文件中的sql脚本

例:impala-shell -i hadoop102 -f /query.sql;

-o

保存查询的结果到指定文件中

例:impala-shell -i hadoop102 -q ‘select * from tbl’ -o /output.txt;

-B

去格式化输出

例:impala-shell -i hadoop102 -q ‘select * from tbl’ -B;

–output_delimiter

指定输出时字段间分隔符

例:impala-shell -i hadoop102 -q ‘select * from tbl’ –output_delimiter=’&’;

 

Impala的内部命令:

选项 描述
help 显示帮助信息
explain<sql> 显示执行计划
profile

(查询完成后执行) 查询最近一次查询的底层信息

shell<shell>

不退出impala-shell执行shell命令

version

显示版本信息(同于impala-shell -v)

connect

连接impalad主机,默认端口21000(同于impala-shell -i)

refresh <tablename>

增量刷新元数据库

invalidate metadata

全量刷新元数据库(慎用)(同于 impala-shell -r)

Impala数据类型的

Hive数据类型 Impala数据类型 长度
tinyint tinyint

1byte有符号整数

smalint smalint

2byte有符号整数

int int

4byte有符号整数

bigint bigint

8byte有符号整数

boolean boolean

布尔类型,true或者false

float float

单精度浮点数

double double

双精度浮点数

string string

字符系列。可以指定字符集。可以使用单引号或者双引号

timestamp timestamp 时间类型
binary 不支持 字节数组

注意:Impala虽然支持array,map,struct复杂数据类型,但是支持并不完全,一般处理方法,将复杂类型转化为基本类型,通过hive创建表。

DDL操作(注意事项):

      Impala不支持WITH DEPROPERTIE…语法

      Impala不支持alter database语法(因为不支持with dbproperties)

      当数据库被use语句选中时,无法删除

      分区表中,如果分区没有,load data导入数据时,不能自动创建分区。

DML操作(注意事项):

      Impala不支持load data local inpath;

      Impala不支持 insert overwrite….语法导入数据;

      Impala不支持 export 和 import 命令。

查询相关:

      不支持CLUSTER BY, DISTRIBUTE BY, SORT BY;

      Impala中不支持分桶表;

      Impala不支持COLLECT_SET(col)和explode(col)函数;

      支持开窗函数。

存储和压缩(注:Impala不支持ORC格式

文件格式 压缩编码 Impala是否可直接创建 是否支持插入
parquet Snappy(默认)、GZIP yes

支持:CREATE TABLE, INSERT, 查询

TextFile LZO、gzip、bzip2、snappy yes

支持:CREATE TABLE, INSERT, 查询。如果使用 LZO 压缩,则必须在 Hive 中创建表和加载数据

RCFile snappy、gzip、deflate、bzip2 yes

支持CREATE,查询,在 Hive 中加载数据

SequenceFile snappy、gzip、deflate、bzip2 yes

支持:CREATE TABLE, INSERT, 查询。需设置

优化:

  1. 尽量将StateStore和Catalog单独部署到同一个节点,保证他们正常通信。
  2. 通过对Impala Daemon内存限制(默认256M)及StateStore工作线程数,来提高Impala的执行效率。
  3. SQL优化,使用之前调用执行计划
  4. 选择合适的文件格式进行存储,提高查询效率。
  5. 避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert…select…方式中间表的数据插入到最终表中)
  6. 使用合适的分区技术,根据分区粒度测算
  7. 使用compute stats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时进行查询。
  8. 网络io的优化:
    1. 避免把整个数据发送到客户端
    2. 尽可能的做条件过滤
    3. 使用limit字句
    4. 输出文件时
    5. 避免使用美化输出
    6. 尽量少用全量元数据的刷新
  9. 使用profile输出底层信息计划,在做相应环境优化

今天的文章Impala框架分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9543.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注