更新时间:2023-11-07 GMT+08:00

Impala

Impala

Impala直接对存储在HDFS、HBase或对象存储服务(OBS)中的Hadoop数据提供快速、交互式SQL查询。除了使用相同的统一存储平台之外,Impala还使用与Apache Hive相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue中的Impala查询UI)。这为实时或面向批处理的查询提供了一个熟悉且统一的平台。作为查询大数据的工具的补充,Impala不会替代基于MapReduce构建的批处理框架,例如Hive。基于MapReduce构建的Hive和其他框架最适合长时间运行的批处理作业。

Impala主要特点如下:

  • 支持Hive查询语言(HQL)中大多数的SQL-92功能,包括SELECT,JOIN和聚合函数。
  • HDFS,HBase和对象存储服务(OBS)存储,包括:
    • HDFS文件格式:基于分隔符的Text file,Parquet,Avro,SequenceFile和RCFile。
    • 压缩编解码器:Snappy,GZIP,Deflate,BZIP。
  • 常见的数据访问接口包括:
    • JDBC驱动程序。
    • ODBC驱动程序。
    • Hue beeswax和Impala查询UI。
  • Impala-shell命令行接口。
  • 支持Kerberos身份认证。

Impala主要应用于实时查询数据的离线分析(如日志分析,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景。

有关Impala的详细信息,请参见https://impala.apache.org/impala-docs.html

Impala由Impalad、StateStore、Catalog 3个角色组成。

Impala Daemon

Impala daemon的进程名为Impalad,是Impala的核心进程。

Impalad关键功能如下:

  • 运行在所有的数据节点上。
  • 读写数据文件。
  • 接收来自于Impala-shell命令、Hue、JDBC或者ODBC等客户端的查询请求。
  • 可以并行执行来自集群中其他节点的查询请求,将中间结果返回给调度节点。
  • 可以调用节点将结果返回给客户端。

Impalad进程通过持续的和StateStore通信来确认自己所在的节点是否健康和是否可以接受新的任务请求。

Impala StateStore

负责检查Impala的所有进程健康状态管理进程,进程名为statestored,当有Impalad的进程因硬件失败、网络错误、软件原因或者其他原因下线时,StateStore负责通知到其他的Impalad进程,避免请求分发到不可用的节点上。

Impala Catalog Service

负责Impala的元数据管理,进程名为catalogd,将元数据的变化发送到所有的Impalad进程。当创建表、加载数据或者其他的一些从Hive发起的操作后,Impala查询之前需要在Impalad上执行REFRESH或者INVALIDATE METADATA刷新Catalog上缓存的元数据信息。如果元数据变化是通过Impala执行的,则不需要执行刷新。

Impala与其他组件的关系

  • Impala与HDFS间的关系

    Impala默认利用HDFS作为其文件存储系统。Impala通过解析和计算处理结构化的数据,Hadoop HDFS则为Impala提供了高可靠性的底层存储支持。使用Impala将无需移动HDFS中的数据并且提供更快的访问。

  • Impala与Hive间的关系

    Impala使用Hive的元数据、ODBC驱动程序和SQL语法。与Hive不同,Impala不基于MapReduce算法,它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此,它减少了使用MapReduce的延迟,这使Impala比Hive快。

  • Impala与Kudu间的关系

    Kudu与Impala紧密集成,替代Impala+HDFS+Parquet组合。允许使用Impala的SQL语法从Kudu tablets插入、查询、更新和删除数据。此外,还可以用JDBC或ODBC,Impala作为代理连接Kudu进行数据操作。

  • Impala与HBase间的关系

    Impala表默认使用存储在HDFS上的数据文件,便于全表扫描的批量加载和查询。但是,HBase可以提供对OLTP样式组织的数据的便捷高效查询。