文章目录
一、课前准备
- 安装好对应版本的mysql
- 安装好对应版本的hadoop集群
- 安装好对应版本的hive
二、课堂主题
本堂课主要围绕impala的知识点进行讲解。主要包括以下几个方面
- impala的核心概念
- impala的架构原理
- impala的安装和使用
三、课堂目标
- 掌握impala的安装和使用
四、知识要点
1. impala介绍
1.1 impala概述
-
Impala是Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。
-
官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具。
-
基于Hive使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点
impala使用hive的元数据, 完全在内存中计算
1.2 impala与hive的关系
- impala是基于hive的大数据分析查询引擎,直接使用hive的元数据metadata。
- impala元数据都存储在hive的metastore当中,并且impala兼容hive的绝大多数sql语法。
- 安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。
1.3 impala优点
- 1、基于内存进行计算,能够对PB级数据进行交互式实时查询、分析,只要你内存足够大
- 2、 摈弃了MR的计算,改用C+来实现,有针对性的硬件优化
- 在底层对硬件进行优化, LLVM统一编译运行:编译器,比较稳定,效率高
- 3、具有数据仓库的特性,可对hive数据直接做数据分析
- 4、支持列式存储
- 可以和Hbase整合,因为hive可以整合hbase
- 5、支持Data Local
- 数据本地化:无需数据移动,减少数据的传输
- 6、支持JDBC/ODBC远程访问
1.4 impala缺点
- 1、基于内存计算,对内存依赖性较大
- 2、基于hive,与hive共存亡,紧耦合
- 3、稳定性不如hive
- 4、每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新
- 5、不支持用户定义函数UDF
2. impala基础架构
2.1 impala体系结构
-
Statestored
- impala集群的主节点
- 为ImpalaDaemon提供查找服务,并周期性地检查Impala进程状态
补充说明: 如果某个Impalad节点由于硬件错误、软件错误或者其他原因导致离线,statestored就会通知其他的节点,避免其他节点再向这个离线的节点发送请求。 由于statestored是当集群节点有问题的时候起通知作用,所以它对Impala集群并不是有关键影响的。 如果statestored没有运行或者运行失败,其他节点和分布式任务会照常运行,只是说当节点掉线的时候集群会变得没那么健壮。当statestored恢复正常运行时,它就又开始与其他节点通信并进行监控。
- impala集群的主节点
-
Catalogd
- impala集群的主节点
- 从Hive元数据库中同步元数据,分发表的元数据信息到各个impala daemon中
- 接收来自statestore的所有请求,告知哪些impalad节点是健康的
补充说明: Impala 1.2中加入的catalog服务减少了REFRESH和INVALIDATE METADATA语句的使用。 在之前的版本中,当在某个节点上执行了CREATE DATABASE、DROP DATABASE、CREATE TABLE、ALTER TABLE、或者DROP TABLE语句之后,需要在其它的各个节点上执行命令INVALIDATE METADATA来确保元数据信息的更新。 同样的,当你在某个节点上执行了INSERT语句,在其它节点上执行查询时就得先执行REFRESH table_name这个操作,这样才能识别到新增的数据文件。 需要注意的是,通过Impala执行的操作带来的元数据变化,有了catalog就不需要再执行REFRESH和INVALIDATE METADATA,但如果是通过Hive进行的建表、加载数据,则仍然需要执行REFRESH和INVALIDATE METADATA来通知Impala更新元数据信息。
- impala集群的主节点
-
impalad
- Impala的核心组件是运行在各个节点上面的impalad这个守护进程
- 接收client请求、Query执行并返回给中心协调节点
- 子节点上的守护进程,负责向statestore保持通信,汇报工作
- 执行计算。
- 因内存依赖大,所以最好不要和imapla的其他组件放到同一节点
- 最好是与hdfs的datanode节点部署在一起,提高查询计算(数据本地化)。
考虑集群性能问题,一般将StateStored 与 Catalogd 放在同一节点上,因两者之间要进行大量的通信。
2.2 impala查询过程
- 客户端连接到impala daemon 上,它的内部有三个组件;
- Query planner(查询解析器)
- 将我们的字符串sql 语句解释成为执行计划,
- Query coordinator(中心协调节点)
- coordinator从State Store请求其他的Impala daemons,并把查询分发给其他的Impala daemons
- Query executor(查询执行器)
- 而做查询工作的是就是executor
- 而做查询工作的是就是executor
- Query planner(查询解析器)
2.3 元数据缓存
-
impala集群中的元数据是保存在hive的metastore中的(mysql数据库中)
-
当impala集群启动之后,catalogd会从hive的metastore中把元数据信息同步过来,然后通过Statestore分发元数据信息到impala daemon中进行缓存。
-
如果在impala deamon中产生的元数据变更(创建库、创建表、修改表)操作。,Catalog服务通知所有Impala daemons来更新缓存。这些都会缓存下来,然后通过catalog持久化这些信息到hive的metastore中.
-
如果是hive的客户端进行了元数据的变更操作,这个时候对于impala来说是不知道的,这里就需要impala去手动同步刷新.
-
refresh命令手动同步
-
用于刷新某个表或者某个分区的数据信息,它会重用之前的表元数据,仅仅执行文件刷新操作
- 例如insert into、load data、alter table add partition、alter table drop partition等
REFRESH [table] //刷新某个表 REFRESH [table] PARTITION [partition] //刷新某个表的某个分区
-
imvalidate metadata命令手动同步
-
用于刷新全库或者某个表的元数据,包括表的元数据和表内的文件数据.
- 例如hive中create table/drop table/alter table add columns等操作。
INVALIDATE METADATA; //重新加载所有库中的所有表 INVALIDATE METADATA [table] //重新加载指定的某个表
3. impala安装部署
3.1 配置本地yum源
-
由于impala没有提供tar包供我们进行安装,只提供了rpm包,所以我们在安装impala的时候,需要使用rpm包来进行安装,rpm包只有cloudera公司提供了,所以我们去cloudera公司网站进行下载rpm包即可,但是另外一个问题,impala的rpm包依赖非常多的其他的rpm包,可以一个个的将依赖找出来,也可以将所有的rpm包下载下来,制作成我们本地yum源来进行安装。
-
我们这里就选择制作本地yum源来进行安装,所以首先我们需要下载到所有的rpm包,下载地址如下
http://archive.cloudera.com/cdh5/repo-as-tarball/5.14.0/ 镜像文件 cdh5.14.0-centos7.tar.gz
3.1.1 配置本地Yum的Repository
-
把node3服务器作为镜像源节点,使用httpd这个软件来作为服务端,启动httpd的服务来作为我们镜像源的下载地址
-
上传镜像文件到node3上
-
解压
- tar -zxvf cdh5.14.0-centos7.tar.gz -C /opt/bigdata
-
安装httpd服务并启动
- yum -y install httpd
- systemctl start httpd.service
-
创建yum源配置文件
-
进入到/etc/yum.repos.d目录,新建文件
-
vim localimp.repo
[localimp] name=localimp baseurl=http://node3/cdh5.14.0 gpgcheck=0 enabled=1
-
-
-
创建apache httpd的读取连接
- ln -s /opt/bigdata/cdh/5.14.0 /var/www/html/cdh5.14.0
-
页面访问本地yum源
- http://node3/cdh5.14.0
-
将node3上制作好的localimp配置文件发放到其他节点上去
scp /etc/yum.repos.d/localimp.repo node1:/etc/yum.repos.d scp /etc/yum.repos.d/localimp.repo node2:/etc/yum.repos.d
-
3.2 安装规划
服务名称 | node1 | node2 | node3 |
---|---|---|---|
impala-catalog | 安装 | 不安装 | 不安装 |
impala-state-store | 安装 | 不安装 | 不安装 |
impala-server | 不安装 | 安装 | 安装 |
impala-shell | 不安装 | 安装 | 安装 |
- 其中state-store 和 catalog 类似于 namenode一般部署在主节点
- 而 impala-server类似于datenode部署在子节点上
- impala-shell可以部署在任意节点上。它是impala的shell 客户端。
3.3 yum源安装
-
主节点node1执行以下命令进行安装
yum install impala-state-store -y yum install impala-catalog -y yum install bigtop-utils -y
-
从节点node2和node3执行以下命令进行安装
yum install impala-server -y yum install impala-shell -y yum install bigtop-utils -y
3.4 修改配置信息
3.4.1 修改 hive-site.xml文件
impala依赖于hive,所以首先需要进行hive的配置修改;
hive只需要安装一台,为了操作方便,后期在三台服务器上拷贝hive配置
-
node1机器修改hive-site.xml内容如下:
-
vim /opt/bigdata/hive/conf/hive-site.xml
[外链图片转存失败(img-DWg9AKNC-1569375250556)(D:\course\智能网联BMS\网上源代码等\大数据高级开发1期资料共享\20190906-impala\impala课程(1)]\impala课程设计.assets\1569290193711.png)
<property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value>