第 1 部分 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的技术优势

  • Impala没有采取MapReduce作为计算引擎,MR是⾮常好的分布式并行计算框架,但MR引擎更多的是⾯向批处理模式,⽽不是面向交互式的SQL执⾏。与Hive相比:Impala把整个查询任务转为一棵执行计划树,而不是一连串的MR任务,在分发执⾏计划后,Impala使⽤拉取的方式获取上个阶段的执⾏结果,把结果数据、按执行树流式传递汇集,减少的了把中间结果写⼊磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的⽅式避免每次执⾏查询都需要启动的开销,即相⽐Hive没了MR启动时间。
  • 使用LLVM(C++编写的编译器器)产生运⾏代码,针对特定查询生成特定代码。
  • 优秀的IO调度,Impala⽀持直接数据块读取和本地代码计算。
  • 选择适合的数据存储格式可以得到最好的性能(Impala⽀支持多种存储格式)。
  • 尽可能使用内存,中间结果不写磁盘,及时通过⽹络以stream的⽅式传递。

Impala与Hive对⽐分析

查询过程

  • Hive:在Hive中,每个查询都有一个“冷启动”的常见问题。(map,reduce每次都要启动关闭,申请资源,释放资源。。。)
  • Impala:Impala避免了任何可能的启动开销,这是一种本地查询语言。 因为要始终处理查询,则 Impala守护程序进程总是在集群启动之后就准备就绪。守护进程在集群启动之后可以接收查询任务并执行查询任务。

中间结果

Hive:Hive通过MR引擎实现所有中间结果,中间结果需要落盘,这对降低数据处理速度有不利影响。

Impala:在执⾏程序之间使用流的方式传输中间结果,避免数据落盘。尽可能使⽤内存避免磁盘开销

交互查询

  • Hive:对于交互式计算,Hive不是理想的选择。
  • Impala:对于交互式计算,Impala非常适合。(数据量级PB级)

计算引擎

  • Hive:是基于批处理的Hadoop MapReduce
  • Impala:更像是MPP数据库

容错

Hive:Hive是容错的(通过MR&Yarn实现)

Impala:Impala没有容错,由于良好的查询性能,Impala遇到错误会重新执行一次查询

查询速度

  • Impala:Impala⽐比Hive快3-90倍。

Impala优势总结

1. Impala最⼤优点就是查询速度快,在一定数据量下;

2. 速度快的原因:避免了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表中的数据。