大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」,希望您对编程的造诣更进一步.
- 一、概述
- 1)Impala优点
- 2)Impala缺点
- 二、Impala架构
- 1)Impala组件组成
- 1、Client
- 2、Impalad
- 3、Statestore
- 4、Catalog
- 5、数据存储服务
- 2)Impalad服务的三种角色
- 3)Impala运行原理
- 1、启动服务时执行的操作
- 2、查询SQL的运行流程
- 3、数据计算流程
- 1)Impala组件组成
- 三、Impala环境部署(CDH集成)
- 1)添加服务
- 2)自定义角色分配
- 3)审核更改
- 4)安装完成
- 5)启动服务
- 6)验证
- 四、Impala与其它对比
- 五、Impala shell简单使用
- 1)Impala 外部shell(非交互式)
- 2)Impala内部shell(交互式)
- 3)Impala数据类型
- 4)DDL数据定义
- 1、创建数据库
- 2、查询数据库
- 3、删除数据库
- 4、创建表
- 5、创建分区表
- 5)DML数据操作
- 1、向表中导数据
- 2、数据导出
- 6)DQL数据查询
- 7)函数
一、概述
Impala 直接针对存储在 HDFS、HBase或 Amazon Simple Storage Service (S3)中的 Apache Hadoop 数据提供快速的交互式 SQL 查询。Impala是一个基于Hive、分布式、大规模并行处理(MPP:Massively Parallel Processing)的数据库引擎。除了使用相同的统一存储平台外,Impala 还使用与 Apache Hive 相同的元数据、SQL 语法(Hive SQL)、ODBC 驱动程序和用户界面(Hue 中的 Impala 查询 UI)。关于Hive的介绍,可以看我之前的文章:大数据Hadoop之——数据仓库Hive。Impala官方文档
- Impala 是可用于查询大数据的工具的补充。Impala 不会替代基于 MapReduce 构建的批处理框架,例如 Hive。Hive 和其他基于 MapReduce 构建的框架最适合长时间运行的批处理作业,例如涉及提取、转换和加载 (ETL) 类型作业的批处理。
- Impala 于 2017 年 11 月 15 日从 Apache 孵化器毕业。在文档中以前称为“Cloudera Impala”的地方,现在正式名称为“Apache Impala”。
1)Impala优点
- 基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销。
- 无需转换为Mapreduce,直接访问存储在HDFS, HBase中的数据进行作业调度,速度快。
- 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
- 支持各种文件格式,如TEXTFILE、SEQUENCEFILE、RCFile. Parqueto
- 可以访问hive的metastore,对hive数据直接做数据分析。
2)Impala缺点
- 对内存的依赖大,且完全依赖于hive。
- 实践中,分区超过1万,性能严重下降。
- 只能读取文本文件,而不能直接读取自定义二进制文件。
- 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。
二、Impala架构
1)Impala组件组成
一张图带你了解全貌:
下面的概述更官方
1、Client
客户端——包括 Hue、ODBC 客户端、JDBC 客户端和 Impala Shell 在内的实体都可以与 Impala 交互。这些接口通常用于发出查询或完成管理任务,例如连接到 Impala。
2、Impalad
Impala的核心组件是Impala守护进程,它的物理代表是impalad进程。Impala守护进程的几个关键功能是:
- 读写数据文件。
- 接受从impala-shell命令、Hue、JDBC或ODBC传输的查询。
- 并行化查询并在集群中分配工作。
- 将中间查询结果传回中央协调器。
【温馨提示】
- HDFS和Impala是共存的,每个Impala守护进程和DataNode运行在同一个主机上。
- Impala单独部署在计算集群中,可以远程从HDFS、S3、ADLS等读取数据。
3、Statestore
Statestore服务主要负责metadata的广播,检查集群中所有Impala守护进程的健康状况,并不断地将其发现传递给每一个这些守护进程。它在物理上由一个名为stateststored的守护进程表示。该进程只需要在集群中的一台主机上运行。如果一个Impala守护进程由于硬件故障、网络错误、软件问题或其他原因而离线,StateStore会通知所有其他的Impala守护进程,这样以后的查询就可以避免向这个不可达的Impala守护进程发出请求。
4、Catalog
Catalog 服务负责metadata的获取和DDL的执行,将Impala SQL语句的元数据更改传递给集群中的所有Impala守护进程。它在物理上由一个名为catalogd的守护进程表示。该进程只需要在集群中的一台主机上运行。因为请求是通过StateStore守护进程传递的,所以在同一主机上运行StateStore和Catalog服务是更好的。
当通过Impala发出的语句执行元数据更改时,catalog服务避免发出REFRESH和INVALIDATE METADATA语句。当你通过Hive创建表、加载数据等等时,在执行查询之前,你需要在Impala守护进程上发出REFRESH或INVALIDATE元数据。
5、数据存储服务
- HBase或HDFS——用于存储要查询的数据。
2)Impalad服务的三种角色
Impala的核心进程Impalad,部署在所有的数据节点上,接收客户端的查询请求,读写数据,并行执行来自集群中其他节点的查询请求,将中间结果返回给调度节点。调用节点将结果返回给客户端。Impalad进程通过持续与StateStore通信来确认自己所在的节点是否健康以及是否可以接受新的任务请求。
- Query Planner——Java编写的,解析SQL生成QueryPlanTree执行计划树。
- Query Coordinator——用户在Impala集群上的某个节点提交数据处理请求(例如impala-shell提交SQL),则该Impalad节点称为Coordinator Node(协调节点),负责定位数据位置,拆分请求(Fragment),将任务分解为多个可并行执行的小请求,发送这些请求到多个Query Executor,接收Query Executor处理后返回的数据并构建最终结果返回给用户。
- Query Executor——执行数据计算,比如scan,Aggregation,Merge等,返回数据。
3)Impala运行原理
1、启动服务时执行的操作
2、查询SQL的运行流程
3、数据计算流程
三、Impala环境部署(CDH集成)
这里通过CM安装方式集成到CDH,方便管理,CDH的安装可以看我之前的文章:
大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)
1)添加服务
2)自定义角色分配
3)审核更改
下一步就进入自动安装过程,时间有点久,耐心等待安装完即可
4)安装完成
5)启动服务
6)验证
$ impala-shell
show databases
四、Impala与其它对比
多用户如下图所示(引用自Apache Impala官网):
查询吞吐率如下图所示(引用自Apache Impala官网):
由上图测试结果可知,对于单用户查询,Impala比其它方案最多快13倍,平均快6.7倍。对于多用户查询,差距进一步拉大:Impala比其它方案最多快27.4倍,平均快18倍。
五、Impala shell简单使用
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 –default_db=default_db | 指定启动后使用的数据库,与建立连接后使用use语句选择数据库作用相同,如果没有指定,那么使用default数据库d |
-p, --show_profiles |
对shell中执行的每一个查询,显示其查询执行计划 |
-r or --refresh_after_connect |
建立连接后刷新 Impala 元数据,新版已经没有这个参数了。换成这样刷新:impala-shell -q "invalidate metadata" ,不刷新的话,就看不到新创建的库表了。 |
-B (–delimited) | 去格式化输出 |
–output_delimiter=character | 指定分隔符 |
–print_header | 打印列名 |
操作都是很简单,查看帮忙执行几个例子演示一下就行,这就不再演示了。主要是sql操作,sql的话,懂编程的人,应该对sql不陌生,也不是很难。
2)Impala内部shell(交互式)
标红的就是常用的
选项 | 描述 |
---|---|
help | 查看帮助信息 |
explain |
显示执行计划 |
profile | (查询完成后执行)查询最近一次查询的底层信息 |
shell <shell> |
不退出impala-shell执行shell命令 |
version | 显示版本信息(同于impala-shell -v) |
connects | 连接 impalad 主机,默认端口 21000 (同于 impala-shell -i) |
refresh <tablename> |
增量刷新元数据库 |
invalidate metadata |
全量刷新元数据库(慎用) |
history | 查看历史命令 |
3)Impala数据类型
Hive数据类型 | Impala数据类型 | 长度 |
---|---|---|
TINYINT | TINYINT | 1 byte有符言整数 |
SMALINT | SMALINT | 2 byte有符号整数 |
INT | INT | 4 byte有符号整数 |
BIGINT | BIGINT | 8 byte有符号整数 |
BOOLEAN | BOOLEAN | 布尔类型,true或者false |
FLOAT | FLOAT | 单精度浮点数 |
DOUBLE | DOUBLE | 双精度浮点数 |
STRINGS | STRINGS | 字符系列。可以指定字符集。可以使用单引号或者双引号。 |
TIMESTAMPS | TIMESTAMPS | 时间类型 |
BINARY | 不支持 | 字节数组 |
【温馨提示】Impala虽然支持array, map, struct复杂数据类型,但是支持并不完全,一般处理方法,将复杂类型转化为基本类型,通过hive创建表。
4)DDL数据定义
都是一些很基础的操作
1、创建数据库
create database db_name
【温馨提示】Impala不支持WITH DBPROPERTIE…语法
2、查询数据库
show databases;
3、删除数据库
drop database db_name
【温馨提示】Impala不支持修改数据库(alter database )
4、创建表
create table if not exists student(id int,name string);
show tables;
desc student;
show create table student;
5、创建分区表
create table stu_partion(id int,name string)
partitioned by (month string)
row format delimited
fields terminated by " "
show tables;
5)DML数据操作
1、向表中导数据
# 文件字段一tab分隔,上面创建表时定义了分隔符
$ cat > /tmp/student.txt << EOF
1 stu1
2 stu2
3 stu3
4 stu4
EOF
$ sudo -u hdfs hadoop fs -put /tmp/student.txt /tmp/
# 授权,要不然没有权限
$ sudo -u hdfs hadoop fs -chown impala:hive /tmp/student.txt
$ impala-shell
# 【温馨提示】hdfs集群上更改权限之后,一定要记住登录到impala-shell上使用invaladate metadata命令进行元数据更新,否则更改的权限在impala状态下是不生效的!!!,执行下面这句就行了。
invalidate metadata;
# 添加分区
alter table stu_partion add partition (month="20220415");
# 删除分区,这里不执行
alter table stu_partion drop partition (month="20220415");
# 加载数据,加载完,这个文件/tmp/student.txt会被删掉
load data inpath "/tmp/student.txt" into table stu_partion partition (month="20220415");
# 查看检查
select * from stu_partion;
【温馨提示】如果分区没有,load data 导入数据时,不能自动创建分区。还有就是不能到本地数据,只能到hdfs上的数据。
2、数据导出
impala 数据导出一般使用impala -o
$ impala-shell -q "select * from stu_partion" -B --output_delimiter=" " -o output.txt
一般DML由hive来操作,impala负责查询。
6)DQL数据查询
- 基本的语法跟hive的查询语句大体一样
- Impala 不支持 CLUSTER DISTRIBUTE BY; SORT BY*
- Impala中不支持分桶表
- Impala 不支持 COLLECT_SET(col)和 explode (col)函数
- Impala支持开窗函数
因为查询sql跟mysql的一样,所以这里就不演示了。
7)函数
跟hive和mysql函数差不多,像count、sum等内置函数,当然也支持自定义函数。有兴趣的小伙伴可以去练习一下,比较简单。
impala的简单使用就到这里了,有疑问的话,欢迎给我留言,后续会更新更多关于大数据的文章,请耐心等待~
原文地址:https://www.cnblogs.com/liugp/archive/2022/05/19/16290791.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5231.html