Impala的分布式查询

2024-06-02 04:58
文章标签 查询 分布式 impala

本文主要是介绍Impala的分布式查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/u011239443/article/details/51655483

翻译自《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的分布式查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023087

相关文章

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX