107-BigData-35Impala

上一篇:106-BigData-34CDH配置HA模式

一、Impala的基本概念

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

image.png

1.2 Impala的优缺点
1.2.1 优点
基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销。
无需转换为Mapreduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快。
使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
支持各种文件格式,如TEXTFILE 、SEQUENCEFILE 、RCFile、Parquet。
可以访问hive的metastore,对hive数据直接做数据分析。

image.png

1.2.2 缺点
对内存的依赖大,且完全依赖于hive。
实践中,分区超过1万,性能严重下降。
只能读取文本文件,而不能直接读取自定义二进制文件。
每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。

1.3 Impala的架构

image.png

从上图可以看出,Impala自身包含三个模块:Impalad、Statestore和Catalog,除此之外它还依赖Hive Metastore和HDFS。

  1. Impalad:

接收client的请求、Query执行并返回给中心协调节点;

子节点上的守护进程,负责向statestore保持通信,汇报工作。

  1. Catalog:

分发表的元数据信息到各个impalad中;

接收来自statestore的所有请求。

  1. Statestore:

负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息;

负责query的协调调度。

二、Impala的安装

2.1 Impala 的地址

  1. Impala的官网

http://impala.apache.org/

  1. Impala文档查看

http://impala.apache.org/impala-docs.html

  1. 下载地址

http://impala.apache.org/downloads.html

2.2 Impala****的安装方式

  • Cloudera Manager(CDH首推)
  • 手动安装

下面我们使用Cloudera Manager安装Impala

1.在主页中点击添加服务

image.png

2.选择Impala服务

image.png

3、进行角色分配

image.png

4、注意:最好将StateStore和CataLog Sever单独部署在同一节点上。

5.配置Impala

image.png

6.启动Impala

image.png

7.安装成功

image.png

2.3 Impala 的监护管理

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

• 查看StateStore

http://bigdata11:25020/

• 查看Catalog

http://bigdata11:25010/

2.4 Impala****的初体验

1.启动Impala

[root@bigdata11 ~]# impala-shell

2.查看数据库

[bigdata11:21000] > show databases;

3.打开默认数据库

[bigdata11:21000] > use default;

4.显示数据库中的表

[bigdata11:21000] > show tables;

  1. 创建一张student表

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

6.向表中导入数据

[bigdata12:21000] > load data inpath '/student.txt' into table student;

注意:

  1. 关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限

[hdfs@bigdata12 ~]$ hadoop fs -chmod 777 /

  1. Impala不支持将本地文件导入到表中

会发生错误:load local data inpath '/opt/student.txt' into table student;

7.查询

[bigdata12:21000] > select * from student;

8.退出impala

[bigdata12:21000] > quit;

三、Impala的操作命令

3.1 Impala 的外部 shell

image.png

连接指定bigdata12的impala主机
[root@bigdata11 datas]# impala-shell -i bigdata12
使用-q查询表中数据,并将数据写入文件中
[hdfs@bigdata12 ~]impala-shell -q 'select * from student' -o output.txt 查询执行失败时继续执行 [hdfs@bigdata12 ~] vim impala.sql
select * from student;
select * from stu;
select * from student;
[hdfs@bigdata12 ~]impala-shell -f impala.sql; [hdfs@bigdata12 ~] impala-shell -c -f impala.sql;
在hive中创建表后,使用-r刷新元数据
hive> create table stu(id int, name string);
[bigdata12:21000] > show tables;
Query: show tables
+---------+
| name |
+---------+
| student |
+---------+
[hdfs@bigdata12 ~]impala-shell -r [bigdata12:21000] > show tables; Query: show tables +---------+ | name | +---------+ | stu | | student | +---------+ 显示查询执行计划 [hdfs@bigdata12 ~] impala-shell -p
[bigdata12:21000] > select * from student;
去格式化输出
[root@bigdata12 ~]# impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt
注:output.txt 是相对于Linux本地的相对路径,并且是以覆盖的方式写入到此文件中

[root@bigdata12 ~]# cat output.txt
1001 tignitgn
1002 yuanyuan
1003 haohao
1004 yunyun

3.2 Impala的内部shell

image.png

查看执行计划
explain select * from student;
查询最近一次查询的底层信息
[bigdata12:21000] > select count(*) from student;
[bigdata12:21000] > profile;
查看hdfs及linux文件系统
[bigdata12:21000] > shell hadoop fs -ls /;
[bigdata12:21000] > shell ls -al ./;
刷新指定表的元数据
hive> load data local inpath '/opt/module/datas/student.txt' into table student;
[bigdata12:21000] > select * from student;
[bigdata12:21000] > refresh student;
[bigdata12:21000] > select * from student;
查看历史命令
[bigdata12:21000] > history;

四、Impala的数据类型

image.png

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

五、DDL数据定义

5.1 创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path];
注:Impala不支持WITH DBPROPERTIE…语法,但是在Hive中可以
[bigdata12:21000] > create database db_hive WITH DBPROPERTIES('name' = 'Andy');
Query: create database db_hive
WITH DBPROPERTIES('name' = 'ttt')
ERROR: AnalysisException: Syntax error in line 2:
WITH DBPROPERTIES('name' = 'ttt')
^
Encountered: WITH
Expected: COMMENT, LOCATION
5.2查询数据库
5.2.1显示数据库
[bigdata12:21000] > show databases;
[bigdata12:21000] > show databases like 'hive';
Query: show databases like 'hive
'
+---------+---------+
| name | comment |
+---------+---------+
| hive_db | |
+---------+---------+
[bigdata12:21000] > desc database hive_db;
Query: describe database hive_db
+---------+----------+---------+
| name | location | comment |
+---------+----------+---------+
| hive_db | | |
+---------+----------+---------+

5.2.2删除数据库
[bigdata12:21000] > drop database hive_db;
[bigdata12:21000] > drop database hive_db cascade;
注:
Impala不支持alter database语法
当数据库被 USE 语句选中时,无法删除
5.3创建表
5.3.1 管理表
[bigdata12: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';
[bigdata12:21000] > desc formatted student2;
5.3.2 外部表
[bigdata12:21000] >

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

5.4分区表
5.4.1 创建分区表
[bigdata12:21000] >

create table stu_par(id int, name string)
partitioned by (month string)
row format delimited
fields terminated by '\t';
5.4.2 向表中导入数据
[bigdata12:21000] > alter table stu_par add partition (month='201810');
[bigdata12:21000] > load data inpath '/student.txt' into table stu_par partition(month='201910');
[bigdata12:21000] > insert into table stu_par partition (month = '201811') select * from student;
注意:
如果分区没有,load data导入数据时,不能自动创建分区。
5.4.3 查询分区表中的数据
[bigdata12:21000] > select * from stu_par where month = '201811';
5.4.4 增加多个分区
[bigdata12:21000] > alter table stu_par add partition (month='201812') partition (month='201813');
5.4.5 删除分区
[bigdata12:21000] > alter table stu_par drop partition (month='201812');
5.4.5查看分区
[bigdata12:21000] > show partitions stu_par;
5.5 创建视图

#创建视图
create view if not exists stu_view 
as select name from student;
#展示视图 
show tables;
#查询视图
select * from stu_view;
#更改视图
alter view stu_view as select id from student;
#删除视图
drop view stu_view;
5.6 常用SQL
5.6.1 insert 语句
#创建表
create table person(id int ,name string, age int);
#插入数据
insert into person values(1,'A',18);
insert into person values(1,'A_1',20);
insert into person values(2,'B',29);
insert into person values(3,'C',16);
insert into person values(4,'D',40);

5.6.2 ORDER BY 语句

select * from person order by age desc;
5.6.3 GROUP BY 语句

insert into person values(1,'A',21);

select name,sum(age) from person group by name;
5.6.4 Having 语句

select name,sum(age) from person
group by name having sum(age) >30;
5.6.5 Limit 语句

select * from person order by id limit 3;
5.6.6 offset 语句

select * from person order by id limit 3 offset 1;

image.png

5.6.7 union 语句

select * from stu_view union select name from person;

六、DML数据操作

6.1 数据导入(基本同hive类似)
注意:impala不支持load data local inpath…
6.2 数据的导出
1.impala不支持insert overwrite…语法导出数据
2.impala 数据导出一般使用 impala -o
[root@bigdata12 ~]# impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt
[root@bigdata12 ~]# cat output.txt
1001 tignitgn
1002 yuanyuan
1003 haohao
1004 yunyun
Impala 不支持export和import命令

七、查询

基本的语法跟hive的查询语句大体一样
Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BY
Impala中不支持分桶表
Impala不支持COLLECT_SET(col)和explode(col)函数
Impala支持开窗函数
[bigdata12:21000] > select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) from business;

八、函数

8.1 自定义函数
1.创建一个Maven工程Hive
2.导入依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
        </dependency>
</dependencies>

3.创建一个类

package com.itstar.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();
    }
}

4.打成jar包上传到服务器/opt/module/jars/udf.jar

  1. 将jar包上传到hdfs的指定目录
    hadoop fs -put hive_udf-0.0.1-SNAPSHOT.jar /
  2. 创建函数
    [bigdata12:21000] > create function mylower(string) returns string location '/Hive-1.0-SNAPSHOT.jar' symbol='Lower';
  3. 使用自定义函数
    [bigdata12:21000] > select id,mylower(name) from student;
    8.通过show functions查看自定义的函数
    [bigdata12:21000] > show functions;
    Query: show functions
    +-------------+-----------------+-------------+---------------+
    | return type | signature | binary type | is persistent |
    +-------------+-----------------+-------------+---------------+
    | STRING | mylower(STRING) | JAVA | false |
    +-------------+-----------------+-------------+---------------+

九、存储和压缩

image.png

注:impala不支持ORC格式
创建parquet格式的表并插入数据进行查询
[bigdata13:21000] >

create table student3(id int, name string)
row format delimited
fields terminated by '\t'
stored as PARQUET;

[bigdata13:21000] > insert into table student3 values(1001,'zhangsan');
[bigdata13:21000] > select * from student3;

十、优化

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

下一篇:108-BigData-36通话运营项目

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和H...
    时待吾阅读 2,409评论 0 8
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,008评论 0 0
  • Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本...
    felix521阅读 1,253评论 0 0
  • 其实,我也不知道自己想要什么,不知道自己能做什么,好像什么都无所谓似的,又好像什么都做不了,这几日天天写自...
    二十三文阅读 171评论 0 1
  • 今天晚上,我正在写作业。到了八点多,妈妈叫我出来看亚运会开幕式,我很高兴的跑出来。 开幕式已经开始了,我...
    李文骏1一L阅读 103评论 0 0