irpas技术客

impala快速入门_真香IT_impala

网络 751

impala快速入门 1. 什么是impala ?2. impala的优缺点3. impala的架构组成4. impala的运行原理5. impala的监控管理6. impala-shell6. impala的外部shell操作7. impala的内部shell8. impala的数据类型9. impala的DDL操作创建数据库创建表分区表 10. impala DML操作数据导入数据导出 11. impala DQL操作12 函数自定义函数 13. 存储和压缩14 impala优化

1. 什么是impala ?

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

2. impala的优缺点

3. impala的架构组成

4. impala的运行原理

Impala执行查询的具体过程:

1)当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息。2)用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator.3)Coordinator通过从元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。4)Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。5)Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果。6)Coordinator把汇总后的结果返回给CLI客户端。 5. impala的监控管理

1.查看StateStore http://hadoop1:25020/ 2.查看Catalog http://hadoop1:25010/

6. impala-shell

1.启动Impala impala-shell 2.查看数据库

show databases;

3.打开默认数据库

use default;

4.显示数据库中的表

show tables;

5.创建一张student表

create table student(id int, name string) row format delimited fields terminated by '\t';

6.向表中导入数据

load data inpath '/student.txt' into table student;

注意:

关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限Impala不支持将本地文件导入到表中

7.查询

select * from student;

8.退出impala

quit; 6. 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打印列名
连接指定hadoop1的impala主机 impala-shell -i hadoop1 使用-q查询表中数据,并将数据写入文件中 impala-shell -q 'select * from student' -o output.txt 查询执行失败时继续执行 vim impala.sql select * from student; select * from stu; select * from student; impala-shell -f impala.sql; impala-shell -c -f impala.sql; 在hive中创建表后,使用-r刷新元数据 create table stu(id int, name string); show tables; show tables; namestudent
impala-shell -r show tables; show tables namestustudent
显示查询执行计划 impala-shell -p select * from student;

所谓执行计划,即在查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案: 6. 去格式化输出

impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt 7. impala的内部shell 选项描述help显示帮助信息explain显示执行计划profile(查询完成后执行) 查询最近一次查询的底层信息shell不退出impala-shell执行shell命令version显示版本信息(同于impala-shell -v)connect连接impalad主机,默认端口21000(同于impala-shell -i)refresh增量刷新元数据库invalidate metadata全量刷新元数据库(慎用)(同于 impala-shell -r)history历史命令
查看执行计划 explain select * from student; 查询最近一次查询的底层信息 select count(*) from student; profile; 查看hdfs及linux文件系统 shell hadoop fs -ls /; shell ls -al ./; 刷新指定表的元数据 load data local inpath '/opt/module/datas/student.txt' into table student; # 这句话需要在hive中执行, hive可以加载本地数据, impala只能加载hdfs上的数据 # 且 impala没有权限想hive的表中load 数据, 如果想加载数据, 需要将hdfs的写权限关闭! select * from student; refresh student; select * from student; 查看历史命令 history; 8. impala的数据类型 Hive数据类型Impala数据类型长度TINYINTTINYINT1byte有符号整数SMALINTSMALINT2byte有符号整数INTINT4byte有符号整数BIGINTBIGINT8byte有符号整数BOOLEANBOOLEAN布尔类型,true或者falseFLOATFLOAT单精度浮点数DOUBLEDOUBLE双精度浮点数STRINGSTRING字符系列。可以指定字符集。可以使用单引号或者双引号。TIMESTAMPTIMESTAMP时间类型BINARY不支持字节数组

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

9. impala的DDL操作 创建数据库

1.创建命令

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

注:Impala不支持WITH DBPROPERTIE…语法

错误演示 create database db_hive WITH DBPROPERTIES('name' = 'ttt'); ERROR: AnalysisException: Syntax error in line 2: WITH DBPROPERTIES('name' = 'ttt') ^ Encountered: WITH Expected: COMMENT, LOCATION

###查询数据库

显示数据库 show databases; show databases like 'hive*'; namecommenthive_db
desc database hive_db; namelocationcommenthive_db
删除数据库 drop database hive_db; drop database hive_db cascade;

注: Impala不支持alter database语法 当数据库被 USE 语句选中时,无法删除

创建表 管理表 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'; desc formatted student2; 外部表 create external table stu_external( id int, name string) row format delimited fields terminated by '\t' ; 分区表 创建分区表 create table stu_par(id int, name string) partitioned by (month string) row format delimited fields terminated by '\t'; 向表中导入数据 # 增加分区 alter table stu_par add partition (month='201810'); # load数据 load data inpath '/student.txt' into table stu_par partition(month='201810'); # 通过查询插入数据 insert into table stu_par partition (month = '201811') select * from student;

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

查询分区表中的数据 select * from stu_par where month = '201811'; 增加多个分区 alter table stu_par add partition (month='201812') partition (month='201813'); 删除分区 alter table stu_par drop partition (month='201812');

6.查看分区

show partitions stu_par; 10. impala DML操作 数据导入

注意:impala不支持load data local inpath… , 只能从HDFS上加载数据, 且需要给impala写数据的权限才能成功操作, 所以建议加载数据时通过hive来操作!

数据导出

1.impala不支持insert overwrite…语法导出数据 2.impala 数据导出一般使用 impala -o

impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt

Impala 不支持export和import命令

11. impala DQL操作 基本的语法跟hive的查询语句大体一样Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BYImpala中不支持分桶表Impala不支持COLLECT_SET(col)和explode(col)函数Impala支持开窗函数 select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) from business; 12 函数 自定义函数

1.创建一个Maven工程Hive 2.导入依赖

<dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>2.1.1</version> </dependency> </dependencies>

3.创建一个类

import org.apache.hadoop.hive.ql.exec.UDF; public class Lower extends UDF { public String evaluate (final String s) { if (s == null) { return null; } return s.toLowerCase(); } }

4.打成jar包上传到服务器/opt/module/jars/udf.jar 5. 将jar包上传到hdfs的指定目录

hadoop fs -put hive_udf-0.0.1-SNAPSHOT.jar / 创建函数 create function mylower(string) returns string location '/hive_udf-0.0.1-SNAPSHOT.jar' symbol='com.xxx.hive_udf.Hive_UDF'; 使用自定义函数 select ename, mylower(ename) from emp;

8.通过show functions查看自定义的函数

show functions;

Query: show functions

return typesignaturebinary typeis persistentSTRINGmylower(STRING)JAVAfalse
13. 存储和压缩 文件格式压缩编码Impala是否可直接创建是否可直接插入ParquetSnappy(默认), GZIP;Yes支持:CREATE TABLE, INSERT, 查询TextLZO,gzip,bzip2,snappyYes. 不指定 STORED AS 子句的 CREATE TABLE 语句,默认的文件格式就是未压缩文本支持:CREATE TABLE, INSERT, 查询。如果使用 LZO 压缩,则必须在 Hive 中创建表和加载数据RCFileSnappy, GZIP, deflate, BZIP2Yes.仅支持查询,在 Hive 中加载数据SequenceFileSnappy, GZIP, deflate, BZIP2Yes.仅支持查询,在 Hive 中加载数据

注:impala不支持ORC格式 1.创建parquet格式的表并插入数据进行查询

create table student2(id int, name string) row format delimited fields terminated by '\t' stored as PARQUET; insert into table student2 values(1001,'zhangsan'); select * from student2;

2.创建sequenceFile格式的表,插入数据时报错

insert into table student3 values(1001,'zhangsan'); Query: insert into table student3 values(1001,'zhangsan') Query submitted at: 2018-10-25 20:59:31 (Coordinator: http://hadoop1:25000) Query progress can be monitored at: http://hadoop1:25000/query_plan?query_id=da4c59eb23481bdc:26f012ca00000000 WARNINGS: Writing to table format SEQUENCE_FILE is not supported. Use query option ALLOW_UNSUPPORTED_FORMATS to override. 14 impala优化 尽量将StateStore和Catalog单独部署到同一个节点,保证他们正常通行。通过对Impala Daemon内存限制(默认256M)及StateStore工作线程数,来提高Impala的执行效率。SQL优化,使用之前调用执行计划选择合适的文件格式进行存储,提高查询效率。避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert…select…方式中间表的数据插入到最终表中)使用合适的分区技术,根据分区粒度测算使用compute stats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时,表中使用的查询。 compute stats student;

Query: compute stats student

summaryUpdated 1 partition(s) and 2 column(s).
网络io的优化: a.避免把整个数据发送到客户端b.尽可能的做条件过滤c.使用limit字句d.输出文件时,避免使用美化输出e.尽量少用全量元数据的刷新 使用profile输出底层信息计划,在做相应环境优化


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #impala #impala快速入门1 #什么是impala #2 #impala的优缺点3 #impala的架构组成4 #impala的运行原理5 #impala的监控管理6