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;

注意:

  1. 关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限
  2. 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 打印列名
  1. 连接指定hadoop1的impala主机
impala-shell -i hadoop1
  1. 使用-q查询表中数据,并将数据写入文件中
impala-shell -q 'select * from student' -o output.txt
  1. 查询执行失败时继续执行
    vim impala.sql
select * from student;
select * from stu;
select * from student;
impala-shell -f impala.sql;
impala-shell -c -f impala.sql;
  1. 在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
  1. 显示查询执行计划
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 历史命令
  1. 查看执行计划
explain select * from student;
  1. 查询最近一次查询的底层信息
select count(*) from student;
profile;
  1. 查看hdfs及linux文件系统
shell hadoop fs -ls /;
shell ls -al ./;
  1. 刷新指定表的元数据
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;
  1. 查看历史命令
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…语法

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

###查询数据库

  1. 显示数据库
show databases;
show databases like 'hive*';
name comment
hive_db
desc database hive_db;
name location comment
hive_db
  1. 删除数据库
drop database hive_db;
drop database hive_db cascade;

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

创建表

  1. 管理表
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;
  1. 外部表
create external table stu_external(
id int,
name string)
row format delimited fields terminated by '\t' ;

分区表

  1. 创建分区表
create table stu_par(id int, name string)
partitioned by (month string)
row format delimited fields terminated by '\t';
  1. 向表中导入数据
# 增加分区
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导入数据时,不能自动创建分区。

  1. 查询分区表中的数据
select * from stu_par where month = '201811';
  1. 增加多个分区
alter table stu_par add partition (month='201812') partition (month='201813');
  1. 删除分区
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操作

  1. 基本的语法跟hive的查询语句大体一样
  2. Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BY
  3. Impala中不支持分桶表
  4. Impala不支持COLLECT_SET(col)和explode(col)函数
  5. 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 /
  1. 创建函数
create function mylower(string)
returns string
location '/hive_udf-0.0.1-SNAPSHOT.jar'
symbol='com.xxx.hive_udf.Hive_UDF';
  1. 使用自定义函数
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优化

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

Query: compute stats student

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

impala快速入门相关推荐

  1. ClickHouse快速入门

    ClickHouse快速入门 学习目标 1).ClickHouse数据库概述.应用场景OLAP分析技术框架比较 2).ClickHouse 快速入门安装部署.服务启动.基本client使用 3).Cl ...

  2. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  3. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  4. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  5. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  6. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  7. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  8. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  9. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

最新文章

  1. 阿里达摩院包揽AI领域六大权威榜单冠军:用人类的学习方式超越人类
  2. Filter若不写chain.doFilter(request,response)原Servlet路径代码不会被执行
  3. MySQL删除数据表
  4. 项目范围管理:项目范围管理的概念
  5. 计算机多媒体专业是什么专业,什么是计算机多媒体技术
  6. 基于win32的windows画板程序
  7. svnsync 服务器代码备份
  8. 北大计算机考研题一般出自哪里,北大计算机考研常见问题解答
  9. 【服务通知】微信小程序服务通知
  10. c语言memcmp函数详解,C语言之memcmp()函数
  11. 软件开发沉思录读书笔记
  12. 计算机组成原理实验箱D7,计算机组成原理与系统结构实验仪教学设备,上海求育...
  13. ubuntu的gnome桌面重启
  14. 花卡宝藏版2020版
  15. TD-SCDMA和2G互操作实现指导手册
  16. 苹果6如何截屏_iPhone截屏操作也分三六九等?
  17. 梅科尔工作室—罗森——鸿蒙笔记2
  18. 彻底凉了!腾讯知名软件全线下架,网友一片唏嘘。。。
  19. cpu对寄存器的访问速度最快
  20. 顺磁性和抗磁性物质的一个重要的特征

热门文章

  1. 【Java开发】注释//todo和//fixme实现待办提醒
  2. 【物联网开发】基于STM32和阿里云的室内温、湿、亮度监测系统(一)—— 物联网介绍和系统初步设计
  3. vue.js -- 获取dom元素的样式(非行内样式)
  4. 手把手教大家新电脑如何安装系统
  5. Spring框架中的核心技术之AOP
  6. Windwos下的互斥锁,事件以及事件的手动重置和自动重置的区别
  7. 254. Drop Eggs (扔鸡蛋经典题)
  8. 超简洁的十进制转十六进制
  9. 超级产品:零售争霸战,亚马逊和沃尔玛的线上线下竞争
  10. kindeditor html5视频,kindeditor编辑器插入mp4视频不显示及不过滤video的方法