Impala的分布式查询
翻译自《Getting Started with Impala》
分布式查询
分布式查询是impala的核心。曾几何时,你需要研究并行计算,才能开始进行深奥而晦涩的操作。现在,有运行在Hadoop上面的Impala,你只需要...一台笔记本电脑。理想情况下,一个IT部门也会有运行着Cloudera Distribution with Hadoop (CDH)的Linux服务器集群。但在紧急情况下,有一个虚拟机的单独的笔记本电脑就能够进行开发和设计的工作。
当一个Impala查询在一个Hadoop集群上运行时,Impala将工作分解成多个阶段,并且自动的将适当的请求发送给集群中对应的节点。这种自动分工就是为什么Impala能这么好适用于大数据应用案例的原因。当一个工作被4个,10个,100个或者更多的机器划分的时候,这些查询根据单机的容量而应变,形成一个单元来运行。分解工作和制定它在这么多的机器之间通信会产生一些开销。因此,有两个重点:1.为高效的查询处理组织好你的方案 2.帮助Impala估计特定的查询会涉及多少工作。
每个分布式查询执行步骤如下(极大的简化了):
1.Node #1,core #1:从你的本地磁盘的相关数据块中读取大数据文件的一部分。
2.Node #1,core #2:读取相同文件的不同部分。每个请求像这样运行,使得一个节点有着该请求对应的数据块备份。多核意味着每个服务器有并行处理4,8,16甚至更多的数据块的潜力。
3.Node #2 ,core #1:读取整个小的数据文件。该文件要足够小,以至于能适应单个HDFS块,这样一来你就能处理所有事情了。
4.重复以上集群中所有数据节点和节点中的核的工作,增加每个节点的可用磁盘数量。保持运行,直到所有的相关HDFS数据块被处理完。
5.假设:处理一个查询,只需要列X,Y和Z,并且产生一个结果集。那么,每个节点:忽略来自所有其它列的数据。(使用Parquet格式的表的话,这些被忽略的数据将不会被读取)这种操作就是所谓的投影(projection)。
6.每个节点:当你读取数据文件时,忽略所有不符合WHERE条款的行。这就是一个过滤(filtering)操作;在WHERE条款中的条件被称作为断言(predicates)。
7.每个节点:现在可以得到所保存的更加易于管理的数据量,在它上面进行求和,排序,分组,函数调用,或者其它操作。
8.对表中的所有相关的数据文件运行这些步骤,直到所有需要的数据读取完毕,并且每个节点的每个核得出自己部分所对应的结果集。
9.如果查询语句有LIMIT条款,那么结果集会更加被压缩。每个节点:假设你是一个寻找到“top N”结果的节点,并且只返回前N行的结果集。
10.现在如果有一个JOIN或者UNION条框,每个节点传送必要的中间结果给其它节点来进行交叉检查,消除重复等等。对所有的JOIN和UNION条款重复以上步骤。
11.当查询的所有阶段的中间结果都已经准备好了,就尽量把结果返回给任何首先初始化查询的节点。这个协调节点(coordinator node)进行必要的最终排序,分组和聚合。比如,只有当所有的中间结果可以相互比较的时候,才能最终裁定“top 10 visitors”。
所有的并行处理对结果的特性具有以下的影响:
- 任何写操作可能产生多个输出文件,每个节点以单独的文件作为返回的运行结果。
- 哪个数据在哪个节点上处理事先并不确定。因此,在连续查询的时候,会存在一定程度的性能变化。
- 通过后续查询而形成的特定排序,返回至磁盘上的结果是不可靠的。工作可能被分解到不同的节点上,或者节点会根据完成自己那部分的工作的速度,以不同的顺序返回中间结果。
- 跨群集分配工作之前,每个查询的规划阶段会尽可能的计算出未知数。Impala会尽可能的把表达式转化为常量,而不是在每个节点上重新计算它们。当你调用时间相关的函数时,比如说 NOW(), 在查询开始的时候,那时候的时间会被捕获,并且所有节点上使用相同的值,而不会重新计算每个节点开始工作的精确时间。
- 传送最终结果给协调节点所花的时间和结果集的大小成正比。因此,Impala的查询一般会避免大表的select * 操作,并且一般会包含多个WHERE条款,一个LIMIT条款或者聚合函数,来把结果压缩成相对小的体积,并且减少网络开销。
Impala的分布式查询的更多相关文章
- mongodb分布式查询
分布式查询:mongodb的分布式模型分为replica set和sharded cluster. sharded集群中将read根据sharding key(分片键)转发到指定的shard节点,re ...
- SQL分布式查询、跨数据库查询
--[方法1]连接服务器方法 --step1 创建链接服务器 exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB', 'ip地址' exec sp ...
- sql server中分布式查询随笔
由于业务逻辑的多样性 经常得在sql server中查询不同数据库中数据 这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 exec sp_a ...
- Oracle 跨库 查询 复制表数据 分布式查询
方法一: 在眼下绝大部分数据库有分布式查询的须要.以下简单的介绍怎样在oracle中配置实现跨库訪问. 比方如今有2个数据库服务器,安装了2个数据库.数据库server A和B.如今来实如今A库中訪问 ...
- T-SQL 分布式查询
--返回本地服务器中定义的链接服务器列表. EXEC sys.sp_linkedservers /* 创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射. 当用户登录 ...
- sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
由于业务逻辑的多样性,经常得在sql server中查询不同数据库中数据,这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 EXEC sp_a ...
- MSSQl分布式查询(转)
MSSQlServer所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 从概念上来说分布式查询与普通查询区别 ...
- 求解:为什么impala实现hive查询 可以使用ifnull()函数,不可以使用length() 函数
求大神解惑,找了很久都没有找到为什么??? hive支持length() 函数,不支持ifnull()函数??? impala实现hive查询 支持ifnull()函数,不支持length() 函数 ...
- Kafka分布式查询引擎
1.概述 Kafka是一个分布式消息中间件系统,里面存储着实际场景中的数据.Kafka原生是不支持点查询的,如果我们想对存储在Topic中的数据进行查询,可能需要对Topic中的数据进行消费落地,然后 ...
随机推荐
- bryce1010专题训练——CDQ分治
Bryce1010模板 CDQ分治 1.与普通分治的区别 普通分治中,每一个子问题只解决它本身(可以说是封闭的) 分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身 2.试 ...
- bzoj 4597||洛谷P4340 [Shoi2016]随机序列
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 https://www.luogu.org/problemnew/show/P4340 妄图 ...
- python入门之前面内容拾遗
int n1 = 123 #根据int类,创建了一个对象 n2 = int(123) #根据int类,创建了一个对象,这里实际上调用了int类里的内置函数__int__(x,2),其中x为定义的对象, ...
- 转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法
今天在使用sqlplus时出现 =============================================== ERROR:ORA-28002: the password will e ...
- [转]SqlServer索引的原理与应用
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...
- Java中,数值比较大小,以及数值判断相等
Java中,数值比较大小,以及数值判断相等
- Promise/A+规范
1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...
- Java编程基础-变量
1.变量的定义. 变量与常量相对应,变量是在程序运行过程中它的值允许改变的量,变量可以通过变量名访问. 2.Java中的三大变量 (1).类变量.又称为静态变量,在类中定义类的属性时,使用static ...
- jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- 在PaaS上开发Web、移动应用(2)
在PaaS上开发Web.移动应用(2) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web.移动应用(2) PaaS优点与限制(3) 6. 巨型代码,是指持续不断地向一个应用程序添加 ...