Impala 基于hive的交互式实时分析工具(一) 概念及原理介绍

技术背景

  • impala是参照谷歌的新三篇论文(caffeine-网络搜索引擎,pregel-图形数据库,dremel-瞬时类sql查询)
    当中的dremel而来,号称是当前大数据领域最快的sql查询工具,比sparksql还要快速。但是sparksql是计算效率和数据安全的性价比最优的。
  • 谷歌旧三篇论文(GFS-分布式文件存储,Bigtable-分布式数据库,Mapreduce-分布式计算)

设计目的

  • 为了解决大数据分析场景中的分析速度和准确率的问题
  • 代替hive来实现sql类的分析以及计算

核心特点

  • 优点:
    1.快: 计算速度是目前所有大数据计算框架中最快的,全部基于物理内存计算
    2.与hadoop的生态兼容性非常好: 基于hive,直接读取hdfs数据
    3.与硬件兼容性非常好: 底层是c++实现指令集操作
    4.兼容HQL,能直接对hive中的表进行分析:
    5.支持数据本地优先计算
    6.支持列式存储格式:parquet,orc,rcfile
    7.支持jdbc/odbc的远程访问: 与hive的jdbc访问相同

  • 缺点:
    1.不稳定:全部基于物理内存,容易导致OOM,数据丢失
    2.对硬件资源配置要求高
    3.c++开发,学习开发,维护成本高
    4.不提供序列化与反序列化
    6.无法实现与hive的元数据自动同步,需要手动更新

集群角色

Client

  • 是python写的
  • 分别有shell,jdbc/odbc,hue/beewax

Impala-Shell

1. 外部命令
    impala-shell -r,刷新整个元数据
                -B,去格式化, 
                -- print_header 去格式化显示列名 
                --output_delimiter 指定分隔符
                -f,执行查询文件
                -i,连接到指定的impalad服务上去
                -o,保存执行结果到输出文件
                -p,显示查询计划
                -q,不使用impala-shell查询
                
2. 内部命令
    help 帮助命令
    set 临时设置变量/参数值
    connect 连接到指定的impalad服务
    refresh db.tb 增量刷新,用于表数据修改刷新
    invalidate metadata 全量刷新,也可以增量刷新,用于数据结构修改刷新
    explain 查看执行计划  set explain_level=n,设置查看执行计划基本,1,2,3,其中3级别最详细
    profile 查看执行步骤,用于查看查询结果,集群的调优   

Server

  • 内容: 分为frontend-server和backend-server,各个server上又有各自的细分服务

impala-catalog

  • 概念:
    类似于主节点,元数据的存储区,通过连接hive的metastore服务,进行hive的元数据缓存,且元数据更新单向,不同步更新,即在impala中操作数据时,hive会同时更新元数据,但在hive中操作数据时,impala不会自动更新元数据,需要手动更新(refresh、invalidate),当catalog启动时,会去自动读取一次hive的元数据

  • 职责:
    1.负责接收所有impala从节点访问元数据的请求
    2.负责与hive的metastore服务同步元数据

  • 解释:
    1.启动这个进程时,这个进程会向impala-statestore进行注册,保持心跳
    2.启动这个进程后,会从hive的metastore中同步一次元数据
    3.当impala-server修改元数据时,要将更改请求提交给hivemetastore,并将新的元数据信息同步给所有的impala-server

impala-statestore

  • 概念:
    类似于主节点,负责管理从节点,是从节点的状态存储区,数据位置信息存储区

  • 职责:
    1.管理所有从节点的存活状态,维护一个可用从节点的列表

  • 补充:
    1.负责收集集群中的其他impala进程的资源信息,心跳信息,健康状态等
    2.负责转播元数据

impala-server

  • 概念:
    Impala的server服务端;
    类似于从节点,一般部署在hdfs的datanode上面,进行数据的short-circuit local read短路读取
    是守护进程,用于执行我们的查询计划
    客户端连接之后成为Coordinator协调者,也叫中心调度节点,类似于yarn中的appmaster;
    在实际开发中,不要将所有任务都提交到一个中心调度节点,避免热点问题,因为解析和生成执行计划非常消耗资源,需要使用HAproxy来实现slb;

  • 职责:
    1.接收客户端请求,并成为协调者
    2.负责向主节点同步以及缓存哪些可用的从节点列表
    3.获取各个从节点信息,并分配任务,实现分布式计算

  • 解释:
    1.所有的impala-server在启动时都要向state-store进行注册,并保持心跳
    2.负责接收所有客户端请求,谁接收请求,谁负责调度
    3.condinator的作用:解析sql,调度任务,执行任务

frontend-server

  • 概念:
    属于impala-server的部分,java源码,负责查询计划的生成。

  • 概念:
    查询计划的生成分为两个阶段:
    1.先生成单机查询计划,查询优化之类的
    2.然后生成分布式查询计划,数据和计算资源考虑之类的

backend-server

属于impala-server的部分,c++源码,负责查询的执行,使用指令集操作查询

你可能感兴趣的:(Impala 基于hive的交互式实时分析工具(一) 概念及原理介绍)