一、Impala概述
1.1 什么是Impala
Impala是Cloudera提供的一款开源的针对HDFS和HBASE中PB级别数据进行交互式实时查询(Impala速度快),Impala是参照谷歌中新三篇论文中Dremel实现而来,其中旧三篇论文分别是(BigTable、GFS、MapReduce)分别对应即将学的HBase和以及学过的HDFS、MapReduce。
Impala最大卖点和特点就是“快速”,Impala中文翻译是“高角羚羊”。
1.2 Impala优势
在大数据领域主要解决的问题就是数据的存储和分析,但是一个完整的大数据分析任务如果细分会有非常多具体的场景,非常多的环节;并没有一个类似于java web的Spring框架实现大一统的局面。
比如我们按照划分一个大数据的开发任务,会有:数据采集(日志文件,关系型数据库中),数据清洗(数据格式管理,脏数据过滤等),数据预处理(为了后续分析所做的工作),数据分析:离线处理(T+1分析),实时处理(数据到来即分析),数据可视化,机器学习,深度学习等。
面对如此多的阶段再加上大数据天生的大数据量的问题没有任何一个框架可以完美的cover以上每个阶段。所以大数据领域有非常多的框架,每个框架都有最适合自己的具体场景。比如:HDFS负责大数据量存储,MapReduce(Hive)负责大数据量的分析计算。
Impala的诞生:
之前学习的Hive以及MR适合离线批处理,但是对于交互式查询的场景无能为力(要求快速响应),所以为了解决查询速度问题,Cloudera公司依据Google的Dremel开发了了Impala,Impala摒弃了MapReduce,使用了类似于传统的MPP数据库技术,大大提高了查询的速度。
MPP是什么?
MPP(Massively Parallel Processing),就是大规模并行处理,在MPP集群中,每个节点资源都是独立享有也就是独立的磁盘和内存,每个节点通过网络互相连接,彼此协同计算,为整体提供数据服务。
简单的说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,再将各自部分的结果汇总在一起得到最终结果。
对于MPP架构的软件来说聚合操作比如计算某张表的总数,则先进行局部聚合(每个节点并行计算),然后再把局部汇总结果进行全局聚合(与hadoop类似)。
Impala与Hive对比:
Impala的技术优势
1. Impala没有采用MapReduce作为计算引擎,MR是非常好的分布式并行计算框架,但是MR引擎更多的是面向批处理模式,而不是面向交互式SQL执行。
与Hive相比:Impala把整个查询任务转化为一棵执行计划树,而不是一连串的MR任务,在分发执行后,Impala采用拉取的方式获取上个阶段的执行结果,把结果数据、按执行树流式传递汇集,减少了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免每次执行查询都需要启动的开销,即相比Hive没有MR启动时间。
2. 使用LLVM(C++编写的编译器)产生运行代码,针对特定查询生成特定代码。
3. 优秀的IO调度,Impala支持直接数据块读取和本地代码计算。
4. 选择适合的数据存储格式可以得到最好的性能(Impala支持多种存储格式)。
5. 尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。
Impala与Hive对比分析:
查询过程:
在Hive中,每个查询都有一个“冷启动”的常见问题。(map,reduce每次都要启动关闭、申请资源、释放资源。)
Impala中,避免了任何可能的启动开销,这是一种本地查询语言。因为要始终处理查询,则Impala守护程序进程总是在集群启动之后就准备就绪,守护进程在集群启动之后可以接受穿任务并执行查询任务。
中间结果:
Hive通过MR引擎实现的所有中间结果都要落盘,这对降低数据处理速度有不利影响。
Impala在执行程序之间使用流的方式传输中间结果,避免数据落盘。尽可能的使用内存避免磁盘开销。
交互查询:
Hive对于交互式计算,Hive不是理想的选择。
Impala对于交互式计算,Impala非常适合(数据量级PB级)。
计算引擎:
Hive是基于批处理的Hadoop MapReduce。
Impala更像是MPP数据库。
容错:
Hive是容错的(通过MR和Yarn实现)。
Impala没有容错,由于良好的查询性能,Impala遇到错误会重新执行一次。
查询速度:
Impala比Hive块3-90倍。
Impala优势总结:
Impala最大的优点是查询速度快,在一定数据量下(PB级别)。
速度快的原因:避免了MR引擎的弊端,采用了MPP数据库技术。
1.3 Impala的缺点
1. Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20个左右时,整个系统的吞吐已经达到满负荷状态,再扩容节点也提升不了吞吐量,处理数据量在PB级别最佳。
2. 资源不能通过YARN统一资源调度,所以Hadoop集群无法实现Impala、Spark、Hive等组件的动态资源共享。
1.4 适用场景
Hive:复杂的批处理查询任务,数据转移任务,对实时性要求不高同时数据量又很大的场景。
Impala:实时数据分析,与Hive配合使用,对Hive的结果数据集进行实时分析。Impala不能完全取代Hive,Impala可以直接处理hive表中的数据。
二、Impala安装与入门案例
2.1 集群准备
2.1.1 安装Hadoop、Hive
1. Impala的安装需要提前装好Hadoop,Hive这两个框架。
Impala的数据存储在hdfs上;
Impala直接使用hive元数据管理数据;
2. hive需要在所有的Impala安装的节点上⾯面都要有,因为Impala需要引⽤用Hive的依赖包。
3. hadoop的框架需要⽀支持C程序访问接⼝口,查看下图,如果有该路路径有.so结尾⽂文件,就证明⽀支持C接⼝口。
2.1.2 准备Impala的所有依赖包
rpm⽅方式安装:需要⾃自⼰己管理理rpm包的依赖关系;⾮非常麻烦;解决依赖关系使⽤用yum;默认Yum源是没有Impala的rpm安装包,所以我们⾃自⼰己准备好所有的Impala安装所需的rpm包,制作Yum本地源,配置Yum命令去到我们准备的Yun源中下载Impala的rpm包进⾏行行安装。
Yum命令默认源:
1. 对于我们这样三台节点,默认Yum命令安装软件时,下载相关依赖都是从默认源处理下载
2. 如果使用Yum安装Impala,Yum的默认源中没有Impala的rpm包,所以我们提前下载Impala安装所需要的所有rpm包,并制作成为本地的Yum源供集群所有节点使用。
具体制作步骤:
Yum源是Centos当中下载软件rpm包的地址,因此通过制作本地Yum源并指定Yum命令使⽤用本地Yum源,为了了使Yum命令(本机,跨⽹网络节点)可以通过⽹网络访问到本地源,我们使⽤用Httpd这种静态资源服务器器来开放我们下载所有的rpm包。
1. linux121 安装Httpd服务器
#yum⽅方式安装httpd服务器器:yum install httpd -y
#启动httpd服务器器:systemctl start httpd
#验证httpd⼯工作是否正常,默认端⼝口是80,可以省略略:http://linux121
2. 新建一个测试页面:
httpd默认存放⻚页⾯面路路径:/var/www/html/
新建⼀一个⻚页⾯面test.html
访问:http://linux121/test.html
3. 下载Impala安装所需rpm包
Impala所需安装包需要到Cloudera提供地址下载
http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz
注意:该tar.gz包是包含了了Cloudera所提供的⼏几乎所有rpm包,但是为了了⽅方便便我们不不再去梳理理其中依赖关系,全部下载来,整个⽂文件⽐比较⼤大,有3.8G。选择⼀一个磁盘空间够的节点,后续还要把压缩包解压所以磁盘空间要剩余10G以上。
4. 使用httpd盛放依赖包
创建软链接到/var/www/html下:
ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57
验证
http://linux121/cdh57/
如果提示404 forbidden
vim /etc/selinux/config:将SELINUX=enforcing改为SELINUX=disabled
修改之后要记得重启机器器!!
5. 修改Yum源配置文件
cd /etc/yum.repos.d
#创建⼀一个新的配置⽂文件
vim local.repo
#添加如下内容
[local]
name=local
baseurl=http://linux121/cdh57/
gpgcheck=0
enabled=1
name:对于当前源的描述
baseurl:访问当前源的地址信息
gpgcheck: 1 0,gpg校验
enabled:1/0,是否使⽤用当前源
6. 分发local.repo文件到其它节点
rsync-script local.repo
2.2 安装Impala
2.2.1 集群规划
Impala-server:这个进程是Impala真正工作的进程