分享

基于impala的SQL联邦代理研究与实现汇报

nettman 发表于 2014-9-16 15:59:11 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 14344
本帖最后由 nettman 于 2014-9-16 16:00 编辑
问题导读
1.你认为Impala是什么?
2.Impala 与 Hive有什么不同之处?
3.Impala运行过程中主要有哪两大进程?
4.impala部署环境是什么?





一、Impala简介
Impala是一个在Hadoop集群上运行的本地SQL查询引擎,提供原始HDFS数据和HBase数据库的简单查询访问。
    作为Hadoop上的SQL查询引擎,Imapla与Hive具有如表1所示的不同特点:

表1 Impala 与 Hive比较


   
  
  
  
Impala
  
  
Hive
  
  
定义
  
  
在Hadoop集群上运行的本地SQL查询引擎,提供原始HDFS数据和HBase数据库的简单查询访问。
  
  
  
建立在Hadoop上的数据仓库框架
  
  
出品人
  
  
Cloudera
  
  
Apache
  
  
发布时间
  
  
2012年10月
  
Impala  1.0 beta版
  
  
  
  
与MapReduce关系
  
  
无需通过MapReduce进行计算
  
  
MapReduce+hive计算方式
  
  
与HDFS、HBase关系
  
  
可以直接从HDFS或者HBase中用SELECT、JOIN和统计函数查询数据
  
  
与HDFS、HBase可以联合部署
  
  
查询语言
  
  
HQL
  
  
HiveQL
  
  
UDF支持
  
  
1.0不支持
  
  
支持
  
  
中间结果的处理
  
  
不存储磁盘
  
  
存储磁盘
  
  
最佳负载类型
  
  
批量提取,转化,加载(ETL)类型的Job
  
  
实时查询
  
  
两者的关系
  
  
Impala的运行依赖Hive的元数据
  
  
  

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.png



图1 impala部署结构


2.png
图2 impala集群

2.安装部署步骤
1)如上图安装配置虚拟机,设置root密码为统一的B8edc。设置ssh服务为开机启动。
2)从cloudera官网下载cloudera-manager.bin,并在Ubuntu1内运行,安装cloudera-manager。安装完毕即可在局域网内登录192.168.1.211:7180,管理云平台。
3.png
图3 cloudera-manager登录

3)查看主机->向集群添加新主机->输入四台服务器的ip地址,设置ssh连接方式后,在每台主机上安装cloudera-manager-agent。安装完毕即添加云节点成功。

4.png

4)添加cloudera-manager相关管理角色于ubuntu2,减轻名称节点ubuntu1的压力。(管理角色要求使用大量内存,安装中需要考虑各个主机的压力负载均衡,没有考虑负载均衡的情况下,安装会由由于内存不足而失败。)

5.png

图4 Ubuntu2管理角色

6.png
图5 集群负载情况


5)使用Cloudera Manager Parcels 下载并管理CDH、impala,他可以使服务二进制文件的部署和升级自动化,它是 Cloudera Manager 管理群集上的软件最简便的方法。如果选择不使用parcel,当有软件更新可用时,将需要您手动升级群集中所有主机上的包,并会阻止您使用 ClouderaManager 的滚动升级功能。

Parcel 部署由下列步骤组成:
下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。
‚分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。

ƒ激活: 分配后,激活 Parcel 为群集重启后使用做准备。激活前可能还需要升级。

6)在服务->所有服务->操作->添加服务中选择添加HDFS、map-reduce等服务,配置各个角色到服务器。
7.png
图6Cloudera-manager添加服务

7)在ubuntu4节点上运行impala-shell,测试部署效果。

8.png
图7 Impala运行界面


四、Impala结构
1.2版本前的Impala主要由三个部分构成,分别是impalad、state store、client。1.2版本前,部分DML操作要求REFRESH and INVALIDATE METADATA,1.2版本后新增catalogd板块,以支持实时的DML操作。(catalogd运行机理有待分析)

9.png


图8 impala1.2前版本结构
10.png
图9 Impala组件执行过程


五、Impala代码结构


11.png
图10 Impala代码结构


六、Impala查询执行过程

    在Impala中SQL Query的入口函数是:
voidImpalaServer::query(QueryHandle& query_handle, const Query& query)
生成一个QueryExecState伴随这个SQL执行的生命周期,代表正在执行的这个SQL;
调用ExecuteAndWait函数启动执行流程并等待结果。

12.png

ExecuteAndWait()函数首先是通过JNI向impala-fe请求SQL解析和执行计划生成,得到该Query对应的TExecRequest对象,交由impala-backend执行。
Impala最新版本执行过程对比参考文档《impala源代码分析》有改动,正参考分析文档查看代码分析流程。

2014.04.01 李卓颂




加微信w3aboutyun,可拉入技术爱好者群

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条