impala 学习笔记

部分内容摘自:https://my.oschina.net/weiqingbin/blog/192612

1.impala特点:
1)基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
2)无需转换为MapReduce,直接读取HDFS数据
3)C++编写,LLVM编译运行
4)兼容HiveSQL
5)兼容数据仓库的特性,可对hive数据直接做数据分析
6)支持Data Local,支持列式存储
7)支持jdbc和odbc远程访问

2.impala劣势
1)对内存依赖大
2)C++编写
3)完全依赖于hive
4)实践过程中分区超过1W,性能严重下降
5)稳定性不如hive

3.安装方式:
1)ClouderaManager
2)手动安装

4.impala核心组件
--Statestore Daemon(statestored):负责收集分布在集群中各个impalad进程的资源信息、各节点健康状态,同步节点信息
--Catalog Daemon(Catalogd):分发表的元数据信息到各个impalad中,接收来自statestore的所有请求
--Impala Daemon:接收client、hue、jdbc和odbc请求、query执行并返回给中心协调节点,子节点上的守护进程,负责向statestore保持通信,汇报工作

impala shell
  • -h(--help)帮助
  • -v(--version)查询版本信息
  • -V(- verbose)启动详细输出
  • --quiet 关闭详细输出
  • -p 显示执行计划
  • -i hostname(--impala=hostname)指定连接主机,格式hostname:port,默认端口是2100
  • -r(--refresh_after-connect)刷新所有元数据
  • -q query(--query=query)从命令执行查询,不进入impala-shell
  • -d default_db(--database=default_db)指定数据库
  • -B(--delimited)去格式化输出
  • -f query_file(--query_file=query_file)执行查询文件,以分号间隔
  • -o filename(--out_file filename)结果输出到执行文件
  • -c 查询执行失败时继续执行
  • -k(--kerberos) 使用kerberos安全加密方式运行impala-shell
  • -l 启用LDAP认证
  • -u 启用LDAP时,指定用户名


5.查询计划
Impala前端负责将SQL编译为可执行的查询计划 ,由Java开发,它由 SQL解析器、基于成本的优化器组成 除去基本的SQL操作,它还支持内联视图、关联或非关联子查询、各种外连接、semi-/anti-连接、窗口分析函数 。查询编译遵循传统的划分:查询解析、语义分析、查询计划/优化。最大挑战来自 计划器,它将执行计划组织为两个阶段,(1)单点计划(2)计划并行和分割
第一阶段,将解析树转换为不能执行的单点计划树 ,包括如下计划内容:HDFS/HBase扫描、hashjoin、crossjoin、union、hashaggregation、sort、top-n和分析评估。它 负责基于评估推断断言 将断言赋予最低层可能的节点,根据分区剪枝、设置限制/偏移、实施列的投影并完成一些基于成本的优化比如排序、合并分析窗口函数和join重排序以最小化总成本
第二阶段,将单个节点的计划转换为一个分布式的执行计划,基本的目标在于最小化数据移动和最大化本地数据扫描 此计划通过在计划节点间增加必要的交换节点实现分布式,通过增加额外的非交换节点最小化网络间的数据移动 ,在此阶段,为每个join决定join策略,被支持的join策略被广播和分区,前者复制join的整个build端至整个集群执行probe,后者则通过hash重分布join的build和probe端。Impala选择哪种策略基于对最小化网络间数据交换的评估并发掘join输入的数据分区。
Impala其实就是Hadoop的Dremel,Impala使用的列存储格式是Parquet。Parquet实现了Dremel中的列存储,未来还将支持 Hive并添加字典编码、游程编码等功能。Impala的系统架构如图1所示。 Impala使用了Hive的SQL接口 (包括SELECT、 INSERT、Join等操作),但目前 只实现了Hive的SQL语义的子集(例如尚未对UDF提供支持) 表的元数据信息存储在Hive的 Metastore中 StateStore是Impala的一个子服务,用来监控集群中各个节点的健康状况,提供节点注册、错误检测等功能 Impala在每个节点运行了一个后台服务Impalad,Impalad用来响应外部请求,并完成实际的查询处理 Impalad主要包含Query Planner、Query Coordinator和Query Exec Engine三个模块 QueryPalnner接收来自SQL APP和ODBC的查询,然后将查询转换为许多子查询,Query Coordinator将这些子查询分发到各个节点上,由各个节点上的Query Exec Engine负责子查询的执行,最后返回子查询的结果 ,这些中间结果经过聚集之后最终返回给用户。
在Cloudera的测试中,Impala的查询效率比Hive有数量级的提升。从技术角度上来看,Impala之所以能有好的性能,主要有以下几方面的原因。
  • Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
  • 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
  • Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。
  • 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销
  • 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
  • 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。



6.后端处理方式
执行引擎是传统的Volcano-style加上交换运算符。 处理以每次一批的方式实现,GetNext()获取一批行记录,元组以行式格式在内存处理。
需要消耗大量内存的操作比如hashjoin、aggregation、排序和分析函数评估被设计可以分片且将工作集进行spill在必要时写到磁盘 Impala为hashjoin 和聚合操作采用分区方法 每一元组hash值的部分bit决定分区,其他bit为hash表 probe 。当有内存压力时,作为牺牲者,一些分区将被spill到磁盘,为其他分区空出内存以完成处理。当为hashjoin构建hash表则带来build端关联基数的减少,构建一个Bloom过滤器并转给probe端扫描器来实现semi-join的简单版本。
7.IO管理
有效检索HDFS上的数据是所有SQL-On-Hadoop的一大挑战,为了实现以接近硬件的速度从磁盘、内存扫描数据, Impala利用称为short-circuitlocal reads 的HDFS特性在读取本地磁盘时忽视DataNode协议 Impala以近磁盘带宽的速度读取数据并使得所有可用磁盘以一般状态达到饱和点 12块磁盘,则可达到1.2GB/S,IO管理者在每块物理磁盘上设置固定数量的工作线程,为Client端提供非同步接口
8.资源/工作负载管理
集群框架的一大主要挑战是资源消耗的周到控制,Impala经常运行于繁忙集群的上下文中,MR、导入数据任务、其他类型的任务等竞争使用固定的内存、磁盘和网络带宽。困难在于 在查询间或者不同任务间协调资源调度而无须在延迟和吞吐间折中
Yarn是Hadoop集群资源协调的当前标准,允许在不同任务间共享诸如内存、CPU等资源而无须划分集群,Yarn有一个集中式架构,由RM来响应CPU和内存资源的请求,这种架构在了解集群所有资源状态的前提下做出分配决定,但存在显著的延迟,而Impala的目标在于每秒响应成千上万的查询,需要 解决资源请求和响应之间存在的过长延迟
  • 解决这个问题综合两个方面,首先,实现1个互补的、独立的准允控制机制来允许用户不需集中式的做出决定而控制自己的负载,再次,在Impala和Yarn之间设计一个调节服务,称之为Llama,即Low-LatencyApplication Master,实现资源缓存、调度和递增式的改变分配,同时未能hit中Llama缓存的资源则延迟等待Yarn的调度决定。
Llama是一个独立的Daemon进程,每一查询先将资源需求发送给它 如资源在其cache中则立即分配,否则转给Yarn ,Impala管道执行模式须所有资源同时到位,执行计划对资源估计慢慢校准,Yarn不支持资源需求更改,Llama汇总后提交给Yarn。
准允控制
除去将YARN作为集群资源管理, Impala还有一个内置的准允控制机制来限制不断到来的请求 资源请求被分配给一个资源池并基于每个资源池的最大并行请求数和最大内存请求限制被允许、拒绝或等待。准允控制器被设置为快速、非集中化 ,以至于每个Impalad可以接受到来的请求而非**服务器的异步请求。
资源池是层次化定义的 ,新请求基于分配策略和ACL控制对资源池的访问被分配到一资源池。

mpala不支持的特性:
查询流数据
删除数据
索引(至少当前版本不支持)
YARN集成(至少当前版本不支持)
全文搜索
不具有像Hive SerDe的可扩展机制
不支持线上查询容错,如果查询出错,如机器宕机,Impala将会丢弃本次查询。
不支持表和列级别的授权
impalad实例之间的传输没有加密
不支持Hive UFS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值