1.优点

1.1  快!

主节点生成执行计划树并分发执行计划至各节点并行执行的拉式获取数据(MR:推式获取数据)

计算的中间结果不写入磁盘

1.2 便利

提供SQL语义,可以方便的进行复杂的数据分析任务

2.缺点

2.1 啃内存

对于内存的依赖过于严重,内存溢出直接导致技术任务的失败

2.2 SQL支持度低

不支持UDF,不支持UPDATE/DELTE操作,不支持同一SELECT中多个DISTINCT

3.内存优化

3.1 SQLOperations that Spill to Disk

即在内存不足时将数据存入磁盘进行计算。这是在Impala 1.4 for CDH4、CDH5.1开始支持的功能,以增加了磁盘IO,延长了运算时间为代价,避免了内存溢出的问题。

开启方式:

impalashell中执行

setDISABLE_UNSAFE_SPILLS=0

setDISABLE_UNSAFE_SPILLS=FALSE

赋值为1或TRUE则是关闭

注意:该功能也是有限制的:

  1. 不是所有的SQL语句都能触发,例如union关键字还是会触发内存溢出错误;

  2. 各个节点的内存峰值限制不能过低,低于运算所需分配给各个节点的最小内存;

  3. 运算explain输出的各个节点预估内存不能过分高于各个节点的实际物理内存;

  4. 当触发“Spill to Disk”功能时有其他并发查询,仍会触发内存溢出错误;

  5. 对磁盘的空间有一定的要求,磁盘运算的数据会写入到impala各个节点的临时目录下,增加了磁盘I/O,并且会引发不可控制的磁盘占用。

所以,这个功能不是内存优化的首选方案

3.2 SQL优化

1.Compute Stats

COMPUTE STATS 是统计表的结构以及数据信息(表、分区、列的数据量和数据分布信息)并存储在到数据库中,集群根据统计信息优化数据分析操作。

看似只是Impala中一条获取表的统计信息的简单语句,但在整个分析任务调度过程中却起着相当重要的作用。该语句获取的统计信息不仅在Impala对JOIN、GROUP BY、ORDER BY、UNION、DISTINCT等资源高消耗的查询进行优化时会使用到,而且对HBase的表也同样起作用。

使用:

compute STATS [table_name]

查看统计结果

SHOW TABLE STATS [table_name]

2.执行计划 (Explain)

通过在SQL语句前面加上 explain 执行,并就可以查看到该SQL的具体执行计划情况(实际上并未真正执行)

执行计划是从底层显示Impala如何读取数据,如何在各节点之间协调工作,组合并传输中间结果,并获得最终结果集的全过程。

执行计划可以提供给我们的帮助:

(1)通过读取的数据量,我们可以判断分区策略是否有效,并结合集群大小预估读取这些数据需要的实际等。

(2)可以看到执行过程中聚合、排序、统计函数、交互的顺序及具体执行细节,可以从更高级别看到中间结果在不同节点间的流向。

(3)我们可以看到操作是否被Impala不同的节点并行执行,以及各节点所需内存预估值。

(4)通过配置EXPLAIN_LEVEL参数,可以了解到更详细的输出信息。取值从0~3,对应的执行计划信息越来越详细。

Impala 技术点梳理的更多相关文章

  1. .NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标

    文章出自:http://www.cnblogs.com/ice-river/p/3475041.html 一 .NET平台技术体系梳理 .NET平台应用领域众多(桌面开发,web开发,移动开发),不断 ...

  2. #WPF的3D开发技术基础梳理

    原文:#WPF的3D开发技术基础梳理 自学WPF已经有半年有余了,一遍用,一边学.但是一直没有去触摸WPF的3D开发相关技术,因为总觉得在内心是一座大山,觉得自己没有能力去逾越.最近因为一个项目的相关 ...

  3. Java架构技术知识点梳理

    Java程序员应该加以重视: 吃透基础技术 养成良好的阅读源码的习惯 有长期的技术学习规划 下面,我们来一起逐条看看,特别是第 3 个方法. 想要做到年薪50万,首先你自己必须是高水平的程序员! 能年 ...

  4. Web前端开发--JS技术大梳理

    什么是JS      JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语 ...

  5. React技术栈梳理

    一.react是什么? react是一个js框架,可以用它来编写html页面,使用react后我们可以完全抛弃html(只需要一个主index文件),而用纯js来编写页面: 二.为什么要使用react ...

  6. C#基础知识梳理索引

    C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...

  7. .NET平台技术体系

    .NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标 一 .NET平台技术体系梳理 .NET平台应用领域众多(桌面开发,web开发,移动开发),不断有新的编程爱好者开始学习或从其他平台转移到 ...

  8. fir.im Weekly - 人人都需要的 IT 技能图谱

    AlphaGo 与李世石的人机世纪大战落下帷幕,不禁让人思考<失控> 中说道的 "机器正在生物化,而生物正在工程化 ".作为人类,在未来能否保全最后的智力骄傲成为一个疑 ...

  9. Android Wear(手表)开发 - 学习指南

    版权声明:欢迎自由转载-非商用-非衍生-保持署名.作者:Benhero,博客地址:http://www.cnblogs.com/benhero/ Android Wear开发 - 学习指南 http: ...

随机推荐

  1. Git查看、删除远程分支和tag

    本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使 ...

  2. python web 程序的9种部署方式

    python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 Web Server====>    Application=====>   DB S ...

  3. linux 系统性能指标

    一.查看CPU使用情况 cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait. 平均负载(loadaverage)是指某段时 ...

  4. 0603-Zuul构建API Gateway-通过Zuul上传文件,禁用Zuul的Filter

    一.通过Zuul上传文件 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_ ...

  5. Jmeter(二)参数化

    参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则:这样,脚本在运行时就可以根据需要选取不同的参数值作为输入.这 ...

  6. Spark 2.2 DataFrame的一些算子操作

    Spark Session中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现. 可以参考,Scala提供的Da ...

  7. 移植nand驱动补缺:make mrproper与make clean以及make distclean,find/grep. makefile

    make mrproper与make clean以及make distclean的区别: linux内核源码根目录下面的makefile中有很清晰的解析: useage: “clean”:Remove ...

  8. Excel文本型数据转为数值型的方法

    操作步骤非常简单,适用于所有版本的Excel. 在任意一个空白单元格中输入数值1,然后选中该单元格,执行复制操作: 选中需要转换的单元格(或区域),执行“编辑.选择性粘贴”命令,打开“选择性粘贴”对话 ...

  9. 安卓和ios的区别

    安卓不闪退,会卡死,有几率复活,也有可能要强制重启,iOS默认闪退,强制重启的几率小很多. 总的来说,如果要深层次挖掘Android的漏洞就要明白linux内核安全,如果要挖身深层次挖掘iOS的漏洞就 ...

  10. mysql数据库从删库到跑路之mysql库操作

    一 知识储备 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student, ...