impala快速入门
impala快速入门
- 1. 什么是impala ?
- 2. impala的优缺点
- 3. impala的架构组成
- 4. impala的运行原理
- 5. impala的监控管理
- 6. impala-shell
- 6. impala的外部shell操作
- 7. impala的内部shell
- 8. 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;
name |
---|
student |
impala-shell -r
show tables;
show tables
name |
---|
stu |
student |
- 显示查询执行计划
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数据类型 | 长度 |
---|---|---|
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创建表。
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*';
name | comment |
---|---|
hive_db |
desc database hive_db;
name | location | comment |
---|---|---|
hive_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 BY
- Impala中不支持分桶表
- 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 type | signature | binary type | is persistent |
---|---|---|---|
STRING | mylower(STRING) | JAVA | false |
13. 存储和压缩
文件格式 | 压缩编码 | 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格式
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
summary |
---|
Updated 1 partition(s) and 2 column(s). |
- 网络io的优化:
- a.避免把整个数据发送到客户端
- b.尽可能的做条件过滤
- c.使用limit字句
- d.输出文件时,避免使用美化输出
- e.尽量少用全量元数据的刷新
- 使用profile输出底层信息计划,在做相应环境优化
impala快速入门相关推荐
- ClickHouse快速入门
ClickHouse快速入门 学习目标 1).ClickHouse数据库概述.应用场景OLAP分析技术框架比较 2).ClickHouse 快速入门安装部署.服务启动.基本client使用 3).Cl ...
- Shiro第一个程序:官方快速入门程序Qucickstart详解教程
目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...
- 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧
异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...
- Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...
- 《iOS9开发快速入门》——导读
本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...
- OpenStack快速入门
OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...
最新文章
- 阿里达摩院包揽AI领域六大权威榜单冠军:用人类的学习方式超越人类
- Filter若不写chain.doFilter(request,response)原Servlet路径代码不会被执行
- MySQL删除数据表
- 项目范围管理:项目范围管理的概念
- 计算机多媒体专业是什么专业,什么是计算机多媒体技术
- 基于win32的windows画板程序
- svnsync 服务器代码备份
- 北大计算机考研题一般出自哪里,北大计算机考研常见问题解答
- 【服务通知】微信小程序服务通知
- c语言memcmp函数详解,C语言之memcmp()函数
- 软件开发沉思录读书笔记
- 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...
- ubuntu的gnome桌面重启
- 花卡宝藏版2020版
- TD-SCDMA和2G互操作实现指导手册
- 苹果6如何截屏_iPhone截屏操作也分三六九等?
- 梅科尔工作室—罗森——鸿蒙笔记2
- 彻底凉了!腾讯知名软件全线下架,网友一片唏嘘。。。
- cpu对寄存器的访问速度最快
- 顺磁性和抗磁性物质的一个重要的特征
热门文章
- 【Java开发】注释//todo和//fixme实现待办提醒
- 【物联网开发】基于STM32和阿里云的室内温、湿、亮度监测系统(一)—— 物联网介绍和系统初步设计
- vue.js -- 获取dom元素的样式(非行内样式)
- 手把手教大家新电脑如何安装系统
- Spring框架中的核心技术之AOP
- Windwos下的互斥锁,事件以及事件的手动重置和自动重置的区别
- 254. Drop Eggs (扔鸡蛋经典题)
- 超简洁的十进制转十六进制
- 超级产品:零售争霸战,亚马逊和沃尔玛的线上线下竞争
- kindeditor html5视频,kindeditor编辑器插入mp4视频不显示及不过滤video的方法