Impala框架

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自身包含三个模块: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数据类型长度
tinyinttinyint

1byte有符号整数

smalintsmalint

2byte有符号整数

intint

4byte有符号整数

bigintbigint

8byte有符号整数

booleanboolean

布尔类型,true或者false

floatfloat

单精度浮点数

doubledouble

双精度浮点数

stringstring

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

timestamptimestamp时间类型
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是否可直接创建是否支持插入
parquetSnappy(默认)、GZIPyes

支持:CREATE TABLE, INSERT, 查询

TextFileLZO、gzip、bzip2、snappyyes

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

RCFilesnappy、gzip、deflate、bzip2yes

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

SequenceFilesnappy、gzip、deflate、bzip2yes

支持: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输出底层信息计划,在做相应环境优化
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值