Impala概述
Impala是什么
Impala是一款针对HDFS和HBASE中的PB级别数据进行交互式实时查询工具。最大的特点就是速度快
Impala优势
Impala的诞生
Hive与MR适合离线批处理,但是对交互式查询的场景无能为力(快速响应),所以为了积极查询速度问题开发了Impala,Impala抛弃了MR,使用了类似传统的MPP数据库技术,提高了查询速度
MPP是什么?
MPP (Massively Parallel Processing),就是大规模并行处理(MR是分布式并行计算框架),在MPP集群中,每个节点资源都是独⽴享有(MR依托的是Yarn,节点资源可能这个任务使用,下个任务也使用),也就是有独立的磁盘和内存,每个节点通过网络互相连接,彼此协同计算,作为整体提供数据服务。
MPP是将任务并行的分散到多个服务器和节点上,在每个节点计算完成后,将各自的部分结果汇总到一起的到最终的结果(也是分而治之的思想)
对于MPP架构的软件来说聚合操作,比如计算某张表的总条数,则先进行局部聚合(每个节点并行计算,MR并没有进行聚合,例如WordCount,只是输出,预聚合是shuffle阶段处理的), 然后把局部汇总结果进行全局聚合(与Hadoop相似)。
Impala和Hive技术对比
Impala没有采用MapReduce计算规则,(MR慢的原因:1、Shuffle阶段,IO开销,2、Shullfe解决默认对key分区排序),MR是很好的分布式并行计算框架,但是更多的面向批处理模式,而不是交互式的SQL执行。与Hive相比,Impala把整个查询转为一颗执行计划树,而不是一连串的MR任务,在分发执行计划后,Impala使用拉取的方式获取上一个阶段的执行结果,把数据按执行树流式传递汇总,减少MR的Shuffle阶段的IO操作,而且也没有Hive每次启动MR的启动时间。
避免数据落盘
处理进程无需每次启动
Impala默认不会对数据排序
使用C++编写
优秀的IO调度,Impala支持直接数据块读取和本地计算(HDFS短路读取)
选择适合的数据存储格式可以得到最好的性能(支持多次存储格式),列式存储对数据分析提升很大。
尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递
Impala与Hive查询过程对比分析
Hive:每个查询都有冷启动问题。(MapReduce每次启动关闭都要申请、释放资源)
Impala:避免了启动开销,这是一种本地查询语言,因为始终处理查询,则Impala守护进程总是在集群启动的之后就准备就绪。守护进程在集群启动之后就可以接受查询任务并行执行查询任务
Impala与Hive中间结果对比分析
Hive:Hive通过MR引擎实现所有中间结果,中间结果需要落盘
Impala:避免数据落盘,在节点之间采用流式传输中间结果,尽可能使用内存避免磁盘开销
Impala与Hive交互查询对比分析
Hive:不适合
Impala:适合(数据量级PB级别)
Impala与Hive计算引擎对比分析
Hive:基于批处理的Hadoop MR
Impala:更像是MPP数据库(非常传统的技术)
Impala与Hive容错对比分析
Hive:有容错的(通过MR&Yarn实现,Yarn会启动AppMaster,AppMaster来调度MR里面的MapTask和ReduceTask,如果有错误出现,AppMaster会重新调度任务再次执行)
Impala:没有容错,由于良好的查询性能,Impala遇到错误会重新执行一次查询。
Impala与Hive查询速度对比分析
Impala:官方:比Hive快3-90倍。
总结:
在一定数据量下(PB级别,数据量属于中等),查询速度快。
速度快的原因:不使用MR引擎,避免了IO、排序、冷启动等,采用了MPP数据库技术。
Impala的缺点
Impala使用的MPP架构,只能做到百节点级,一般并发查询个数达到20个左右,整个系统的吞吐已经达到了满负荷状态,再扩容节点也提升不了吞吐量。处理数据在PB级别最佳
资源不能通过Yarn统一资源调度,所以Hadoop集群无法实现Impala、Spark、Hive等组件的动态资源共享。
使用场景
Hive:复杂的批处理查询任务,数据转化任务,对实时性要求不高同时数据量又很大的场景
Impala:实时数据分析,与Hive配合使用,对Hive结果集进行实时分析,Impala不能完全取代Hive,Impala可以直接处理Hive表中的数据。
Impala安装
集群准备
按照Hadoop、Hive
按照Impala之前需要Hadoop(Impala数据存储在HDFS)、Hive(Impala直接使用Hive元数据管理数据)
Hive包需要在Impala的节点上都要有(Impala需要引用Hive包)
Hadoop的框架需要支持C程序访问
准备Impala的依赖包
由于目前Impala的安装只提供rpm,没有tar,但是使用rpm的时候又会有很多的依赖,一个个寻找以来太费劲,所以自己来做本地yum源
制作本地Yum源
1、Linux120上安装Httpd服务器
#yum⽅式安装httpd服务器器
yum install httpd -y
#启动httpd服务器器
systemctl start httpd
#验证httpd⼯工作是否正常,默认端⼝口是80,可以省略略
http://linux121
共享的路径:
/var/www/html/
2、下载需要的rpm包
http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz
tar -zxvf cdh5.7.6-centos7.tar.gz
3、使用Httpd放依赖包,一种是移动解压好文件,一种是软连接
ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57
4、修改Yum源配置文件
cd /etc/yum.repos.d
#创建⼀一个新的配置⽂文件
vim local.repo
#添加如下内容
[local]
name=local
baseurl=http://linux120/cdh57/
gpgcheck=0
enabled=1
[local] :serverId,唯一标识
name:对当前yum源的描述
baseusl:访问当前源的地址信息
gpgcheck:是否进行gpg校验
enable:是否使用当前源
5、分发到其他节点
rsync-script local.repo
安装Impala
集群规划
服务名称 | Linux121 | Linux122 | Linux123 |
---|---|---|---|
impala-catalog | √ | ||
impala-state |