Impala:架构及组件

Impala概述

Impala是一个实时查询工具,主要目标是使SQL-on-Hadoop操作足够快速高效,它提高了大数据在hadoop上的sql查询性能,Impala是对大数据查询工具的补充。Impala不取代基于MapReduce构建的批处理框架,如Hive。

Impala直接读取存储在HDFS、HBase或亚马逊对象存储服务(S3)的数据。除了与Hive使用相同的存储平台以外,impala还与Hive使用相同的元数据、SQL语法(Hive SQL)、ODBC驱动程序和用户界面(HUE中的Impala查询UI)。

基于MapReduce的Hive和其他框架(如spark)适合于长时间运行的批处理作业,例如涉及提取、转换和加载(ETL)类型的批处理作业。而impala则较适合用来做交互式查询。

为了避免延迟,Impala绕过MapReduce,通过专门的分布式查询引擎直接访问数据,这种查询引擎与商用的分布式RDBMSs中的查询引擎非常相似。这样的结果是性能比hive快一个数量级,这取决于查询和配置的类型。

Impala是如何在Apach Hadoop上运作的

Impala如何适应Hadoop生态系统

Impala利用了Hadoop生态系统中许多熟悉的组件。Impala可以将数据与其他Hadoop组件(作为使用者和生产者)互换,因此可以灵活地将其放入ETL和ELT管道中。

Impala如何与Hive配合使用

Impala的主要目标是使SQL-on-Hadoop操作足够快速高效,在实际应用中,它利用了许多Hadoop用户现有的Hive数据来执行长时间运行、面向批处理的SQL查询。

Impala能够使用Hive保存在MySQL或PostgreSQL中的元数据信息,并在相同数据库中存放一些自己的元数据信息,这个MySQL或PostgreSQL被称为metastore,只要所有列使用Impala支持的数据类型、文件格式和压缩编解码器,Impala就可以访问Hive定义或加载的表。

Impala的Metadata 和Metastore概述

如上所述,Impala在一个称为metastore的数据库中维护表的元数据信息,同时还保存一些更加低级别的元数据信息,如HDFS中块的物理位置等。

对于具有大量数据或多个分区的表,检索表的所有元数据是非常耗时的,在某些情况下需要几分钟。因此,每个Impala节点缓存这些全部的元数据,以便将来针对同一个表进行查询。

如果表的元数据或表中的数据已更新,则群集中的所有其他Impalad进程必须接收最新的元数据,替换过时的缓存元数据,然后再对该表进行查询。在Impala 1.2及更高版本中,元数据更新是自动的,通过Catalog进程协调。

对于通过Hive对表进行的修改,或手动对HDFS中的文件所做的更改,则仍然需要使用REFRESH语句(当新数据文件添加到现有表中时)或INVALIDATA语句(对于全新的表,或在删除表、执行HDFS rebalance 操作或删除数据文件后)。执行INVALIDATE METADATA将检索metastore跟踪的所有表的元数据。如果知道只有特定的表被Impala之外的程序更改(如Hive),则可以为每个受影响的表执行REFRESH table_name,以仅检索这些表的最新元数据。

Impala如何使用HDFS

Impala使用分布式文件系统HDFS作为其主要数据存储介质。Impala依靠HDFS提供的冗余来防止单个节点上的硬件或网络中断。Impala表数据在HDFS中物理地表示为数据文件,使用熟悉的HDFS文件格式和压缩编解码器。当数据文件出现在新表的目录中时,Impala会读取所有数据文件,而不考虑文件名。新数据将添加到名称由Impala控制的文件中。

Impala可以部署在DataNode相同的节点上,这样Impala可以直接读取本地的文件,而大大减少网络传输消耗的资源。

Impala如何使用HBase

HBase作为Impala数据存储介质HDFS的替代品。是一个建立在HDFS之上的数据库存储系统,没有内置的SQL支持。许多Hadoop用户已经配置了它,并在其中存储了大量(通常是稀疏的)数据集。通过在Impala中定义表并将其映射到HBase中的等价表,可以通过Impala查询HBase表的内容,甚至可以执行包括Impala表和HBase表在内的联接查询。

Impala如何完成一次查询

Impala:架构及组件_第1张图片

  1.  用户通过提供标准化SQL接口,如ODBC或JDBC客户端等,发送一条SQL给Impala,可以发送给集群中任意一个Impalad,这个Impalad会成为这条查询语句的协调器。
  2. Impala解析条SQL,并进行分析,决定Impala实例需要执行哪些task,以获得执行的最高效率。
  3. HDFS和HBase等存储服务会为本机的Impala实例提供数据。
  4. 每个Impala实例将数据返回给最初的那台协调器,并由它将结果返回给客户端。

Impala的架构

Clients:包括Hue、ODBC客户端、JDBC客户端和Impala Shell都可以与Impala交互。

Hive Metastore:Impala可以使用Hive的元数据信息,通过hive的元数据,impala可以获得Hive的databases以及这些databases的结构。当你通过Impala SQL创建、删除、修改表结构、加载数据进表,相关的元数据就会被修改,并被自动广播至所有impala节点。

Impala:Impala会运行在DataNodes上,用于协调和执行查询语句。每个Impala实例都可以接收、计划和协调来自Impala客户端的查询语句。查询工作会分布在Impala节点之间,然后这些节点会作为worker,并行执行这些查询语句。

HBase and HDFS:用于存储被查询的数据。

Impala的组件

Impalad

Impala是一个分布式的、大规模并行处理(MPP)数据库引擎。Impala只有一个核心的Impalad进程,分布在集群中的特定主机上。

Impalad是impala的守护进程,作为impala的核心组件,它有以下几个重要的功能:

  1. 读取和写入数据文件。
  2. 接受从impala shell命令、Hue、JDBC或ODBC传输的查询。
  3. 将查询并行化,并在集群中分配工作。
  4. 将中间查询结果传输回中央协调员。

Impalad可以通过下列方式部署:

  1. 如果hdfs与impala处于同一集群,则impalad与DataNode部署在相同的机器上。
  2. Impala单独部署在计算集群中,从HDFS、S3、ADL等远程读取数据。

Impalad与StateStore进行持续通信,以确认哪些守护进程是健康的并且可以接受新任务。它们还接收来自catalogd进程(在Impala 1.2中引入)的广播消息,只要有任何Impala集群中的守护进程创建、更改、删除database或table,或者通过Impala执行INSERT或LOAD DATA语句。catalogd将REFRESH或INVALIDATE元数据信息。在Impala 1.2之前则是由Impala守护进程之间协调元数据。

Statestore

StateStore组件用于检查集群中所有Impala守护进程的运行状况,并且不断地将它的发现传递给每个守护进程。

如果impalad由于硬件故障、网络错误、软件问题或其他原因导致故障,StateStore会通知所有其他Impalad进程,在之后的查询就可以避免向无法访问的Impalad进程发出请求。

Catalog

Catalog组件用于将元数据变化发送给集群中的impalad进程,它由一个名为catalogd的守护进程表示。只需要在一台机器上启动这个服务。Catalog和StateStore需要运行在同一台机器上的,因为requests是通过StateStore进程传递的。

--load_catalog_in_background 选项可以控制何时加载表的元数据。

  • 如果设置为false,则在首次引用表时会加载表的元数据。这意味着第一次运行可能会比较慢。从Impala 2.2开始,默认 --load_catalog_in_background值为false
  • 如果设置为true,即使没有查询需要该元数据,Catalog服务也会尝试加载表的元数据。因此,在运行需要元数据的第一个查询时,元数据可能已经被加载。但是,由于以下原因,建议不要将选项设置为true
    • 后台加载可能会干扰查询的元数据加载。如在启动时或invalidating 元数据之后,查询所需要的元数据可能还没被加载或已经被删除。其持续时间取决于元数据的数量,并且可能随机导致查询的运行时间变长,难以诊断。
    • Impala可能会为可能从未使用过的表加载元数据,这可能会增加Catalog大小,从而增加Catalog服务和Impalad的内存使用率。

 

你可能感兴趣的:(Impala)