impala详解

article/2025/9/21 7:02:57

0 简介

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和**HBase**中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大特点就是它的快速!

简单概括impala的主要作用:

mpala最大的特点就是可以使用自己的处理引擎来使用SQL分析HIVE,HDFS中的数据 , 处理速度更加高效!!!

1 读取hbase和hdfs和hive映射的数据

2 impala依赖hive  共享元数据  , impala的表和hive的表可以同步

3 impala支持窗口函数和自定义函数

4 支持SQL , 比hive快

1.什么是Impala:

Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。

换句话说,Impala是性能最高的SQL引擎(提供类似RDBMS的体验),它提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。

2.impala的优点和缺点:

2.1 优点:

1) Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。

2) 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。

3) Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。

4) 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。

5) 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。

6) 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销 

2.2 缺点:

1) Impala不提供任何对序列化和反序列化的支持。

2) Impala只能读取文本文件,而不能读取自定义二进制文件。

3) 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新

3.impala的功能:

1.Impala可以根据Apache许可证作为开源免费提供。

2.Impala支持内存中数据处理,它访问/分析存储在Hadoop数据节点上的数据,而无需数据移动。

3.Impala为HDFS中的数据提供了更快的访问。

4.可以将数据存储在Impala存储系统中,如Apache HBase和Amazon s3。

5.Impala支持各种文件格式,如LZO,序列文件,Avro,RCFile和Parquet。

6.使用impala,您可以使用传统的SQL知识以极快的速度处理存储在HDFS中的数据。

7.由于在数据驻留(在Hadoop集群上)时执行数据处理,因此在使用Impala时,不需要对存储在Hadoop上的数据进行数据转换和数据移动。

8.使用Impala,您可以访问存储在HDFS,HBase和Amazon s3中的数据,而无需了解Java(MapReduce作业)。您可以使用SQL查询的基本概念访问它们。

9.为了在业务工具中写入查询,数据必须经历复杂的提取 - 变换负载(ETL)周期。但是,使用Impala,此过程缩短了。加载和重组的耗时阶段通过新技术克服,如探索性数据分析和数据发现,使过程更快。

 

 4.impala的外部shell

4.1 impala中shell常用的一些内部命令

refresh+表名   增量刷新元数据库(指定某张表的数据进行刷新)

invalidate metadata:全量刷新元数据库(慎用,刷新所有表)(同于 impala-shell -r)

explain select * from student  查看sql的执行计划 主要用于优化sql;

impala登陆web页面:http://主机名:8888

5. hive和impala中的数据类型的

 6.impala创建分区表的方法:

create table stb_par(
id int, 
name string
)
partitioned by (month string)
row format delimited fields terminated by '\t';
-- 添加分区 
alter table stb_par add partition (month='202010');
alter table stu_par add partition (month='202011') partition (month='202012');
-- 删除分区
alter table stu_par drop partition (month='202011');
-- 查看表中的分区
[localhost:21000] default> show  partitions  stb_par ;
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+
| month  | #Rows | #Files | Size | Bytes Cached | Cache Replication | Format | Incremental stats | Location                                                  |
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+
| 202010 | -1    | 0      | 0B   | NOT CACHED   | NOT CACHED        | TEXT   | false             | hdfs://doit:8020/user/hive/warehouse/stb_par/month=202010 |
| Total  | -1    | 0      | 0B   | 0B           |                   |        |                   |                                                           |
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+
load data local inpath '/data/stu.txt' into table stb_par partition(month='202010') ; -- 不支持本地导入数据
load data  inpath '/data/stu.txt' into table stb_par partition(month='202010') ; --只能从HDFS上导入数据到分区表中
insert into table stb_par partition (month = '202010') select id , name from stb_par;
[localhost:21000] default> show  partitions stb_par ;
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+
| month  | #Rows | #Files | Size | Bytes Cached | Cache Replication | Format | Incremental stats | Location                                                  |
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+
| 202010 | -1    | 2      | 36B  | NOT CACHED   | NOT CACHED        | TEXT   | false             | hdfs://doit:8020/user/hive/warehouse/stb_par/month=202010 |
| 202011 | -1    | 1      | 36B  | NOT CACHED   | NOT CACHED        | TEXT   | false             | hdfs://doit:8020/user/hive/warehouse/stb_par/month=202011 |
| Total  | -1    | 3      | 72B  | 0B           |                   |        |                   |                                                           |
+--------+-------+--------+------+--------------+-------------------+--------+-------------------+-----------------------------------------------------------+

 

6.1 impala和hive细节上的区别:

1. 基本的语法跟 hive 的查询语句大体一样

2. Impala 不支持 CLUSTER BY, DISTRIBUTE BY, SORT BY

3. Impala 中不支持分桶表

4. Impala 不支持 COLLECT_SET(col)和 explode(col)函数

5. Impala 支持开窗函数  over()  row_number()  rank()  lag  lead

7.impala导入数据的五种方式:

1 location 指定表的位置 文件夹 , 文件夹中有数据 直接加载

2 据直接put到表目录下 

3 load data inpath '' into table partition(col='valu')   加载HDFS中的数据

4 insert  into tb select  from   --插入的方式导入数据

5 create table tb_name as select from  查询一张表的结果,导入创建好的表中

导出数据的方法

[root@hadoop103 ~]# impala-shell -q 'select * from student' -B --output_delimiter="\t" -o output.txt[root@hadoop103 ~]# cat output.txt 1001 tignitgn1002 yuanyuan1003 haohao1004 yunyunImpala 不支持 export 和 import 命令

 

8. 格式化数据 

8.1 格式化文本文件数据

这个常用于我们实际生产当中的格式化CSV文件,场景:给定一个csv文件,将csv文件导入到impala表中,并且文件中第一行数据有字段,需要跳过第一行或者前几行;

create table a(id int , name string) row format delimited fields terminated by ',' stored as textfile ;
-- 将Text文本格式的数据导入到对应的表目录中
--hdfs dfs -put a.txt  /user/hive/warehouse/a/refresh a ; -- 刷新表select * from a ;
+----+------+
| id | name |
+----+------+
| 1  | wy   |
| 2  | ly   |
| 3  | hy   |
+----+------+
alter table header_line set tblproperties('skip.header.line.count'='1'); --去除每个文件的第一行数据 也就是去除文件头信息

 

8.2 格式化Parquet 文件数据

create table tb_p  stored as  Parquet as select * from a ;  -- tb_p文件夹中的数据是Parquet格式
/user/hive/warehouse/tb_p/000000_0
CREATE EXTERNAL TABLE tb_pppp LIKE PARQUET '/user/hive/warehouse/tb_p/000000_0'  --这个路径是用来映射表结构的
STORED AS PARQUET  --指定存储文件的类型
location '/user/hive/warehouse/tb_p/';   --这个路径指的是表要从哪里加载数据
[doita:21000] db_demo> select * from tb_pppp ;
+----+------+
| id | name |
+----+------+
| 3  | ww   |
| 22 | bb   |
| 2  | lss  |
| 11 | aa   |
| 33 | cc   |
| 1  | zss  |
+----+------+

 

9.impala整合hive的使用细节 

10. impala整合hbase的使用细节 

场景:impala读取hbase中的数据,我们先通过hive整合hbase中的数据,将hbase中的数据整合到hive中,然后在通过impala和hive中的数据是共享的原则,用impala去读取hive表的数据,从而达到需求,impala整合hbase中的数据

1 在hbase中创建一张表

create 'tb_hbase' , 'cf'

 2.在hive中创建一张表整合hbase中表的数据

CREATE EXTERNAL TABLE tb_hbase (id string,name string,age int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  --这个值得是固定的类
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:name,cf:age"    --这里id对应的是行键,不用写,后面值得是列族,对应的属性
)
TBLPROPERTIES("hbase.table.name" = "tb_hbase");  --值得是表名,注意表名一定要和hbase中的表名一致,因为hive要和hbase整合

3.在impala中同步hive表数据

INVALIDATE METADATA; --刷新元数据

4.在impala中可以查询到hive中的表数据信息

[doita:21000] default> select * from tb_hbase ;

注意:在impala中也可以往hbase中插入数据;只要是impala整合hbase中的表就可以;

 

常用命令总结:

1. refresh+表名           增量刷新元数据库(指定某张表的数据进行刷新)

2. invalidate metadata:    全量刷新元数据库(慎用,刷新所有表)(同于 impala-shell -r)

3. explain select * from student    查看sql的执行计划 主要用于优化sql

4. SHOW TABLE STATS  + 表名     --数据在底层存储的特点 位置大小文件个数 文件格式

5.细节,impala只支持从hdfs上导入数据,不支持从本地导入数据 ******

6.导入数据的方式 ****

 

 


http://chatgpt.dhexx.cn/article/hN5CoIrP.shtml

相关文章

Impala基础知识

概述 Impala是由Cloudera公司开发的新型查询系统,参照Dremel系统进行设计的。提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍。 基于Hive的大数据实时分析查询引擎,其运行需要依赖于Hive…

大数据之 impala教程

一、什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C 和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。 换句话说,Impala是…

impala入门(一篇就够了)

文章目录 01 引言02 impala概述2.1 简介2.2 架构2.2.1 Impalad(守护进程)2.2.2 Statestore(存储状态)2.2.3 metadata(元数据)/metastore(元存储) 03 impala 安装04 impala 接口05 im…

大数据——Impala工具使用

目录 一、Impala概述 二、Impala优点 三、Impala和Hive 3.1 Impala和Hive的关系 3.2 Impala和Hive的区别 五、Impala查询过程 六、Impala安装 七、impala-shell命令 八、数据库语句 数据库命令 数据表命令 视图操作 Impala数据导入 刷新Impala数据 九、Java API 一…

近端策略优化算法PPO

本文介绍近端策略优化算法(Proximal Policy Optimization)也就是PPO。 文章目录 前言一、on-policy和off-policy1.1 on-policy和off-policy的概念1.2 Importance Sampling的概念 二、TRPO、PPO算法2.1 Trust Region Algorithms2.2 Stochastic Gradient A…

【强化学习】PPO算法求解倒立摆问题 + Pytorch代码实战

文章目录 一、倒立摆问题介绍二、PPO算法简介三、详细资料四、Python代码实战4.1 运行前配置4.2 主要代码4.3 运行结果展示4.4 关于可视化的设置 一、倒立摆问题介绍 Agent 必须在两个动作之间做出决定 - 向左或向右移动推车 - 以使连接到它的杆保持直立。 二、PPO算法简介 …

强化学习之PPO

阅读本文前先了解TRPO算法有助于理解,我对此也写过博客:https://blog.csdn.net/tianjuewudi/article/details/120191097 参考李宏毅老师的视频:https://www.bilibili.com/video/BV1Wv411h7kN?p80 PPO,全名Proximal Policy Opti…

【强化学习】PPO:从On-policy到Off-policy(PPO/TRPO/PPO-Penalty/PPO-Clip)

目录 一、为什么要从On- Policy到Off-Policy?二、如何从On- Policy到Off-Policy?三、如何使 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ​(at​∣st​)和 p θ ′ ( a t ∣ s t ) p_{\theta}(a_t|s_t) pθ′​(at​∣st​)不相差太多?3.1 PP…

如何理解PPO算法的核心操作clip

回顾 传统的策略梯度算法以下式作为策略网络的损失: g ^ E ^ t [ ∇ θ log ⁡ π θ ( a t ∣ s t ) A ^ t ] \hat{g}\hat{\mathbb{E}}_{t}\left[\nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \hat{A}_{t}\right] g^​E^t​[∇θ​logπθ​…

强化学习PPO从理论到代码详解(2)---PPO1和PPO2

在线或离线学习 上一节我们了解了什么是策略梯度,本节开始讲PPO理论之前,我们先提出一个概念,什么在线学习,什么离线学习。 On-policy: Then agent learned and the agent interacting with Environment is the same Off-policy…

强化学习PPO代码讲解

阅读本文前对PPO的基本原理要有概念性的了解,本文基于我的上一篇文章:强化学习之PPO 当然,查看代码对于算法的理解直观重要,这使得你的知识不止停留在概念的层面,而是深入到应用层面。 代码采用了简单易懂的强化学习…

PPO算法(附pytorch代码)

这里写目录标题 一、PPO算法(1)简介(2)On-policy?(3)GAE (Generalized Advantage Estimation) 三、代码代码解析: 一、PPO算法 (1)简介 PPO算法…

论文笔记之PPO

15年OpenAI发表了TRPO算法,一直策略单调提升的算法;17年DeepMind基于TRPO发表了一篇Distributed-PPO,紧接着OpenAI发表了这篇PPO。可以说TRPO是PPO的前身,PPO在TRPO的基础上进行改进,使得算法可读性更高,实…

PPO实战学习总结

PPO used in go-bigger 前段时间一直在学习ppo算法,写了 一点总结,记录一下自己对ppo算法的一些理解与RL实战时候容易遇到的一些问题。代码地址如下,需要的可以自取: https://github.com/FLBa9762/PPO_used_in_Gobigger.git一般…

PPO算法

在线学习和离线学习 在线学习:和环境互动的Agent以及和要学习的Agent是同一个, 同一个Agent,一边和环境做互动,一边在学习。离线学习: 和环境互动及的Agent以和要学习的Agent不是同一个,学习的Agent通过看别人完来学习。 利用新的…

PPO2代码 pytorch框架

PPO2代码玩gym库的Pendulum环境 2022-8-02更新 我发现这篇文章浏览量惨淡啊。 咋滴,是不相信的我代码能用是吗? 所以,我给出reward的收敛曲线图: 开玩笑,出来混,我能卖你生瓜码子吗? ———…

PPO实战

哈哈初学,复现龙龙老师的实例! state:是平衡小车上的杆子,观测状态由 4 个连续的参数组成:推车位置 [-2.4,2.4],车速 [-∞,∞],杆子角度 [~-41.8&#xff0c…

PyTorch实现PPO代码

原理:Proximal Policy Optimization近端策略优化(PPO) 视频:Proximal Policy Optimization (PPO) is Easy With PyTorch | Full PPO Tutorial 代码来自github: Youtube-Code-Repository EasyRL 网站:Neural…

优化PPO

优化PPO 介绍core implementation details1.Vectorized architecture 量化结构Orthogonal Initialization of Weights and Constant Initialization of biases 算法权重的初始化以及恒定偏差的初始化The Adam Optimizer’s Epsilon Parameter Adam优化器的ε参数Adam Learning …

PPO Algorithm

‘‘目录 PPO ALGORITHM 进行看别人文章: 如何直观理解PPO算法?[理论篇] - 知乎 (zhihu.com) 【强化学习8】PPO - 知乎 (zhihu.com) PPO(OpenAI) Proximal Policy Optimization(PPO)算法原理及实现! - 简书 (jianshu.com) 1-Critic的作用与效果.m…