impalagzt

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

1.2 Impala的优缺点

1.3 Impala的组成

1.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客户端。
第2章 Impala的安装
2.1 Impala的地址

  1. Impala的官网
    http://impala.apache.org/
  2. Impala文档查看
    http://impala.apache.org/impala-docs.html
  3. 下载地址
    http://impala.apache.org/downloads.html
    2.2 Impala的安装方式
    Impala有两种安装方式:
  4. 手动安装。
  5. CDH安装(推荐)。
    下面我们使用Cloudera Manager安装Impala:
    1)在主页中点击添加服务

2)选择Impala服务

3)进行角色分配

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

5)启动Impala

6)安装成功

2.3 Impala 的监护管理
  可以通过下面的链接来访问Impala的监护管理页面:
1.查看StateStore
    http://hadoop102:25020/
 2.查看Catalog
http://hadoop102:25010/
2.4 Impala的初体验
1.启动Impala
[root@hadoop102 ~]# impala-shell
2.查看数据库
[hadoop102:21000] > show databases;
3.打开默认数据库
[hadoop102:21000] > use default;
4.显示数据库中的表
[hadoop102:21000] > show tables;
5.创建一张student表
[hadoop102:21000] > create table student(id int, name string)
> row format delimited
> fields terminated by ‘\t’;
6.向表中导入数据
[hadoop103:21000] > load data inpath ‘/student.txt’ into table student;
注意:

  1. 关闭(修改hdfs的配置dfs.permissions为false)或修改hdfs的权限,否则impala没有写的权限
    [hdfs@hadoop103 ~]$ hadoop fs -chmod 777 /
  2. Impala不支持将本地文件导入到表中
    7.查询
    [hadoop103:21000] > select * from student;
    8.退出impala
    [hadoop103:21000] > quit;
    第3章 Impala的操作命令
    3.1 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. 连接指定hadoop103的impala主机
    [root@hadoop102 datas]# impala-shell -i hadoop103
  2. 使用-q查询表中数据,并将数据写入文件中
    [hdfs@hadoop103 ~]$ impala-shell -q ‘select * from student’ -o output.txt
  3. 查询执行失败时继续执行
    [hdfs@hadoop103 ~]$ vim impala.sql
    select * from student;
    select * from stu;
    select * from student;
    [hdfs@hadoop103 ~]$ impala-shell -f impala.sql;
    [hdfs@hadoop103 ~]$ impala-shell -c -f impala.sql;
  4. 在hive中创建表后,使用-r刷新元数据
    hive> create table stu(id int, name string);
    [hadoop103:21000] > show tables;
    Query: show tables
    ±--------+
    | name |
    ±--------+
    | student |
    ±--------+
    [hdfs@hadoop103 ~]$ impala-shell -r
    [hadoop103:21000] > show tables;
    Query: show tables
    ±--------+
    | name |
    ±--------+
    | stu |
    | student |
    ±--------+
  5. 显示查询执行计划
    [hdfs@hadoop103 ~]$ impala-shell -p
    [hadoop103:21000] > select * from student;
    所谓执行计划,即在查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案:
  6. 去格式化输出
    [root@hadoop103 ~]# impala-shell -q ‘select * from student’ -B --output_delimiter="\t" -o output.txt
    [root@hadoop103 ~]# cat output.txt
    1001 tignitgn
    1002 yuanyuan
    1003 haohao
    1004 yunyun
    3.2 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 历史命令
  7. 查看执行计划
    explain select * from student;
  8. 查询最近一次查询的底层信息
    [hadoop103:21000] > select count(*) from student;
    [hadoop103:21000] > profile;
  9. 查看hdfs及linux文件系统
    [hadoop103:21000] > shell hadoop fs -ls /;
    [hadoop103:21000] > shell ls -al ./;
  10. 刷新指定表的元数据
    hive> load data local inpath ‘/opt/module/datas/student.txt’ into table student;
    [hadoop103:21000] > select * from student;
    [hadoop103:21000] > refresh student;
    [hadoop103:21000] > select * from student;
  11. 查看历史命令
    [hadoop103:21000] > history;
    第4章 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创建表。
    第5章 DDL数据定义
    5.1 创建数据库
    1.创建命令
    CREATE DATABASE [IF NOT EXISTS] database_name
    [COMMENT database_comment]
    [LOCATION hdfs_path];
    注:Impala不支持WITH DBPROPERTIE…语法
  12. 错误演示
    [hadoop103:21000] > create database db_hive
    > WITH DBPROPERTIES(‘name’ = ‘ttt’);
    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显示数据库
    [hadoop103:21000] > show databases;
    [hadoop103:21000] > show databases like ‘hive*’;
    Query: show databases like ‘hive*’
    ±--------±--------+
    | name | comment |
    ±--------±--------+
    | hive_db | |
    ±--------±--------+
    [hadoop103:21000] > desc database hive_db;
    Query: describe database hive_db
    ±--------±---------±--------+
    | name | location | comment |
    ±--------±---------±--------+
    | hive_db | | |
    ±--------±---------±--------+

5.2.2删除数据库
[hadoop103:21000] > drop database hive_db;
[hadoop103:21000] > drop database hive_db cascade;
注:
Impala不支持alter database语法
当数据库被 USE 语句选中时,无法删除
5.3创建表
5.3.1 管理表
[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;
5.3.2 外部表
[hadoop103:21000] > create external table stu_external(
> id int,
> name string)
> row format delimited fields terminated by ‘\t’ ;
5.4分区表
5.4.1 创建分区表
[hadoop103:21000] > create table stu_par(id int, name string)
> partitioned by (month string)
> row format delimited
> fields terminated by ‘\t’;
5.4.2 向表中导入数据
[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;
注意:
如果分区没有,load data导入数据时,不能自动创建分区。
5.4.3 查询分区表中的数据
[hadoop103:21000] > select * from stu_par where month = ‘201811’;
5.4.4 增加多个分区
[hadoop103:21000] > alter table stu_par add partition (month=‘201812’) partition (month=‘201813’);
5.4.5 删除分区
[hadoop103:21000] > alter table stu_par drop partition (month=‘201812’);
5.4.5查看分区
[hadoop103:21000] > show partitions stu_par;
第6章 DML数据操作
6.1 数据导入(基本同hive类似)
注意:impala不支持load data local inpath…
6.2 数据的导出
1.impala不支持insert overwrite…语法导出数据
2.impala 数据导出一般使用 impala -o
[root@hadoop103 ~]# impala-shell -q ‘select * from student’ -B --output_delimiter="\t" -o output.txt
[root@hadoop103 ~]# cat output.txt
1001 tignitgn
1002 yuanyuan
1003 haohao
1004 yunyun
Impala 不支持export和import命令
第7章 查询

  1. 基本的语法跟hive的查询语句大体一样
  2. Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BY
  3. Impala中不支持分桶表
  4. Impala不支持COLLECT_SET(col)和explode(col)函数
  5. Impala支持开窗函数
    [hadoop103:21000] > select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) from business;
    第8章 函数
    8.1 自定义函数
    1.创建一个Maven工程Hive
    2.导入依赖



    org.apache.hive
    hive-exec
    1.2.1


    3.创建一个类
    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();
}

}
4.打成jar包上传到服务器/opt/module/jars/udf.jar
5. 将jar包上传到hdfs的指定目录
hadoop fs -put hive_udf-0.0.1-SNAPSHOT.jar /
6. 创建函数
[hadoop103:21000] > create function mylower(string) returns string location ‘/hive_udf-0.0.1-SNAPSHOT.jar’ symbol=‘com.atguigu.hive_udf.Hive_UDF’;
7. 使用自定义函数
[hadoop103:21000] > select ename, mylower(ename) from emp;
8.通过show functions查看自定义的函数
[hadoop103:21000] > show functions;
Query: show functions
±------------±----------------±------------±--------------+
| return type | signature | binary type | is persistent |
±------------±----------------±------------±--------------+
| STRING | mylower(STRING) | JAVA | false |
±------------±----------------±------------±--------------+
第9章 存储和压缩
文件格式 压缩编码 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格式的表并插入数据进行查询
[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;
2.创建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.
第10章 优化
1、 尽量将StateStore和Catalog单独部署到同一个节点,保证他们正常通行。
2、 通过对Impala Daemon内存限制(默认256M)及StateStore工作线程数,来提高Impala的执行效率。
3、 SQL优化,使用之前调用执行计划
4、 选择合适的文件格式进行存储,提高查询效率。
5、 避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert…select…方式中间表的数据插入到最终表中)
6、 使用合适的分区技术,根据分区粒度测算
7、 使用compute stats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时,表中使用的查询。
[hadoop104:21000] > compute stats student;
Query: compute stats student
±----------------------------------------+
| summary |
±----------------------------------------+
| Updated 1 partition(s) and 2 column(s). |
±----------------------------------------+
8、 网络io的优化:
–a.避免把整个数据发送到客户端
–b.尽可能的做条件过滤
–c.使用limit字句
–d.输出文件时,避免使用美化输出
–e.尽量少用全量元数据的刷新
9、 使用profile输出底层信息计划,在做相应环境优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值