Impala 详细介绍

1.Impala的基本概念

1.1 什么是Impala

    Cloudera 公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。是CDH平台首选的PB级大数据实时查询分析引擎。

    Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。

    换句话说,Impala是性能最高的SQL引擎(提供类似RDBMS的体验),它提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。

 

1.2 Impala的特点

    impalak快的原因:1.2.1、1.2.2、1.2.3、1.2.6

1.2.1 基于内存进行计算,能够对PB级数据进行交互式实时查询、分析

1.2.2 无需转换为MR,直接读取HDFS及Hbase数据 ,从而大大降低了延迟。

    Impala没有MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成

1.2.3 C++编写,LLVM统一编译运行

    在底层对硬件进行优化, LLVM:编译器,比较稳定,效率高

1.2.4 兼容HiveSQL

    支持hive基本的一些查询等,hive中的一些复杂结构是不支持的

1.2.5 具有数据仓库的特性,可对hive数据直接做数据分析

1.2.6 支持Data Local

    数据本地化:无需数据移动,减少数据的传输

1.2.7 支持列式存储

    可以和Hbase整合:因为Hive可以和Hbasez整合

1.2.8 支持JDBC/ODBC远程访问

 

1.3 Impala的优缺点

1.3.1 Impala的优点

    • 支持SQL查询,快速查询大数据。

    • 可以对已有数据进行查询,减少数据的加载,转换。

    • 多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。

    • 可以与Hive配合使用。

1.3.2 Impala的缺点

    • 不支持用户定义函数UDF。

    • 不支持text域的全文搜索。

    • 不支持Transforms。

    • 不支持查询期的容错。

    • 对内存要求高。

 

1.4 Impala的组成

 

1.5 Impala的运行原理

    Impala执行查询的具体过程:

    • 当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息。

    • 用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator.

    • Coordinator通过从元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。

    • Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。

    • Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果。

    • Coordinator把汇总后的结果返回给CLI客户端。

 

2. Impala 安装

2.1 Impala的地址

    Impala的官网:http://impala.apache.org/

    Impala文档查看:http://impala.apache.org/impala-docs.html

    下载地址:http://impala.apache.org/downloads.html

2.2 Impala的安装方式

    Impala有两种安装方式:

    1. 手动安装。

    2. CDH安装(推荐)。

    我们使用Cloudera Manager安装Impala(很简单,在此不介绍) 。

2.3 Impala 的监护管理

    可以通过下面的链接来访问Impala的监护管理页面:

    查看StateStore:http://hadoop102:25020/

    查看Catalog:http://hadoop102:25010/

2.4 Impala的初体验

1.启动Impala
    [root@hadoop102 ~]# impala-shell
2.查看数据库
    [hadoop102:21000] > show databases;
3.打开默认数据库
    [hadoop102:21000] > use default;
4.显示数据库中的表
    [hadoop102:21000] > show tables;
5.创建一张student表
    [hadoop102:21000] > create table student(id int, name string)
                                     > row format delimited
                                     > fields terminated by '\t';
6.向表中导入数据
    [hadoop103:21000] > load data inpath '/student.txt' into table student;
注意:
    1)  关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限
        [hdfs@hadoop103 ~]$ hadoop fs -chmod 777 /
    2)  Impala不支持将本地文件导入到表中
7.查询
    [hadoop103:21000] > select * from student;
8.退出impala
    [hadoop103:21000] > quit;

 

3.Impala的操作命令

3.1 Impala的外部shell

选项

描述

-h, --help

显示帮助信息

-v or --version

显示版本信息

-i hostname, --impalad=hostname

指定连接运行 impalad 守护进程的主机。默认端口是 21000。

-q query, --query=query

从命令行中传递一个shell 命令。执行完这一语句后 shell 会立即退出。

-f query_file, --query_file= query_file

传递一个文件中的 SQL 查询。文件内容必须以分号分隔

-o filename or --output_file filename

保存所有查询结果到指定的文件。通常用于保存在命令行使用 -q 选项执行单个查询时的查询结果。

-c

查询执行失败时继续执行

-d default_db or --database=default_db

指定启动后使用的数据库,与建立连接后使用use语句选择数据库作用相同,如果没有指定,那么使用default数据库

-r or --refresh_after_connect

建立连接后刷新 Impala 元数据

-p, --show_profiles

对 shell 中执行的每一个查询,显示其查询执行计划 

-B(--delimited)

去格式化输出

--output_delimiter=character

指定分隔符

--print_header

打印列名

3.2 Impala的内部shell

选项

描述

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)

history

历史命令

 

4.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创建表。

 

5.DDL 数据定义

 5.1 创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path];

5.2查询数据库

5.2.1显示数据库

[hadoop103:21000] > show databases;
[hadoop103:21000] > show databases like 'hive*';
Query: show databases like 'hive*'
+---------+---------+
| name    | comment |
+---------+---------+
| hive_db |         |
+---------+---------+
[hadoop103:21000] > desc database hive_db;
Query: describe database hive_db
+---------+----------+---------+
| name    | location | comment |
+---------+----------+---------+
| hive_db |          |         |
+---------+----------+---------+

5.2.2删除数据库

[hadoop103:21000] > drop database hive_db;
[hadoop103:21000] > drop database hive_db cascade;

    注:

    Impala不支持alter database语法

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

5.3 创建表

5.3.1 管理表

[hadoop103:21000] > create table if not exists student2(
                  > id int, name string
                  > )
                  > row format delimited fields terminated by '\t'
                  > stored as textfile
                  > location '/user/hive/warehouse/student2';
[hadoop103:21000] > desc formatted student2;

5.3.2 外部表

[hadoop103:21000] > create external table stu_external(
                  > id int, 
                  > name string) 
                  > row format delimited fields terminated by '\t' ;

5.4分区表

5.4.1 创建分区表

[hadoop103:21000] > create table stu_par(id int, name string)
                  > partitioned by (month string)
                  > row format delimited 
                  > fields terminated by '\t';

5.4.2 向表中导入数据

[hadoop103:21000] > alter table stu_par add partition (month='201810');
[hadoop103:21000] > load data inpath '/student.txt' into table stu_par partition(month='201810');
[hadoop103:21000] > insert into table stu_par partition (month = '201811')
                  > select * from student;

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

5.4.3 查询分区表中的数据

[hadoop103:21000] > select * from stu_par where month = '201811';

5.4.4 增加多个分区

[hadoop103:21000] > alter table stu_par add partition (month='201812') partition (month='201813');

5.4.5 删除分区

[hadoop103:21000] >  alter table stu_par drop partition (month='201812');

5.4.5查看分区

[hadoop103:21000] > show partitions stu_par;

 

6.DML数据操作

6.1 数据导入(基本同hive类似)

    注意:impala不支持load data local inpath…

6.2 数据的导出

1.impala不支持insert overwrite…语法导出数据

2.impala 数据导出一般使用 impala -o

[root@hadoop103 ~]# impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt
[root@hadoop103 ~]# cat output.txt 
1001    tignitgn
1002    yuanyuan
1003    haohao
1004    yunyun

Impala 不支持export和import命令

 

7.查询

    •  基本的语法跟hive的查询语句大体一样

    •  Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BY

    •  Impala中不支持分桶表

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

    •  Impala支持开窗函数

 

8.函数

    和Hive类似,在此不再介绍。

 

9.存储和压缩

文件格式

压缩编码

Impala是否可直接创建

是否可直接插入

Parquet

Snappy(默认), GZIP;

Yes

支持:CREATE TABLE, INSERT, 查询

Text

LZO,gzip,bzip2,snappy

Yes. 不指定 STORED AS 子句的 CREATE TABLE 语句,默认的文件格式就是未压缩文本

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

RCFile

Snappy, GZIP, deflate, BZIP2

Yes.

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

SequenceFile

Snappy, GZIP, deflate, BZIP2

Yes.

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

    注:impala不支持ORC格式

 

10.优化

    •  尽量将StateStore和Catalog单独部署到同一个节点,保证他们正常通行。

    •  通过对Impala Daemon内存限制(默认256M)及StateStore工作线程数,来提高Impala的执行效率。

    •   SQL优化,使用之前调用执行计划

    •  选择合适的文件格式进行存储,提高查询效率。

    •  避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert…select…方式中间表的数据插入到最终表中)

    •  使用合适的分区技术,根据分区粒度测算

    •  使用compute stats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时,表中使用的查询。

[hadoop104:21000] > compute stats student;
Query: compute stats student
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 1 partition(s) and 2 column(s). |
+-----------------------------------------+

    •  网络io的优化:

      –a.避免把整个数据发送到客户端

      –b.尽可能的做条件过滤

      –c.使用limit字句

       –d.输出文件时,避免使用美化输出

       –e.尽量少用全量元数据的刷新

    •   使用profile输出底层信息计划,在做相应环境优化

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Trino Impala是一种音乐组合,组合集结了来自英国的天才音乐人Trino Green和Impala Johnson。他们以独特的音乐风格和出色的表演才华而闻名。 Trino Impala的音乐融合了多种音乐元素,包括摇滚、放克、灵魂和电子音乐。他们的音乐充满了活力和创新,总能给听众带来耳目一新的感觉。 Trino Impala在音乐上展现了他们对各种音乐流派的深入理解和掌握。他们的歌曲旋律优美动人,创作风格独特。他们以实验性摇滚为基础,将各种不同的音乐元素自由地混合在一起,创造出新颖而又独特的音乐风格。 Trino Green是一位出色的吉他手和作曲家。他的吉他演奏技巧非常高超,能够将吉他的音色变化发挥到极致。他的创作充满了惊喜和创新,并经常利用各种不同的音效和技巧来丰富音乐的表达方式。 Impala Johnson则是一位才华横溢的歌手和键盘手。她的声线清澈动人,唱腔充满灵性。她的键盘演奏技巧独特,能够通过琴键传递出丰富的情感。 Trino Impala的表演气氛十分活跃和狂热。他们的舞台表演充满了能量和活力,总能让观众沉浸在音乐的世界中。他们的音乐受到了广大听众的热爱和追捧,并在国内外音乐界取得了很大的成功。 总之,Trino Impala是一支深受欢迎的音乐组合,他们以独特的音乐风格和卓越的艺术才华在音乐界崭露头角。他们的音乐充满了活力和创新,总能给听众带来美妙的音乐体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值