问题导读
1.你认为Impala是什么?
2.Impala 与 Hive有什么不同之处?
3.Impala运行过程中主要有哪两大进程?
4.impala部署环境是什么?
一、Impala简介
Impala是一个在Hadoop集群上运行的本地SQL查询引擎,提供原始HDFS数据和HBase数据库的简单查询访问。
作为Hadoop上的SQL查询引擎,Imapla与Hive具有如表1所示的不同特点:
表1 Impala 与 Hive比较
| | |
| 在Hadoop集群上运行的本地SQL查询引擎,提供原始HDFS数据和HBase数据库的简单查询访问。
| |
| | |
| 2012年10月 Impala 1.0 beta版
|
|
| | |
| 可以直接从HDFS或者HBase中用SELECT、JOIN和统计函数查询数据
| |
| | |
| | |
| | |
| | |
| |
|
Impala的设计类似于商用并行关系数据库,该分布式查询引擎由Query Planner、Query Coordinator和Query ExecEngine三部分组成。
Impala运行过程中主要有两大重要进程:State Store 与Impalad。其次还有另外一个重要组件Client/Impala-shell。
1.State Store:用于协调各个运行impalad的实例之间的信息关系,Impala正是通过这些信息去定位查询请求所要的数据。换句话说,state store的作用主要为跟踪各个impalad实例的位置和状态,让各个impalad实例以集群的方式运行起来。
与 HDFS的NameNode不一样,虽然State Store一般只安装一份,但一旦State Store挂掉了,各个impalad实例却仍然会保持集群的方式处理查询请求,只是无法将各自的状态更新到State Store中,如果这个时候新加入一个impalad实例,则新加入的impalad实例不为现有集群中的其他impalad实例所识别。然而,State Store一旦重启,则所有State Store所服务的各个impalad实例(包括state store挂掉期间新加入的impalad实例)的信息(由impalad实例发给state store)都会进行重建。
2.Impalad:对应进程为 impalad(核心进程,数据的计算就靠这个进程来执行)
该进程应运行在DataNode机器上,每个DataNode机器运行一个impalad,每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(queryfragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所有计算完毕时,其它各个impalad实例将会把各自的计算结果发送给充当 Ordinator的impalad实例,由这个Ordinator实例把结果返回给客户端。每个impalad进程可以处理多个并发请求。
3.Client : 可以是Python CLI(官方提供的impala_shell.py),JDBC/ODBC或者Hue。无论哪个其实就是一个Thrift的client,连接到impalad的21000端口,进行相关SQL操作。
二、Impala所需安装环境
由于impala对原始HDFS数据和HBase数据库进行查询访问,并需要使用Hive的meta store,故部署impala前所需环境有:CDH(Cloudera Hadoop)、HBase、Hive。
impala目前已经出了5个版本,不同版本之间的差异较大。所需的CDH也并不一致。
impala目前的最新版本为1.2.4。
1.操作系统
仅支持如下的64位操作系统:
• Red Hat Enterprise Linux(RHEL) 5.7/6.2/6.4, Oracle Linux 5.7/6.2/6.4, 或 Centos5.7/6.2/6.4.
• SLES 11 with Service Pack1 或以上
• Ubuntu 10.04/12.04 或 Debian 6.03.
2.CDH匹配表
• CDH 4.8 or later4.x, orCDH 5 beta2, for Impala 1.2.4.
• CDH 4.1 or later 4.x, orCDH 5 beta 2, for Impala 1.2.3.
• CDH 4.1 or later 4.x forImpala 1.2.2 and 1.2.1. (Impala 1.2.2 and1.2.1 do not work with CDH 5 beta due to
differences with packagingand dependencies.)
• CDH 5 beta 1 for Impala 1.2.0.
• CDH 4.1 or later forImpala 1.1.
• CDH 4.1 or later forImpala 1.0.
• CDH 4.1 or later forImpala 0.7.
• CDH 4.2 or later forImpala 0.6.
• CDH 4.1 for Impala 0.5 andearlier. This combination is only supported on RHEL/CentOS
三、安装部署
本次部署Impala使用4台虚拟机,虚拟机安装Ubuntu12.04,每台虚拟机网卡设置均采用桥接网卡,开机混杂模式,即所有机器均在实验室同一局域网网段内。本次部署使用Cloudera-manager进行。
(手动安装步骤冗长,后续。)
1.部署结构
图1 impala部署结构
图2 impala集群
2.安装部署步骤
1)如上图安装配置虚拟机,设置root密码为统一的B8edc。设置ssh服务为开机启动。
2)从cloudera官网下载cloudera-manager.bin,并在Ubuntu1内运行,安装cloudera-manager。安装完毕即可在局域网内登录192.168.1.211:7180,管理云平台。
图3 cloudera-manager登录
3)查看主机->向集群添加新主机->输入四台服务器的ip地址,设置ssh连接方式后,在每台主机上安装cloudera-manager-agent。安装完毕即添加云节点成功。
4)添加cloudera-manager相关管理角色于ubuntu2,减轻名称节点ubuntu1的压力。(管理角色要求使用大量内存,安装中需要考虑各个主机的压力负载均衡,没有考虑负载均衡的情况下,安装会由由于内存不足而失败。)
图4 Ubuntu2管理角色
图5 集群负载情况
5)使用Cloudera Manager Parcels 下载并管理CDH、impala,他可以使服务二进制文件的部署和升级自动化,它是 Cloudera Manager 管理群集上的软件最简便的方法。如果选择不使用parcel,当有软件更新可用时,将需要您手动升级群集中所有主机上的包,并会阻止您使用 ClouderaManager 的滚动升级功能。
Parcel 部署由下列步骤组成:
下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。
‚分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。
ƒ激活: 分配后,激活 Parcel 为群集重启后使用做准备。激活前可能还需要升级。
6)在服务->所有服务->操作->添加服务中选择添加HDFS、map-reduce等服务,配置各个角色到服务器。
图6Cloudera-manager添加服务
7)在ubuntu4节点上运行impala-shell,测试部署效果。
图7 Impala运行界面
四、Impala结构
1.2版本前的Impala主要由三个部分构成,分别是impalad、state store、client。1.2版本前,部分DML操作要求REFRESH and INVALIDATE METADATA,1.2版本后新增catalogd板块,以支持实时的DML操作。(catalogd运行机理有待分析)
图8 impala1.2前版本结构
图9 Impala组件执行过程
五、Impala代码结构
图10 Impala代码结构
六、Impala查询执行过程
在Impala中SQL Query的入口函数是:
voidImpalaServer::query(QueryHandle& query_handle, const Query& query)
生成一个QueryExecState伴随这个SQL执行的生命周期,代表正在执行的这个SQL;
调用ExecuteAndWait函数启动执行流程并等待结果。
ExecuteAndWait()函数首先是通过JNI向impala-fe请求SQL解析和执行计划生成,得到该Query对应的TExecRequest对象,交由impala-backend执行。
Impala最新版本执行过程对比参考文档《impala源代码分析》有改动,正参考分析文档查看代码分析流程。
2014.04.01 李卓颂