Imapla概述

Impala是Cloudera公司的一个实时海量查询产品。是对于已有Hive产品的补充。Impala采用了和Hive相同的类SQL接口,但并没有采用MapRed框架执行任务,而是采用了类似Dremel的方式。号称秒级可以扫描PB数据。

其实Impala就是自己实现了一个执行引擎。这个引擎不像MapRed一样是一个通用框架,并且也没有任何failover和high availability的设计。但是优势在于执行速度足够快,秒级返回。其设计理念就是,执行速度足够快,快到如果失败了,重新执行一遍的代价也不大。

很显然,MapRed之所以流行就在于其可以很好的做到可扩展和容错。容错的价值在于,当一个大任务需要1小时以上的执行时间,如果在执行过程中发生故障,可以快速恢复,而不许要重新执行。所以这也是MPI任务为什么采用checkpoint的进行容错。都是为了减少机器故障给执行时间带来额开销。

Hive是在MapRed模型之上抽象出来的类似SQL的接口,简化了写MapRed程序的代价。同样由于依赖于MapRed系统,导致Hive任务执行时间很长,和MapRed一样,只适合执行批处理任务。

而面对实时查询的需求,旧的做法通常是先通过MapRed对数据进行加工,再导出到mysql等系统中。然而这种做法存在多个问题:

  • 数据存在多个地方,如果管理不善,很容易带来数据不一致等各种问题
  • 用户需要了解数据是否已存储在mysql中
  • mysql对存储数据量有限制

其实用户的实时查询请求经常会扫描大量数据,但计算都相对简单,例如只是count(*),等等。为满足这种需求,Google提出了Dremel,而Cloudera参考了Dremel的设计思路,实现了Impala。

Impala存在以下特点:

  • 面向实时查询,结果秒级返回
  • 兼容hive的类sql语法,但暂时不支持udf和transform
  • 可以和hive共享metastore
  • 没有任何failover的设计
  • 支持从hdfs和hbase读取数据
  • 运行时环境用c++实现,并利用了llvm的技术,动态优化执行代码

最后说一下,Impala不会完全替代Hive,因为毕竟Hive的容错和稳定性是Impala比不了的。Impala只是Hive的一个补充,可以快速的响应一些简单的查询请求。

从业务角度上分析,如果Imapla能够做到在5秒,甚至更短的时间内返回结果,那将有机会替代现有的mysql或oracal数据库,成为决策系统的底层支撑查询引擎。例如目前Oracal的BI或类似的系统,底层使用的是传统关系数据库,对海量数据的查询性能非常差。如果替换成Impala,则能够访问的数据量将大的多,对BI系统在公司业务上的贡献将有质的飞跃。

预告一下,后续将继续发表一些和impala有关的文章,将会涉及到系统架构,如何安装调试,前端代码分析,后台代码分析,llvm优化等等。


Impala系统架构

上图中,黄色部分谓Imapla模块,蓝色部分为运行Impala依赖的其他模块。

从部署上看,Impala整体分为两部分:

  • StateStore
  • Impalad

其中StateStore是一个集群状态服务进程。在集群中只存在一个实例。Impalad是分布式的存在于集群中的worker进程。每一个Impalad又包含了以下部分:

  • StateStoreSubscriber:订阅StateStore状态
  • Scheduler:调度器
  • Analyzer:对提交的Query进行语法分析
  • Planner:生成执行计划
  • Coordinator:管理一个Query的执行,包括分发给其他Impalad执行
  • PlanFragmentExecutor:执行一个PlanFragment

同时,Impala依赖的外部系统包括:

  • HDFS/HBase:用于读取查询数据
  • HDFS NameNode:用于检查输入数据位置
  • Hive MetaStore:用于访问表的元数据

整体流程:

  1. 客户端向某一个Impalad提交一个query
  2. Impalad通过jni,将query传送给java前端,由java前端完成语法分析和生成执行计划,并将执行计划封装成thrift格式返回执行计划分为多个阶段,每一个阶段叫做一个PlanFragment,每一个PlanFragment在执行时可以由多个Impalad实例并行执行(有些PlanFragment只能由一个Impalad实例执行)
  3. Coordinator根据执行计划,访问Scheduler,完成调度,并将任务分发给远端的Impalad执行
  4. 用户调用GetNext()方法获取计算结果,如果是insert语句,则将计算结果写回hdfs
  5. 当所有输入数据被消耗光,执行结束。
  6. 在执行过程中,如果有任何故障发生,则整个执行失败

这个流程与Hive相比,编译和生成执行计划阶段比较相似,但是执行阶段有很大不同:

  • 执行计划

    Hive依赖于MapRed执行框架,执行计划被严格划分成Map->Shuffle->Red->Map->Shuffle->Red…的模型。如果一个Qurey会被编译成多轮MapRed,则每一轮结束都会存在一个barrier。此外,如果Hive中有两个可以并行的子查询,且分组的key不相同,则需要两个独立的MapRed任务才能完成。这个问题在Impala中不存在。

    Impala的执行计划是一刻完整的树(DAG),不受任何约束,这个执行计划和Dryad的DAG模型很相像。这个执行计划中,只有在必要的时候才会出现barrier,例如group,top等。其他的计算都是流式的。前面算子的计算结果,可以立即被后面算子消耗。

  • 数据流

    Hive的数据流采用推的方式,每一各计算节点计算完成后将数据主动下推给后续节点。

    Impala采用拖的方式,后续节点主动向前面节点要数据。拖的方式的特点在于,数据可以流式的返回给客户端,只要有1条数据被处理完成,就可以立即展现出来。

  • 外存使用

    Hive执行过程中,如果内存放不下所有数据,则会利用外存,以保证query能顺利执行完。每一轮MapRed结束,中间结果也会写入hdfs中。由于Hadoop框架的限制,shuffle过程也会有写本地磁盘的操作。

    Impala在遇到内存放不下数据时,则直接返回错误,而不会利用外存。这使得Impala目前能处理的Query可能收到一定的限制。例如在做聚合操作,或join时,可能因为内存不够而失败。同时Impala在多个阶段之间利用网络传输数据。总的来说,Impala执行过程中,不会有任何写磁盘操作(除非用户制定insert命令)

  • 调度

    Hive任务的调度依赖于Hadoop的调度策略。

    Impala的调度由自己完成,目前的调度算法会尽量满足数据的局部性,即扫描数据的进程应尽量靠近数据本身所在的物理机器。但目前调度暂时还没有考虑负载均衡的问题。从Cloudera的资料看,Impala程序的瓶颈是网络IO,目前Impala中已经存在对Impalad机器网络吞吐进行统计,但目前还没有利用统计结果进行调度。

  • 容错

    Hive任务依赖于Hadoop框架的容错能力,可以做到很好的failover。

    Impala中不存在任何容错逻辑,如果执行过程中发生故障,则直接返回错误。当一个Impalad失败时,在这个Impalad上正在运行的所有query都将失败。但由于Impalad是对等的,用户可以向其他Impalad提交query,不影响服务。当StateStore失败时,也不会影响服务,但由于Impalad已经不能再更新集群状态,如果此时有其他Impalad失败,则无法及时发现。这样调度时,如果谓一个已经失效的Impalad调度了一个任务,则整个query无法执行。

Impala学习--Impala概述,Impala系统架构的更多相关文章

  1. 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化

    系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...

  2. 深度学习利器: TensorFlow系统架构及高性能程序设计

    2015年11月9日谷歌开源了人工智能平台TensorFlow,同时成为2015年最受关注的开源项目之一.经历了从v0.1到v0.12的12个版本迭代后,谷歌于2017年2月15日发布了TensorF ...

  3. 【impala学习之一】impala

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 CM5.4 一.ImpalaImpala是基于Hive的大数 ...

  4. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

  5. 基于Impala平台打造交互查询系统

    本文来自网易云社区 原创: 蒋鸿翔 DataFunTalk 本文根据网易大数据蒋鸿翔老师DataFun Talk--"大数据从底层处理到数据驱动业务"中分享的<基于Impal ...

  6. 学习Hive和Impala必看经典解析

    Hive和Impala作为数据查询工具,它们是怎样来查询数据的呢?与Impala和Hive进行交互,我们有哪些工具可以使用呢? 我们首先明确Hive和Impala分别提供了对应查询的接口: (1)命令 ...

  7. Impala 学习

    Impala 基础知识介绍与学习,参考文章: Impala-大数据时代快速SQL引擎 https://blog.csdn.net/kangkangwanwan/article/details/7865 ...

  8. impala学习笔记

    impala学习笔记 -- 建库 CREATE DATABASE IF NOT EXISTS database_name; -- 在HDFS文件系统中创建数据库,需要指定要创建数据库的位置. CREA ...

  9. 千万pv大型web系统架构,学习从点滴开始

     架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...

  10. Ambari深入学习(I)-系统架构

    Ambari是hadoop分布式集群配置管理工具,是由hortonworks主导的开源项目.它已经成为apache基金会的孵化器项目,已经成为hadoop运维系统中的得力助手,引起了业界和学术界的关注 ...

随机推荐

  1. Json转实体类问题

    背景:使用一个实体类,将json及xml转成对应的实体类 Transformers.fromJson 将json映射成对应的实体类, 原本已经测试,传xml是可以的,传的有字段及list<E&g ...

  2. ServletConfig 类和ServletContext 类

    ServletConfig 类 ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类. Servlet 程序和 ServletConfig 对象都是由 Tomcat ...

  3. 千牛hook 旺旺hook,旺旺发消息call,千牛发消息call,千牛机器人,破解旺旺发消息代码,破解千牛发消息代码,反汇编旺旺发消息,反汇编千牛发消息,旺旺发消息组件,千牛发消息组件

    由于工作需要,做了相关的编码,有demo,拿去后,直接按demo写代码即可实现千牛发消息,非常稳定.非反汇编找call,基本不怕千牛升级,原理是基于千牛架构做出来的,除非千牛改架构,已稳定使用2年,未 ...

  4. webpack笔记-loader的详细使用介绍(四)

    loader 基本上都是第三方类库,使用时需要安装,有一些 loader 还需要安装额外的类库,例如 less-loader 需要 less,babel-loader 需要 babel 等. load ...

  5. CSS – 屏幕, 打印, 分辨率, 物理像素, 逻辑像素, Retina, DPI, PPI 是什么?

    前言 之前就有写过关于 Retina 和 Responsive Image 响应式图片 (responsive image) Retina 显示屏 但写的很烂, 这篇从新整理一下. 参考: 掌握web ...

  6. C++ STL queue容器——队列

    queue容器 基本概念 queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素. queue容器没有迭代器,所有元素进出都必须符合"先进先 ...

  7. QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家

    QT数据可视化框架编程实战之三维柱状图从入门到精通_补天云QT技术培训专家 简介 本文将介绍QT数据可视化框架(QT DataVisualization 模块)编程实战之三维柱状图(Q3DBars)的 ...

  8. C# 裁剪PDF页面

    在处理PDF文档时,有时需要精确地裁剪页面以适应特定需求,比如去除广告.背景信息或者仅仅是为了简化文档内容.本文将介绍如何使用免费.NET控件通过C#实现裁剪PDF页面. 免费库 Free Spire ...

  9. 运输小猫娘之再续 5k 传奇

    写的比较意识流 前情提要 上回书说到,5k 因为拯救大家被炸断了 \(1000000007\) 米的牛至中的十五千米,尽管大家的欢呼声如此热烈,就像大家的热量正在像烈火一样散发出来,但是 5k 却无心 ...

  10. 3.1 gradio的基本使用详解

    ·gr.Text:用于文本输入,适用于自然语言处理任务的模型. gr.Image:用于图像上传,适用于图像处理或计算机视觉模型. ·gr.Audio:用于音频输入,适用于语音识别或音频处理模型. im ...