一、Impala概述
### --- [交互查询工具Impala]
~~~ [交互查询工具Impala]
~~~ [Impala的优势]
~~~ [Impala的缺点及适用场景]
### --- Impala大纲
~~~ 第 1 部分 Impala概述(Impala是什么,优势,劣势,与Hive对比)
~~~ 第 2 部分 Impala的安装(制作本地Yum源方式安装)
~~~ 第 3 部分 Impala的架构原理(有哪些组件,组件的作用,查询流程,查询计划)
~~~ 第 4 部分 Impala的使用(使用与Hive类似,编写sql方式;Impala的DDL,查询语法,导入数据)
~~~ 第 5 部分 Impala的Java 开发(Java+C++,使⽤用JDBC方式查询Impala)
~~~ 第 6 部分 Impala的优化(负载均衡,Impala中的Join的优化)
### --- Impala是什么
~~~ Impala是Cloudera提供的一款开源的针对HDFS和HBASE中的PB级别数据进行交互式实时查询(Impala速度快),
~~~ Impala是参照谷歌的新三篇论文当中的Dremel实现而来,
~~~ 其中旧三篇论文分别是(BigTable,GFS,MapReduce)
~~~ 分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。
~~~ Impala最大卖点和最大特点就是快速,Impala中文翻译是⾼角羚羊。
二、Impala优势
### --- 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启动时间。
~~~ 使⽤LVM(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优势总结
~~~ Impala最大优点就是查询速度快,在一定数据量下;
~~~ 速度快的原因:避免了了MR引擎的弊端,采用了MPP数据库技术,
三、 Impala的缺点
### --- Impala的缺点
~~~ Impala属于MPP架构,只能做到百节点级,一般并发查询个数达到20左右时,
~~~ 整个系统的吞吐已经达到满负荷状态,在扩容节点也提升不了吞吐量,处理数据量在PB级别最佳。
~~~ 资源不能通过YARN统一资源管理理调度,
~~~ 所以Hadoop集群无法实现Impala、Spark、Hive等组件的动态资源共享。
四、适⽤场景
### --- 使用场景
~~~ # Hive:
~~~ 复杂的批处理查询任务,数据转换任务,对实时性要求不高同时数据量又很大的场景。
~~~ # Impala:
~~~ 实时数据分析,与Hive配合使用,对Hive的结果数据集进行实时分析。
~~~ impala不能完全取代hive,impala可以直接处理hive表中的数据。