linux cpu占用率如何看
296
2022-11-16
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)
@[TOC]
一、概述
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缺点
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通信来确认自己所在的节点是否健康以及是否可以接受新的任务请求。
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与其它对比
由上图测试结果可知,对于单用户查询,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 <sql> | 显示执行计划 | |
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 '\t' 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、数据导出
7)函数
跟hive和mysql函数差不多,像count、sum等内置函数,当然也支持自定义函数。有兴趣的小伙伴可以去练习一下,比较简单。
impala的简单使用就到这里了,有疑问的话,欢迎给我留言,后续会更新更多关于大数据的文章,请耐心等待~
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~