ClouderaImpala官⽅⽂档中⽂翻译-1
Impala官⽅⽂档中⽂翻译版
2014-08-25
参考链接:
Cloudera Impala User Guide:
1、Impala简介
1.1概述
Impala提供针对Hadoop⽂件格式的⾼性能、低延迟SQL查询,快速的查询响应可以让我们能够对分析查询进⾏交互探索和微调,⽽传统的长时间批处理job⽆法与之相⽐。
Impala与Hivemetastore database相集成,这两个组件之间可以共享database和table。与Hive的⾼度集成,与HiveQL语法的兼容,让你可以使⽤Impala或Hive进⾏表的创建、查询、加载数据等。
Impala的核⼼优势如下:
l  Impala与现有的CDH⽣态系统集成,意味着data能通过CDH的不同⼿段进⾏存储、共享、访问。这也能避免数据储藏(avoid data silos)且最⼩化数据移动开销。
l  Impala提供对CDH中数据的访问,⽽⽆需懂得MapReduce编程需要的Java技能。Impala能直接从HDFS中获取数据。Impala也能提供访问HBase数据库系统数据的SQL前端。
l  Impala通常能在⼏分钟或者秒级时间内返回结果,⽽不像hive查询需要数⼗分钟或者数个⼩时。
l  Impala⾸创使⽤Parquet⽂件格式,它是⼀种⾯向数据仓库⼤规模查询优化的列存储格式。
1.2 Using cloudera impala
Impala提供针对HDFS、HBase数据的快速、交互式查询。与Hive相⽐,除了使⽤相同的统⼀存储平台外,Impala也使⽤相同的元数据、SQL语法、ODBC驱动和⽤户界⾯Hue。这样就为实时或批处理查询提供了统⼀的平台。
1.2.1 Impala Benefits
Impala提供了:
l  熟悉的SQL界⾯;
l  在Hadoop上进⾏交互查询的能⼒;
l  在集环境中进⾏分布式查询,便于扩展和使⽤廉价机器;
l  在不同组件上⽆需copy、export/import⽽进⾏数据共享的能⼒,⽐如⽤Pig写—impala读,或者⽤impala写—Hive读;
l  针对⼤数据处理和分析的单系统,客户可以避免在modeling和ETL上的开销;
1.2.2 How impala work with CDH
下图展⽰了Impala在Cloudera环境中的位置:
Impala由以下组件构成:
l  Clients:Hue,ODBC客户端,JDBC客户端,impala shell都可以和impala交互。这些接⼝通常⽤于提交query或者完成管理任务,⽐如连接到impala;
l  Hiver Metastore:关于可访问数据的存储信息。例如,metastore可以让impala知道哪些数据库可⽤以及它们的结构。当你执⾏create,drop,alter schema objects,load data into tables等其他SQL语句,相关的元数据metadata变化⾃动⼴播给所有的impala nodes,这是通过catalog service实现的(impala 1.2引⼊);
l  Cloudera Impala:这个进程,运⾏在DataNodes上,协调并执⾏query。每个impala实体可以receive,plan,coordinate query from impala client。查询被分发到impala nodes上,这些节点像worker⼀样,执⾏并⾏的查询⽚段;
l  HBase和HDFS:存储待查询的data;
Imala查询执⾏的流程:
1、  ⽤户应⽤通过ODBC,JDBC发送SQL查询给Impala。⽤户应⽤可以连接到任何⼀个impalad节点,该impalad节点成为这个query的协调者;
2、  Impala解析query,分析并决定impalad实体需要执⾏什么tasks。执⾏会针对优化效率进⾏plan;
3、  Impalad实体访问本地HBase,HDFS服务获取数据;
4、  每个impalad返回数据给协调者impalad,协调者返回result给client;
1.2.3 Impala的主要特点
Impala⽀持:
l  Hive Query语⾔的⼤部分常见特征,如select,joins和聚集函数;
l  HDFS和HBase存储,包含:
HDFS⽂件格式:Text file,SequenceFile,RCFile,Avro file,Parquet;
压缩编码:Snappy,GZIP,Deflate,BZIP;
l  常见的Hive接⼝:
JDBC driver;
ODBC driver;
Hue Beeswax,和新的impala query UI;
l  Impala命令⾏接⼝;
l  Kerberos授权;
1.3 Impala概念和架构
1.3.1 Impala Server组件
Impalaserver是⼀个分布式的,⼤规模并⾏处理(MPP)的数据库引擎。它包括不同的守护进程,运⾏在CDH集中特定的主机上。各个components如下:
The Impala Daemon
这是ImpalaServer的核⼼组件,即运⾏在集每个node上的impalad守护进程。它负责读写数据⽂件,接受impala-shell、Hue、JDBC、ODBC传来的query,对查询进⾏并⾏化处理,并分发work给集的每个节点,传递中间结果给协调者节点。
你可以查询给任何⼀个impalad节点,该节点变为协调者节点。其他节点传递部分结果给协调者,协调者构建最终结果。在实际中,为了负载均衡,你可以提交不同查询给不同的impalad节点。
mysql操作官方文档
Impalad进程会与statestore进⾏通信,确认哪些节点是健康的,可以接受新的work。
每当任何impala节点创建,修改,删除任何类型的对象或者插⼊,加载数据通过impala执⾏时,所有的Impalad都会收到catalogd守护进程发来的⼴播消息。
The impala Statestore
Statestore组件检查impalad的健康状况,并不断传递它的发现给每个impalad。它由⼀个statestored守护进程代表,仅仅需要运⾏在集的⼀个节点上。如果⼀个impala节点掉线了,statestore通知所有其他节点以便未来的查询可以避免向该坏节点发送请求。
由于statestore的⽬的是在出错时提供帮助,故它对于impala集正常操作并不重要。如果statestore停⽌了或者变的不可达了,其他节点会继续运⾏,继续分发work;只是集变的不太健壮了,试想如果有节点在statestore掉线后失效。当statestore恢复正常后,它再次和其他节点建⽴通信,并恢复它的监控功能。
The Impala Catalog Service
Catalogservice组件在所有节点中传递metadata的变化。它由catalogd进程代表,仅需要运⾏在⼀个节点上。由于请求是通过statestore进程传递的,故通常把statestored进程和catalogd进程运⾏在同⼀个节点上。
该组件取代了对REFRESH和INVALIDATEMETADATA语句的需求。通常,如果你发出CREATE DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, 或者DROP TABLE语句执⾏,你需要在其他任何⼀个节点上执⾏INVALIDATE METADATA,以便你能获取到最新的改变。类似地,如果你在⼀个节点上进⾏INSERT操作,那么你需要在其他节点执⾏REFRESH
table_name,才能进⾏query。Catalog service是你不在需要这么做,但是前提是你的更新语句是在impala上执⾏的,如果是在hive中执⾏的,那么你仍然需要在某⼀个impala节点(不需要在所有的impala节点上)上执⾏REFRESH, INVALIDATE操作。
默认情况下,启动时metadata加载和缓存是异步进⾏的,故impala可以⽴即接受request。如果想等待metadata加载完毕在接受查询,那么可以配置catalogd的启动参数--load_catalog_in_background=false。
Note:在impala 1.2.4或者更新版中,在hive中创建⼀个新的table后,你可以给INVALIDATEMETADATA加上table name参数,这样可以只更新该表的元数据,⽽不必重新加载所有
的元数据。
1.3.2 Programming Impala Applications
Impala的核⼼开发语⾔是SQL。你也可以使⽤Java或者其他语⾔通过JDBC,ODBC与impala交互。对于特定类型的分析,你可以提供⾃⼰编写的UDF函数。
Impala SQL语⾔总览
ImpalaSQL语⾔从HiveQL演化⽽来。⽬前,Impala SQL⽀持HiveQL语句、数据类型、内建函数的⼀个⼦集。
对于来⾃传统数据库背景的⼈,下⾯的特征可能看起来很熟悉:
l  Impala SQL集中于query,只包含很少的DML。没有UPDATE和DELETE语句。过期数据通常被丢弃(通过DROP TABLE或者ALTER TABLE…DROP PARTITION语句)或者被替换(INSERTREPLACE语句);
l  所有的数据加载通过INSERT语句完成,通常是通过其他表的查询来⼤批量插⼊数据(insert data in bulk by querying from other tables)。有两个变种,INSERTINTO是插⼊到现有数据后⾯,INSERT
OVERWRITE是替换⼀个table或者partition的全部内容(类似于TRUNCATE TABLE followed by a new INSERT)。没有INSERT …VALUES这种插⼊⼀⾏的⽤法;
l  通常构建table和数据⽂件在其他环境中,然后绑定impala以便进⾏实时查询。相同的数据⽂件和table元数据在Hadoop的不同组件中共享;
l  由于Hadoop和Impala集中于⼤数据上的数据仓库风格的操作,Impala SQL包含⼀些传统数据库系统导⼊数据的风格,如你可以创建⼀个table,它读取逗号分隔的⽂本⽂件,可以在CREATE TABLE语句中指定分隔符。你可以创建external table,读取已经存在的数据⽂件,但是⽆需移动转换;
l  由于impala读取⼤量的可能未经整理的或者不可预见的数据,故它没有对string数据类型强加长度限制。例如,你可以定义⼀个STRING 类型的列,⽽不⽤CHAR(1)或者VARCHAR(64);
l  对于查询密集的应⽤,你会发现熟悉的 joins,built-in functions,⽤于处理string,number,date,aggregate
function,subquery和⽐较操作符例如IN()和BETWEEN;
l  从数据仓库来看,你能发现这也有partitioned tables;
l  在impala 1.2或更⾼版本中,UDFs让你在SELECT和INSERT…SELECT语句中进⾏⾃定义的⽐较和转换逻辑;
Impala Programming Interfaces总览
你可以连接并提交查询给impalad通过:
l  Impala-shell交互命令解释器;
l  Apache Hue基于web的⽤户接⼝;
l  JDBC
l  ODBC
通过在⾮Linux平台上的JDBC,ODBC应⽤,你可以在异构环境中使⽤Impala。你也可以使⽤多种BI⼯具与Impala进⾏连接。
每个impalad守护进程运⾏在不同的节点,监听⼏个接受请求的端⼝。来⾃impala-shell和Hue的请求使⽤同⼀个端⼝到达impalad。Impalad为JDBC,ODBC请求监听不同的端⼝。
1.3.3 How Impala Fits into the Hadoop Ecosystem
Impala利⽤许多Hadoop中熟悉的组件,它可以与其他Hadoop组件交换数据,既可以作为消费者也可以作为⽣产者,它可以灵活地融⼊你的ETL,ELT管道中。
How Impala works with Hive
impala⼀个主要的的⽬标就是使SQLon Hadoop⾜够快,有效率地适⽤于新类型⽤户并开辟Hadoop新的⽤例类型。实际上,它利⽤了已有的Hive框架,这是许多Hadoop⽤户已经执⾏长时间运⾏、⾯向批处理的SQL查询的平台。
特别地,Impala在传统的MySQL或者PostgreSQL中保存table定义,就是metastore,Hive也在相同的数据库中保存这类数据。因此,Impala能访问由Hive定义或加载过的table,只要所有的列使⽤Impala⽀持的数据类型、⽂件格式和压缩编码。
最初关注查询特征和性能意味着Impala⽤SELECT能读取的数据类型要⽐它⽤INSERT能写⼊的数据类型多。为了查询
Avro,RCFile,SequenceFile⽂件格式,你可以使⽤Hive加载这类数据。
Impala查询优化器也能利⽤tablestatistics和cloumn statistics。原来使⽤ANALYZE TABLE在Hive中收集这类信息,在impala 1.2.2以后,使⽤impala的COMPUTE STATS语句替代,该语句需要的设置更少,更可靠更快,不需要在impala-shell和Hive shell中进⾏切换。
Impala Metadata和Metastore总览
Impala利⽤metastore维护着table定义信息。Impala也跟踪数据⽂件低级特性的其他metadata:即HDFS中block的物理位置。
对于⼀个有⼤量数据and/or许多分区的table来说,获取所有的metadata可能很耗时。因此,每个impala节点缓存着所有这些元数据,便于针对这些表的未来查询重⽤这些元数据。
如果数据表或者其中的数据被更新,所有其他的impalad进程必须收到最新的元数据,以便在新的查询到来之前代替过时的缓存数据。在impala1.2之后,对于所有在impala中提交的DDL和DML语句的元数据更新是由catalogd进程协调⾃动进⾏的。
对于通过Hive提交的DDL和DML,或者HDFS中进⾏的⼿动更改,依然需要使⽤REFRESH(新数据加到现有table中)语句或者INVALIDATE METADATA(新建table,drop table,进⾏HDFS rebalance操作,删除数据⽂件)语句在impala中进⾏元数据刷新。执⾏INVALIDATE METADATA会⾃动获取meta
store跟踪的所有table的元数据。如果你知道只有特定的table在impala之外被改变了,你可以使⽤REFRESH table_name只更新这些表的元数据。
How Impala Users HDFS
Impala使⽤HDFS作为主要数据存储介质。Impala依赖HDFS提供的冗余机制来防⽌单节点的硬件或者⽹络中断。Impala表格数据时存放在HDFS中的数据⽂件,使⽤熟悉的HDFS⽂件格式和压缩编码。当某个⽬录中的数据⽂件提供给新的table,impala会读取该⽬录所有的数据,忽略⽂件名。新的数据被添加到有impala控制名字的⽂件中。
How Impala Users HBase
HBase也是impala可选的存储介质。它是建⽴在HDFS之上的数据库存储系统,没有内置的SQL⽀持。许多Hadoop⽤户已经⽤它存储⼤量数据,通过在impala中定义table并映射到HBase中等价的table,你可以通过Impala查询HBase的数据表内容,甚⾄进⾏同时包含Impala和HBase数据表的join查询。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。