Impala概念与架构

下面的内容介绍Cloudera Impala的背景资料及特性,以便你更高效的使用它。Where appropriate, the explanations include context to help understand how aspects of Impala relate to other technologies you might already be familiar with, such as relational database management systems and data warehouses, or other Hadoop components such as Hive, HDFS, and HBase.

继续阅读:

  • Impala守护进程
  • Impala Statestore
  • Impala目录服务
  • Impala SQL方言
  • Impala编程接口
  • Impala如何与Hive协同工作
  • Impala元数据与Metastore
  • Impala如何使用HDFS
  • Impala如何使用HBase

Impala守护进程

Impala的核心组件是一个守护进程,即impalad进程,运行在集群中每一节点上。Impalad读、写数据文件;接受来自impala-shell命令行、Hue、JDBC或ODBC的命令;并行化查询并分发工作到集群中的其他节点上;并传递查询中间结果到中央协调器节点。

你可以向运行在任意节点上的Impala守护进程提交一个查询,这一节点成为该查询的协调器节点。其他节点传递局部结果回协调器节点,这将构成查询的最终结果。当在impala-shell命令行运行功能测试时,出于方便,你可能始连接到同一个Impala守护进程。而在生产集群中,你可能使用JDBC或ODBC接口,采用循环制负载均衡地向各个节点的Impala守护进程提交查询。

Impala守护进程定时与statestore通讯,以确定哪些节点是健康的,可以接受新的工作。

Impala守护进程接收catalogd守护进程(Impala 1.2中引入)的广播,广播信息包括集群中任意Impala节点上创建、修改、删除任意类型的对象,或者通过Impala执行的INSERTLOAD DATA语句。这一后台通讯最小化了在Impala 1.2 之前必须执行REFRESHINVALIDATE METADATA 语句以便跨节点元数据的需求。

Impala Statestore

Impala中用来检查集群中所有节点Impala守护进程健康情况的组件是statestore,并将它的发现持续的发送到这些Impala守护进程。这一组件对应的守护进程是statestored;一个集群中只需要一个节点上有这个守护进程。假如一个Impala节点因为硬件故障、网络错误、软件问题等等原因而离线,statestore会通知其他所有节点,这样以后的查询将避免请求无法访问的节点。

因为statestore的作用是出错时提供帮助,因此对于Impala集群的正常运行并不是至关重要的。如何statestore没有运行或者不可访问,其他节点会继续正常运行、互相之间正常分发工作;当statestore离线时,有节点失效,集群只是变得不太可靠。当statestore恢复在线,它将重建与其他节点的通讯,并恢复它的监控功能。

Impala目录服务

Impala中用来传递Impala SQL导致的元数据变化的组件是目录服务,它把这些变化传递给集群中所有的节点。这一组件对应的守护进程是catalogd;一个集群中只需要一个节点上有这个守护进程。因为请求是通过statestore传递的,因此statestored和catalogd 服务应当运行在同一节点上。

Impala 1.2中引入的这一新组件为了向减少执行 REFRESHINVALIDATE METADATA 语句的需求。以前,当你在Impala节点上执行了 CREATE DATABASEDROP DATABASECREATE TABLEALTER TABLEDROP TABLE 语句,在其他节点上执行查询前,需要先执行 INVALIDATE METADATA,以使那些节点获取schema对象的变化。类似的,假如你在某个节点上执行了 INSERT 语句,在其他节点上执行查询前,需要先执行 REFRESH 表,以便能识别新添加的数据文件。目录服务避免了这些因在Impala中执行语句导致元数据变化而造成必须执行 REFRESHINVALIDATE METADATA 语句的需要;但当你在Hive中创建表、载入数据时,仍然需要在执行查询前运行 REFRESHINVALIDATE METADATA

Impala 1.2中的这一新功能,涉及到了Impala的以下方面:

  • 参见安装Cloudera Impala,升级 Impala、开始使用Impala,获取catalogd守护进程的实用信息
  • 当在Impala中执行 CREATE TABLEINSERT 或其他表修改、数据修改操作时,不再需要执行 REFRESHINVALIDATE METADATA 语句。但是在Hive中执行这些操作,或者直接在HDFS操作数据是,这两个语句仍然需要,但是只需要在其中一个节点上运行,不再需要在所有节点上都运行。参见 REFRESHINVALIDATE METADATA 语句用法了解最新用法。
  • 参见Impala目录服务了解catalogd服务的相关信息。

Impala SQL方言

Impala SQL方言发源于Apache Hive组件(HiveSQL)使用的SQL语言。因此,对于已经熟练在Hadoop基础设施上运行SQL的用户来说,Impala SQL也很熟悉。当前来说,Impala SQL 支持HiveQL语句、数据类型以及内建函数的一个子集。

对于有传统数据库背景的用户来说,Impala SQL以下方面看起来熟悉或不同:

  • Impala SQL专注于查询,有相对较少的DML语句,没有 UPDATEDELETE 语句。过时的数据,通常直接废弃(通过 DROP TABLEALTER TABLE … DROP PARTITION 语句)或替换(通过 INSERT OVERWRITE 语句)。
  • 使用 INSERT 语句来完成数据加载,通常是通过查询其他表来批量加载数据。有两种方式,INSERT INTO 向现有数据追加, INSERT OVERWRITE 替换整个表或分区(类似先 TRUNCATE TABLE 然后紧跟着一个 INSERT 操作),不支持 INSERT … VALUES 语法插入单行数据。
  • 通常在许多其他环境中构建Impala表定义和数据文件,然后连接到Impala中以便进行实时查询。这些数据文件和表的元数据可以在Hadoop生态系统中共享。
  • 因为Hadoop和Impala都专注于大数据集的数据仓库操作,因此Impala SQL包含许多传统数据库导入工具中用到的术语。例如,你可以在 CREATE TABLE语句中指定分隔符,读取逗号分隔或制表符分割的文本文件。也可以创建 external tables 读取现有文件而不用移动或转换它。
  • 因为Impala读取大量的、可能是不完全整齐的、可预测的数据,它没有限制字符串数据类型的长度。例如,你应当定义数据库列为 STRING 而不是 CHAR(1)VARCHAR(64)
  • 对于查询密集型程序,你会发现许多熟悉的概念,如连接(join)、内置的处理字符串、数字和日期的函数、聚集函数、子查询和比较运算如 IN()BETWEEN
  • 在数据仓库世界里,你会认识到分区表(From the data warehousing world, you will recognize the notion of partitioned tables.)。
  • Impala 1.2及以上版本中,用户定义函数(UDF)允许在 SELECTINSERT…SELECT 操作者执行自定义比较、转换逻辑。

Impala编程接口

你可以通过以下方式连接Impala守护进程、提交请求:

  • impala-shell交互式命令解释器
  • 基于web的Apache Hue用户接口
  • JDBC
  • ODBC

通过这些接口,你可以在异构环境中使用Impala,在非Linux环境中运行JDBC或ODBC程序。也可以通过JDBC、ODBC接口,与不同的商务智能工具结合使用。

每一个Impala守护进程运行在集群中单独的节点上,监听几个端口,接收请求。来源于impala-shell和Hue使用相同的端口连接到Impala守护进程。Impala守护进程监听单独JDBC、ODBC的端口。

Impala如何与Hive协同工作

Impala的主要目标是使得Hadoop上的SQL操作足够快速和高效,以开拓Hadoop新类型的应用,吸引新类别的用户。实际上,它使用已有的Apache Hive的基础架构,而Apache Hive已经被许多Hadoop用户用作执行长时间运行的、面向批处理的SQL查询。(Where practical, it makes use of existing Apache Hive infrastructure that many Hadoop users already have in place to perform long-running, batch-oriented SQL queries.)

特别是,Impala使用传统的MySQL或PostgreSQL数据库保存它的数据定义作为metastore,而Hive也使用相同的数据库保存这些数据。因此,Impala可以直接访问Hive中定义的表或载入的数据,只要全部列使用Impala支持的数据类型、文件格式和压缩编码。

Impala最初专注于查询功能和性能,这意味着它可以在SELECT语句中查询许多类型的数据,远多于INSERT语句中支持的数据类型。你可以使用Hive载入Avro、RCFile、SequenceFile格式的文件,然后在Impala中查询。

Impala查询优化器也可以使用在Hive通过 ANALYZE TABLE 采集的表、列的统计信息。

Impala元数据与Metastore

像上面Impala如何与Hive协同工作所说,Impala在被称为metastore中央数据库中维护表定义信息。Impala还监控数据文件的其他的低层次的特征(Impala also tracks other metadata for the low-level characteristics of data files):

  • 块在HDFS中的物理位置

对于有大量的数据和/或许多的分区的表,获取它的元数据是很耗时的,某些情况下需要几分钟。因此,每一个Impala节点会缓存这些元数据,以便将来针对相同表的查询可以重用。

假如表的结构或数据更新了,在执行针对这个表的查询之前,集群中所有节点的Impala守护进程必须获取最新的元数据,替换掉过期的缓存的元数据。在Impala 1.2版本以后,对于Impala中执行的所有 DDLDML 语句,通过catalogd守护进程协调,元数据的更新是自动的。参见Impala目录服务了解详细信息。

对于Hive中执行的 DDLDML 语句,或手工修改HDFS中文件,你仍然需要使用 REFRESH 语句(向现有表添加数据时)或 INVALIDATE METADATA 语句(当创建新表、删除表、执行HDFS rebalace操作、删除数据文件等之后)。执行 INVALIDATE METADATA后,将获取metastore中跟踪的所有表的所有元数据(Issuing INVALIDATE METADATA by itself retrieves metadata for all the tables tracked by the metastore)。假如你知道在Impala之外是哪些特定的表变化了,可以对每一个受影响的表执行 REFRESH 表名 来获取这些表的最新元数据。

Impala如何使用HDFS

Impala使用分布式文件系统HDFS作为主要的数据存储介质。Impala依靠HDFS提供的数据冗余来防范单个节点的硬件或网络故障。Impala中表的数据物理存放为HDFS中的数据文件,使用熟悉的HDFS文件格式和压缩编解码器。当数据文件出现在新表的目录后,Impala将无视文件名差异,读取该目录下所有文件。新数据被添加到Impala指定文件名的文件里(When data files are present in the directory for a new table, Impala reads them all, regardless of file name. New data is added in files with names controlled by Impala.)

Impala如何使用HBase

HBase可以作为替代HDFS作为存放Impala数据的存储介质。它是一个基于HDFS之上的数据库存储系统,但没有内置的SQL支持。许多Hadoop用户已经配置和存储了大量(通常是稀疏的)数据在里面。通过在Impala中定义表,并映射到HBase里面对应的表,可以在Impala里面查询HBase的内容。甚至可以对Impala和HBase中的表进行连接查询。参见使用Impala查询HBase表了解详细信息。

时间: 2024-11-14 12:36:20

Impala概念与架构的相关文章

InnoDB主要特性、概念和架构

Innodb的主要特性 DML操作遵循ACID模型,事务支持commit,rollback和crash recovery,从而保护用户数据 基于行锁以及类似oracle的一致性读,提升了多用户的并发和性能 基于主键对查询进行优化 为了维护数据的完整性,InnoDB也支持外键.如果使用了外键,insert,update以及delete操作都会得到检查,以确保不会导致多表之间的数据不一致. 可以将InnoDB的表和Mysql其它存储引擎的表混合使用,甚至在同一个sql语句当中.比如:可以使用join

MySQL 主从复制与读写分离概念及架构分析

1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B. MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成. 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication. 在上面的模型中,MYSQL-A就是主服务器,即mast

[转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署

原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498806815fcb59399eee501874bb9e9086bce3050baf1438179330d72d2508871 摘要:开源的最大魅力,是能够满足人们的探索欲和求知欲,让我们可以很深入地了解一个系统,如果我们发现它的设计或者实现中有任何不合理的或者错误的地方,我们可以提出自己的想法并且实

web service概念、架构及相关知识

一.WebService的定义 WebService有好几种定义: W3C组织对其定义:WebService是一个软件系统,为了支持跨网络的机器间互操作交互而设计. WebService通常被定义为一组模块化的API,我们能够通过网络进行调用,来运行远程系统的请求服务. WebService就是暴露给外部使用的,可通过web调用的一组API. WebService是一种跨编程语言和跨操作系统平台的远程调用技术. Web Service = XML+XSD,SOAP和WSDL 事实上这多种定义仅仅

Sahara的基本概念和架构

声明: 本博客欢迎转载,但请保留原作者信息,并请注明出处! 作者:郭德清 团队:华为杭州OpenStack团队 Sahara旨在为用户提供简单部署Hadoop集群的能力,比如通过简单的配置:Hadoop版本.集群结构.节点硬件信息等.在用户提供了这些参数后,Sahara迅速把Hadoop集群部署起来.同时也支持集群的扩容和减容. 其应用场景包括: 1)  提供在OpenStack上快速配置和部署Hadoop集群的能力. 2)  充分利用OpenStack Iaas层的计算能力. 3)  提供分析

Mysql数据库的基本概念和架构

数据库 1.键:主键是表中的标志列.一个键可能由几列组成.可以使用键作为表格之间的引用. CustomerID是Customers表的主键,当它出现在其他表,例如Orders表中的时候就称它为外键. 2.模式 数据库整套表格的完整设计称为数据库的模式. 一个模式应该显示表格及表格的列.每个表的主键和外键. 一个模式并不会包含任何数据,但是我们可能希望在模式里使用示例数据来解析这些数据的含义. 例如:Customers(CustomerID, Name, Address, City) Orders

爬虫----初级概念的架构

每次遇到爬虫,总会听到python,php等等词,其实什么语言无所谓,只要会用就行了.当然,有些人听到爬虫,就会觉得很高级,还在写网站的时候就在想反扒技术什么的,搞得爬虫变成了一个神秘莫测的东西.然而,我想告诉你的是爬虫真的很简单,几分钟搞定它的基本架构,下面请跟我来. 首先,爬虫要做的事情是将获取网页信息,并且将信息保存在一个地方等待被调用.因此爬虫的架构宏观上就有三部分: 网页--->爬虫处理--->保存: 只要将这三个部分处理好了,爬虫也就会了.(基于python语言) 然而,从网页上获

hive概念、架构、部署及原理介绍

转:https://www.aboutyun.com/thread-21544-1-1.html 问题导读: 1.Hive 是什么? 2.Hive 架构分哪几部分? 3.Hive 文件格式是怎样的? 一.Hive是什么? Hive 是基于 Hadoop 构建的一套数据仓库分析系统,它提供了丰富的 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据, 可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运

mysql主从复制--概念及架构

mysql repication 1 mysql repication原理 前端用户的写操作,或者是数据库修改操作,都会记录到二进制日志文件,保存为事件:master通过3306端口将binlog发给slave mysql服务器,slave mysql服务器将binlog保存到relay log,读取relay log并执行一遍,将数据写入磁盘 1.1 主从示意图 1.2 一主多从.多级复制 2 mysql repication先天缺陷 mysql一个查询只能在一颗CPU上执行,若主有多个CPU