impala:大数据交互查询

浩客1年前技术文章683


一、简介

       Cloudera公司推出,提供对HDFSHBase数据的高性能、低延迟的交互式SQL查询功能。基于Hive,使用与Apache Hive相同的元数据,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。是CDH平台首选的PB级大数据实时查询分析引擎。


二、概念与架构

Impala组件

      Impala是一个分布式、大规模并行处理(MPP)数据库引擎。它由不同的守护进程组成,这些守护进程运行在集群中的特定主机上。

55555555555.png


Impala Daemon(Impalad)

      impalad是Impala的核心进程,运行在所有的数据节点上,每个Impalad与DataNode运行在同一台主机上。Impalad与StateStore保持持续通信,以确认哪些Impalad是健康的,可以接受新的工作。Impalad执行的一些关键功能如下:

  • 读写数据文件。

  • 接受来自Hue、JDBC 或 ODBC 的查询。

  • impala-shell 在集群中并行处理查询并分配工作。

  • 将中间查询结果传回中央协调器。

Impala Statestore

      StateStore会检查集群中所有 Impalad的健康状况,并持续向每个Impalad转发检查结果。如果某个 Impalad因硬件故障、网络或其他原因离线,StateStore 会通知所有其他 Impalad,这样未来的查询就可以避免向无法访问的 Impalad发出请求。

      负载平衡和高可用性方面的大多数注意事项都适用于 impalad 守护进程。statestored 和 catalogd 守护进程对高可用性没有特殊要求,因为这些守护进程出现问题不会导致数据丢失。如果这些守护进程因特定主机中断而不可用,可以停止 Impala 服务,删除 Impala StateStore 和 Impala Catalog Server 角色,在其他主机上添加这些角色,然后重新启动 Impala 服务。

Impala Catalog Service

      Impala Catalog会将 Impala SQL 语句中的元数据更改转发给集群中的所有 Impalad。由于请求是通过 StateStore 传递的,因此可以在同一台主机上运行statestored 和 catalogd 服务。每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新(如使用hive在表中insert一条数据,impala是无法读取这条新数据的,需要手动调用命令刷新表)

三、impala运行原理

6666666666.pngImpala执行查询的具体过程:

  1. 当用户提交查询前,Impala 先创建一个负责协调客户端提交的查询的Impalad 进程,该进程会向Impala State Store 提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注订阅信息。

  2. 用户通过CLI客户端提交一个查询到 impalad 进程,Impalad 的Query Planner 对SQL语句进行解析,生成解析树;然后Planner 把这个查询的解析树变成若干PlanFrasment;发送到 Query Coordinator

  3. Coordinator 通过从元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。

  4. Coordinator 初始化相应impalad 上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。

  5. QueryExecutor通过流式交换中间输出,并由QueryCoordinator汇聚来自各个impalad的结果。

  6. Coordinator把汇总后的结果返回给CLI客户端。

四、Impala的优缺点

优点:

  1. 基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销(区别于MR shuffle过程,溢写到磁盘、归并等)

  2. 无需转换为MapReduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快

  3. 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销

  4. 支持各种文件格式,如TEXTFILE 、SEQUENCEFILE、RCFile、Parquet

  5. 可以访问Hive的metastore,对Hive数据直接做数据分析

缺点:

  1. 对内存的依赖大,且完全依赖于Hive

  2. 实践中,分区超过1万,性能严重下降

  3. 只能读取文本文件,而不能直接读取自定义二进制文件

  4. 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新(如使用hive在表中insert一条数据,impala是无法读取这条新数据的,需要手动调用命令刷新表)

相关文章

数据湖技术之iceberg(十三)Iceberg与Hudi对比

Iceberg和Hudi都是数据湖技术,从社区活跃度上来看,Iceberg有超越Hudi的趋势。他们有以下共同点:l   都是构建于存储格式之上的数据组织方式l &nbs...

Impala 操作命令

Impala 操作命令

Impala的外部shell选项描述-h, --help显示帮助信息-v or --version显示版本信息-i hostname, --impalad=hostname 指定连接运行 impala...

CDP实操--Ranger开启ldap认证

CDP实操--Ranger开启ldap认证

集群中已经部署了ldap主主模式,并且使用haproxy进行负载均衡,keepalive提供了虚拟ip。页面配置:Ranger进行同步用户:验证:使用ldap用户登录页面:FAQ:1、admin超级管...

MySQL优化器特性(四)表关联之BNL(Block Nested Loop)和Hash Join

MySQL优化器特性(四)表关联之BNL(Block Nested Loop)和Hash Join

什么是BNLMySQL表关联时,如果关联条件上没有合适的索引,则join时,对于驱动表的每一条记录,都需要全表扫描被驱动表。如果驱动表有多条数据,则需要多次全表扫描被驱动表,查询性能很差。对于这种情况...

Linux 文件锁

1、背景Linux 系统定时任务正在执行时,可能会遇到上个周期的任务还没有执行完,这样便会造成相同的任务同一时间有过个任务进程在执行。如果任务有对互斥资源操作时,有可能产生死锁。2、用法参考flock...

NameNode和SecondaryNameNode工作详解

NameNode和SecondaryNameNode工作详解

一、NN和SNN工作机制我们可以思考一个问题:NameNode中的元数据是存储在哪里的首先假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问NameNode的元数据,响应客户请求,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。