大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」一、概述 Impala 直接针对存储在 HDFS、HBase或 Amazon Simple Storage Service (S3)中的 Apache Hadoop 数据提供快速的交互式 SQL 查询

大数据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、数据计算流程
  • 三、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架构

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

1)Impala组件组成

一张图带你了解全貌:
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(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通信来确认自己所在的节点是否健康以及是否可以接受新的任务请求。

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

  • 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、启动服务时执行的操作

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

2、查询SQL的运行流程

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

3、数据计算流程

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

三、Impala环境部署(CDH集成)

这里通过CM安装方式集成到CDH,方便管理,CDH的安装可以看我之前的文章:
大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)

1)添加服务

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

2)自定义角色分配

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

3)审核更改

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

下一步就进入自动安装过程,时间有点久,耐心等待安装完即可
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

4)安装完成

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

5)启动服务

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

6)验证

$ impala-shell
show databases

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

四、Impala与其它对比

多用户如下图所示(引用自Apache Impala官网):
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

查询吞吐率如下图所示(引用自Apache Impala官网):
大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(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 查看历史命令

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

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;

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

5、创建分区表

create table stu_partion(id int,name string) 
partitioned by (month string)
row format delimited
fields terminated by "	"

show tables;

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

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;

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

【温馨提示】如果分区没有,load data 导入数据时,不能自动创建分区。还有就是不能到本地数据,只能到hdfs上的数据。

2、数据导出

impala 数据导出一般使用impala -o

$ impala-shell -q "select * from stu_partion" -B --output_delimiter="	" -o output.txt

大数据Hadoop之——基于Hive的内存型SQL查询引擎Impala(Impala环境部署)「终于解决」

一般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

(0)
上一篇 2023-05-18
下一篇 2023-05-18

相关推荐

  • 使用Anaconda进行Python开发

    使用Anaconda进行Python开发随着Python的日益普及,越来越多的人开始选择使用Python进行编程,而Anaconda作为一个强大的Python开发环境,被越来越多的Python开发者所青睐。

    2024-08-28
    28
  • 使用Python命令行解决问题

    使用Python命令行解决问题Python是一种高级编程语言,可用于多种用途,包括Web开发、数据科学、人工智能等。Python在解决各种问题时都能发挥巨大的作用,这也是它成为了越来越多开发者的首选语言之一。不仅如此,Python还可以通过命令行轻松处理和解决各种问题。在这篇文章中,我们将介绍在Python中使用命令行解决问题的方法。

    2024-01-01
    113
  • JDBC+C3P0+DBCP 基本使用[通俗易懂]

    JDBC+C3P0+DBCP 基本使用[通俗易懂]1.概述 这篇文章主要说了JDBC的基本使用,包括Statement,PreparedStatement,JDBC的连接,Mysql创建用户创建数据表,C3P0的连接与配置,DBCP的连接与配置. …

    2022-12-20
    148
  • jmeter连接数据库并使用「建议收藏」

    jmeter连接数据库并使用「建议收藏」
    1、添加Mysql jdbc驱动包 1)下载驱动包 2)测试计划里面添加驱动包到classpath 2、添加JDBC Connection Configur…

    2023-04-04
    164
  • 如何彻底卸载Anaconda3

    如何彻底卸载Anaconda3Anaconda是一个数据科学和机器学习的开发环境,已经被越来越多的数据科学家和计算机科学家使用。如果您要卸载Anaconda,并确保其在系统中被完全删除,那么本文将向您介绍如何进行彻底卸载。

    2024-06-16
    54
  • 第五天MYSQL

    第五天MYSQL分页查询、联合查询、DML(修改、删除、插入语句)

    2023-02-26
    129
  • sqlserver执行存储过程_sql server2008 r2

    sqlserver执行存储过程_sql server2008 r2从监控工具DPA中发现一个数据库(SQL Server 2008 R2)的等待事件突然彪增,下钻分析发现数据库执行存储过程sp_MailItemResultSets时,引起了非常严重的等待(High

    2023-02-10
    167
  • Plink v0.1.0 发布——基于Flink的流处理平台[通俗易懂]

    Plink v0.1.0 发布——基于Flink的流处理平台[通俗易懂]Plink是一个基于Flink的流处理平台,旨在基于 [Apache Flink]封装构建上层平台。 提供常见的作业管理功能。如作业的创建,删除,编辑,更新,保存,启动,停止,重启,管理,多作业模板配

    2023-03-17
    150

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注