【Impala】概念、原理、内外部shell、建库建表、分区、查询、自定义函数、存储压缩
一、基本概念
1、介绍
对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能
2、优缺点
优点:基于内存运算,无需写入磁盘,无需转化为MR,支持Data Locality调度(数据和计算在一台机器进行)
缺点:完全依赖于hive,只能读取文本文件
3、组成
4、原理
二、Impala安装
1、地址
http://impala.apache.org/impala-docs.html
2、安装方式
手动安装与CDH安装-Cloudera Manager
添加服务、角色分配、配置、启动
3、监护管理
StateStore:http://hadoop102:25020/
Catalog:http://hadoop102:25010/
4、入门
启动:impala-shell
查看数据库与表:show databases; / show tables;
导入数据:load data inpath '/student.txt' into table student;
修改hdfs的权限
三、操作命令
1、外部shell
连接指定主机:impala-shell -i hadoop103
查询表中数据并写入文件:impala-shell -q 'select * from student' -o output.txt
建表后刷新元数据:impala-shell -r
显示执行计划:impala-shell -p
去格式化输出:impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt
2、内部shell
查看执行计划:explain select * from student;
查询最近一次的底层信息:profile;
刷新元数据:refresh student;
四、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 |
不支持 |
字节数组 |
五、DDL数据定义
1、创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path];
2、查询数据库
显示数据库
show databases like 'hive*';
desc database hive_db;
删除数据库
drop database hive_db cascade;
3、创建表
管理表
[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;
外部表
[hadoop103:21000] > create external table stu_external( > id int, > name string) > row format delimited fields terminated by '\t' ;
4、分区表
创建分区表
[hadoop103:21000] > create table stu_par(id int, name string) > partitioned by (month string) > row format delimited > fields terminated by '\t';
表中导入数据
[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;
查询数据
增加分区
删除分区
查看分区:show partitions stu_par;
六、DML数据操作
1、数据导入
2、数据导出
impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt
七、查询
与hive语法相似
八、函数
1、自定义函数
导入依赖hive-exec
创建类并打包
package com.atguigu.hive; 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(); } }
创建函数:create function mylower(string) returns string location '/hive_udf-0.0.1-SNAPSHOT.jar' symbol='com.atguigu.hive_udf.Hive_UDF';
使用函数:select ename, mylower(ename) from emp;
通过show functions查看自定义的函数
九、存储和压缩
文件格式 |
压缩编码 |
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 中加载数据 |
创建parquet格式的表并插入数据进行查询
[hadoop104:21000] > create table student2(id int, name string) > row format delimited > fields terminated by '\t' > stored as PARQUET; [hadoop104:21000] > insert into table student2 values(1001,'zhangsan'); [hadoop104:21000] > select * from student2;
创建sequenceFile格式的表,插入数据时报错
[hadoop104:21000] > 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://hadoop104:25000) Query progress can be monitored at: http://hadoop104: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.
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15635522.html