Impala 学习笔记 (一)---入门学习

目录

一、Impala 基本介绍

二、Impala 与 Hive 关系

三、Impala 与 Hive 异同

 1、内存使用

2、调度

3、适用面

4、容错

四、Impala 架构

五、Impala 查询处理过程

六、表数据的准备

七、view视图(这个hive也有)


一、Impala 基本介绍

       impala 是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询 效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更快速,号称是当前大数据领域最快的查询 sql 工具, impala 是基于 hive 并使用内存进行计算,兼顾数据仓库,具有实时,批 处理,多并发等优点。

二、Impala 与 Hive 关系

      impala 是基于 hive 的大数据分析查询引擎,直接使用 hive 的元数据库 metadata,意味着 impala 元数据都存储在 hive metastore 当中,并且 impala 兼 容 hive 的绝大多数 sql 语法。所以需要安装 impala 的话,必须先安装 hive,保证 hive 安装成功,并且还需要启动 hive metastore 服务。

       客户端连接 metastore 服务,metastore 再去连接 MySQL 数据库来存取元数 据。有了 metastore 服务,就可以有多个客户端同时连接,而且这些客户端不需 要知道 MySQL 数据库的用户名和密码,只需要连接 metastore 服务即可。

       Hive 适合于长时间的批处理查询分析,而 Impala 适合于实时交互式 SQL 询。可以先使用 hive 进行数据转换处理,之后使用 Impala Hive 处理后的结果 数据集上进行快速的数据分析。

三、Impala 与 Hive 异同

    Impala Hive 最大的优化区别在于:没有使用 MapReduce 进行并行 计算,与MapReduce相比,Impala把整个查询分成一个执行计划树,而不是一连串的MapReduce 任务,在分发执行计划后, Impala 使用 拉取获取数据的方式获取数据, 把结果数据组成 按执行数流式传递汇集,减少了中间结果写入磁盘的步骤,再从磁盘读取数据的开销。

 1、内存使用

Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证 Query 能顺序执行完。每一轮 MapReduce 结束,中间结果也会写入 HDFS 中,同样由于 MapReduce 执行架构的特性,shuffle 过程也会有写本地磁盘的操作。

Impala: 在遇到内存放不下数据时,版本 1.0.1 是直接返回错误,而不会利用 外存,以后版本应该会进行改进。这使用得 Impala 目前处理 Query 会受到一定 的限制,最好还是与 Hive 配合使用。

2、调度

Hive: 任务调度依赖于 Hadoop 的调度策略。

Impala: 调度由自己完成,目前只有一种调度器 simple-schedule,它会尽量 满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。

3、适用面

Hive: 复杂的批处理查询任务,数据转换任务。

Impala:实时数据分析,因为不支持 UDF,能处理的问题域有一定的限制, 与 Hive 配合使用,Hive 的结果数据集进行实时分析。

4、容错

Hive: 依赖于 Hadoop 的容错能力。

Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直 接返回错误(这与 Impala 的设计有关,因为 Impala 定位于实时查询,一次查询 失败, 再查一次就好了,再查一次的成本很低)。

 

四、Impala 架构

   Impala 主要由 ImpaladState StoreCatalogd CLI 组成。

Impalad: 与DataNode 运行在同一个节点上,由Impalad进程表示, 它接收客户端请求,读写数据,并执行查询计划(

接收查询请求的 Impalad CoordinatorCoordinator 通过 JNI 调用 java 前端解释 SQL 查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的 其它 Impalad 进行执行);

Impala State Store: 监视集群中 Impalad 的健康状况及位置信息,与各 Impalad 保持心跳连接;

Catalogd: 从 Hive Metastore 等外部 catalog 中获 取元数据信息,放到 impala 自己的 catalog 结构中;

CLI: 查询使用的命令行工具(Impala Shell 使用 python 实现),同 时 Impala 还提供了 HueJDBCODBC 使用接口。

五、Impala 查询处理过程

      Impalad 分为 Java 前端与 C++处理后端,接受客户端连接的 Impalad 即作 为这次查询的 CoordinatorCoordinator 通过 JNI 调用 Java 前端对用户的查询 SQL 进行分析生成执行计划树。

我的总结如下:

六、表数据的准备

这是要加载到数据中的文件,表的格式是正确的,以 .csv 结尾的文件

​// student 文件
01	赵雷	1990-01-01	男
02	钱电	1990-12-21	男
03	孙风	1990-05-20	男
04	李云	1990-08-06	男
05	周梅	1991-12-01	女
06	吴兰	1992-03-01	女
07	郑竹	1989-07-01	女
08	王菊	1990-01-20	女

// teacher 文件
01	张三
02	李四
03	王五

// course   老师id
01	语文	02
02	数学	01
03	英语	03

// s_id , c_id, s_score
01	01	80
01	02	90
01	03	99
02	01	70
02	02	60
02	03	80
03	01	80
03	02	80
03	03	80
04	01	50
04	02	30
04	03	20
05	01	76
05	02	87
06	01	31
06	03	34
07	02	89
07	03	98

创建学生表:

// 创建 教师表
create external table teacher (t_id string,t_name string) row format 
delimited fields terminated by '\t';

// 创建 学生表
create external table student (s_id string,s_name string,s_birth string , 
s_sex string ) row format delimited fields terminated by '\t';

// 向 学生表中加载数据  impala 中 只能通过 HDFS 加载数据文件
load data inpath '/impala/student.csv' into table student;

注意:这里 对 文件的操作的权限 要修改的 ,我直接 改为  777,可读可写可执行。

// 将 这个文件下的  以 .csv 结尾的都改了  
hdfs dfs -chmod -R 777 /impala/*.csv
// 还要 该文件的  权限 ,不然 文件  加载不到数据中
hdfs dfs -chmod -R 777 /impala

说明一点:这里的HDFS 文件加载 跟 hive 中是一样的 ,加载文件就是文件的移动(换了地方),而数据 及数据库的表  以文件形式存在。

查看一下 表中是否有数据,再从 catalog默认的 端口中 查看表存在。

创建表 插入数据

create table employee (Id INT, name STRING, age INT,address STRING, salary 
BIGINT);
insert into employee VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert into employee values (2, 'Khilan', 25, 'Delhi', 15000 );
Insert into employee values (3, 'kaushik', 23, 'Kota', 30000 );
Insert into employee values (4, 'Chaitali', 25, 'Mumbai', 35000 );
Insert into employee values (5, 'Hardik', 27, 'Bhopal', 40000 );
Insert into employee values (6, 'Komal', 22, 'MP', 32000 );

这里插入数据有个明显的感受就是 由于不进行MapReduce 了,插入数据速度很快。但是我根据 50070 查看 HDFS ,妈呀这么多小文件,感觉就不好了,这要是很多,NameNode肯定要保存 很多的元数据信息。

 

deletetruncate table

     delete : 使用此命令时必须小心,因为删除表后,表中可用的所有信息也将永 远丢失。

     truncate : Truncate Table 语句用于从现有表中删除所有记录。保留表结构。

七、view视图(这个hive也有)

      视图仅仅是存储在数据库中具有关联名称的 Impala 查询语言的语句。 它是 以预定义的 SQL 查询形式的表的组合。 视图可以包含表的所有行或选定的行。

创建 员工表的视图  , 给公司小白 只能  允许操作  name,age, address 字段信息

create view employee_view as select name,age,address from employee;

剩下的order by, group by ,having ,limit  ,distinct ,跟我们学习的 SQL 差不多,掌握好  hive , Impala 的学习很容易。

   补充一下我们的  Impala  ------> hive  的数据可以自动 更新过去,但是  反过来不可以,我们 要手动 刷新数据库

refresh dbname.tablename :增量刷新,刷新某一张表的元数据,主要用 于刷新 hive 当中数据表里面的数据改变的情况。

invalidate metadata :全量刷新,性能消耗较大,主要用于 hive 当中新 建数据库或者数据库表的时候来进行刷新。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙先生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值