当前位置: 首页 > news >正文

大数据计算引擎(四)—— Impala

 *重要工具Impala

介绍

Impala是Cloudera提供的⼀一款开源的针对HDFS和HBASE中的PB级别数据进⾏交互式实时查询的一个分布式,大规模并行处理(MPP)数据库引擎,它包括多个进程。最大卖点就是快。

Impala抛弃了了MapReduce 使⽤了类似于传统的MPP数据库技术,大大提⾼了查询的速度。

MPP (Massively Parallel Processing),就是⼤大规模并行处理理,在MPP集群中,每个节点资源都是独⽴享有也就是有独⽴立的磁盘和内存,每个节点通过⽹网络互相连接,彼此协同计算,作为整体提供数据服务。

简单来说,MPP是将任务并⾏的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的 结果汇总在⼀一起得到最终的结果

对于MPP架构的软件来说聚合操作⽐比如计算某张表的总条数,则先进⾏局部聚合(每个节点并⾏计算),然后把局部汇总结果进⾏行行全局聚合(与Hadoop相似)。

ImpalaHive对⽐

Impala的技术优势

  • Impala没有采取MapReduce作为计算引擎,MR是⾮非常好的分布式并⾏行行计算框架,但MR引擎更更多的是⾯面向批处理理模式,⽽而不是面向交互式的SQL执行。与 Hive相⽐比:Impala把整个查询任务转为一棵执行计划树,而不是一连串的MR任务,在分发执行计划后,Impala使⽤拉取的方式获取上个阶段的执行结果,把结果数据、按执行树流式传递汇集,减少的了把中间结果写⼊入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免每次执行查询都需要启动的开销,即相比Hive没了MR启动时间。
  • 使用LLVM(C++编写的编译器器)产生运行代码,针对特定查询生成特定代码。
  • 优秀的IO调度,Impala支持直接数据块读取和本地代码计算。
  • 选择适合的数据存储格式可以得到最好的性能(Impala支持多种存储格式)。
  • 尽可能使用内存,中间结果不写磁盘,及时通过网络以stream的⽅方式传递。

安装配置

Impala⻆角⾊色

  • impala-server:这个进程是Impala真正⼯工作的进程,官⽅方建议把impala-server安装在datanode节点,更靠近数据(短路路读取),进程名impalad
  • impala-statestored:健康监控⻆角⾊色,主要监控impala-server,impala-server出现异常时告知给其它impala-server;进程名叫做statestored
  • impala-catalogd :管理理和维护元数据(Hive),impala更更新操作;把impala-server更更新的元数据通知给其它impala-server,进程名catalogd

官⽅方建议statestore与catalog安装在同⼀一节点上!!

⭐⭐⭐HIVE要集群模式 开启Metastore 建议Matestore与impala-server在一个机子

linux3安装:

yum install impala -y

yum install impala-server -y

yum install impala-state-store -y

yum install impala-catalog -y

yum install impala-shell -y

linux1 linux2 安装

yum install impala-server -y

yum install impala-shell -y

linux3启动

nohup hive --service metastore &

linux1启动

nohup hive --service hiveserver2 &

短路路读取:就是Client与DataNode属于同⼀一节点,⽆无需再经过⽹网络传输数据,直接本地读取。

所有impala节点执行命令:

ln -s /opt/lxq/servers/hadoop-2.9.2/etc/hadoop/core-site.xml

/etc/impala/conf/core-site.xml

ln -s /opt/lxq/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml

/etc/impala/conf/hdfs-site.xml

ln -s /opt/lxq/servers/hive-2.3.7/conf/hive-site.xml

/etc/impala/conf/hive-site.xml

所有节点修改:vim /etc/default/impala

<!--更更新如下内容 -->

IMPALA_CATALOG_SERVICE_HOST=linux123

IMPALA_STATE_STORE_HOST=linux123

MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar

所有节点创建:

# 所有节点创建节点,并建立软连接

mkdir -p /usr/share/java

ln -s /opt/lxq/servers/hive-2.3.7/lib/mysql-connector-java-5.1.46.jar

/usr/share/java/mysql-connector-java.jar

vim /etc/default/bigtop-utils

export JAVA_HOME=/opt/lxq/servers/jdk1.8.0_231

#linux123启动如下⻆角⾊色

service impala-state-store start

service impala-catalog start

service impala-server start

#其余节点启动如下⻆角⾊色

service impala-server start

ps -ef | grep impala

访问impalad的管理理界⾯面

http://linux123:25000/

访问statestored的管理理界⾯面

http://linux123:25010/

启动之后所有关于Impala的⽇日志默认都在/var/log/impala 这个路路径下,Linux123机器器上⾯面应该有三个进程,Linux121与Linux122机器器上⾯面只有⼀一个进程,如果进程个数不不对,去对应⽬目录下查看报错⽇日志.

Impala会附带安装一些其它东西,要删除

[root@linux122 conf]# which hadoop

/usr/bin/hadoop

[root@linux122 conf]# which hive

/usr/bin/hive

which命令 查找hadoop,hive等会发现,命令文件是/usr/bin/hadoop ⽽非我们自己安装的路

径,需要把这些删除掉,所有节点都要执⾏

[root@linux122 conf]# which hadoop

/usr/bin/hadoop

[root@linux122 conf]# which hive

/usr/bin/hive

rm -rf /usr/bin/hadoop

rm -rf /usr/bin/hdfs

rm -rf /usr/bin/hive

rm -rf /usr/bin/beeline

rm -rf /usr/bin/hiveserver2

#重新⽣生效环境变量量

source /etc/profile

进入impala命令: impala-shell

impala的操作流程更HIVE差不多,就不多重复写了

原理

查询原理

impalad

  • 作⽤用,负责读写数据⽂文件,接收来⾃自Impala-shell,JDBC,ODBC等的查询请求,与集群其它Impalad分布式并行完成查询任务,并将查询结果返回给中心协调者。
  • 角色名称为Impala Daemon,是在每个节点上运⾏行行的进程,是Impala的核⼼心组件,进程名是 Impalad;
  • 为了保证Impalad进程了了解其它Impalad的健康状况,Impalad进程会一直与statestore保持通信。
  • Impalad服务由三个模块组成:Query Planner、Query Coordinator和Query Executor,前两个 模块组成前端,负责接收SQL查询请求,解析SQL并转换成执⾏行行计划,交由后端执⾏行行,

statestored

  • statestore监控集群中Impalad的健康状况,并将集群健康信息同步给Impalad,
  • statestore进程名为statestored

catalogd

  • Impala执行的SQL语句句引发元数据发⽣生变化时,catalog服务负责把这些元数据的变化同步给其它Impalad进程(⽇日志验证,监控statestore进程⽇日志)
  • catalog服务对应进程名称是catalogd
  • 由于⼀一个集群需要⼀一个catalogd以及⼀一个statestored进程,⽽而且catalogd进程所有请求都是经过statestored进程发送,所以官⽅方建议让statestored进程与catalogd进程安排同个节点。

1. Client提交任务

Client发送⼀一个SQL查询请求到任意⼀一个Impalad节点,会返回⼀一个queryId⽤用于之后的客户端操

作。

2. ⽣生成单机和分布式执⾏行行计划

SQL提交到Impalad节点之后,Analyser依次执⾏行行SQL的词法分析、语法分析、语义分析等操作;

从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关

数据的所有数据节点

单机执⾏行行计划: 根据上⼀一步对SQL语句句的分析,由Planner先⽣生成单机的执⾏行行计划,该执⾏行行计

划是有PlanNode组成的⼀一棵树,这个过程中也会执⾏行行⼀一些SQL优化,例例如Join顺序改变、谓

词下推等。

分布式并⾏行行物理理计划:将单机执⾏行行计划转换成分布式并⾏行行物理理执⾏行行计划,物理理执⾏行行计划由⼀一

个个的Fragment组成,Fragment之间有数据依赖关系,处理理过程中需要在原有的执⾏行行计划

之上加⼊入⼀一些ExchangeNode和DataStreamSink信息等。

Fragment : sql⽣生成的分布式执⾏行行计划的⼀一个⼦子任务;

DataStreamSink:传输当前的Fragment输出数据到不不同的节点

3. 任务调度和分发

Coordinator将Fragment(⼦子任务)根据数据分区信息发配到不不同的Impalad节点上执⾏行行。Impalad

节点接收到执⾏行行Fragment请求交由Executor执⾏行行。

4. Fragment之间的数据依赖

每⼀一个Fragment的执⾏行行输出通过DataStreamSink发送到下⼀一个Fragment,Fragment运⾏行行过程中

不不断向coordinator节点汇报当前运⾏行行状态。

5. 结果汇总

查询的SQL通常情况下需要有⼀一个单独的Fragment⽤用于结果的汇总,它只在Coordinator节点运

⾏行行,将多个节点的最终执⾏行行结果汇总,转换成ResultSet信息。

6. 获取结果

客户端调⽤用获取ResultSet的接⼝口,读取查询结果。

优化

⽂文件格式

对于⼤大数据量量来说,Parquet⽂文件格式是最佳的

避免⼩小⽂文件

insert ... values 会产⽣生⼤大量量⼩小⽂文件,避免使⽤用

合理理分区粒度

利利⽤用分区可以在查询的时候忽略略掉⽆无⽤用数据,提⾼高查询效率,通常建议分区数量量在3万以下

(太多的分区也会造成元数据管理理的性能下降)

分区列列数据类型最好是整数类型

分区列列可以使⽤用string类型,因为分区列列的值最后都是作为HDFS⽬目录使⽤用,如果分区列列使⽤用

整数类型可以降低内存消耗

获取表的统计指标:在追求性能或者⼤大数据量量查询的时候,要先获取所需要的表的统计指标

(如:执⾏行行 compute stats )

减少传输客户端数据量量

聚合(如 count、sum、max 等)

过滤(如 WHERE )

limit限制返回条数

返回结果不不要使⽤用美化格式进⾏行行展示(在通过impala-shell展示结果时,添加这些可选参数: -

B、 --output_delimiter )

在执⾏行行之前使⽤用EXPLAIN来查看逻辑规划,分析执⾏行行逻辑

Impala join⾃自动的优化⼿手段就是通过使⽤用COMPUTE STATS来收集参与Join的每张表的统计信

息,然后由Impala根据表的⼤大⼩小、列列的唯⼀一值数⽬目等来⾃自动优化查询。为了了更更加精确地获取

每张表的统计信息,每次表的数据变更更时(如执⾏行行Insert,add partition,drop partition等)最好

都要执⾏行行⼀一遍COMPUTE STATS获取到准确的表统计信息。

感谢阅读!!!

http://www.lryc.cn/news/624889.html

相关文章:

  • React diff——差异协调算法简介
  • 深入解析 Qwen3 GSPO:一种稳定高效的大语言模型强化学习算法
  • 整体设计 之“凝聚式中心点”原型 --整除:智能合约和DBMS的深层融合 之2
  • LLM - MCP传输协议解读:从SSE的单向奔赴到Streamable HTTP的双向融合
  • 【软考架构】第4章 信息安全的抗攻击技术
  • 群晖nas中 打开PHP连接MariaDB 功能扩展
  • CMakeLists.txt 学习笔记
  • SQL详细语法教程(六)存储+索引
  • Vue3+Vite MPA多页面应用开发完整指南 – 从零搭建到部署优化
  • 博客项目 Spring + Redis + Mysql
  • Linx--MySQL--安装笔记详细步骤!
  • B4265 [朝阳区小学组 2019] rectangle
  • SpringAI集成MCP
  • CentOS 7更换国内镜像源
  • SQL Server 基本语法
  • 传统方式部署(RuoYi-Cloud)微服务
  • 云原生:重塑软件世界的技术浪潮与编程语言选择
  • 使用websockets中的一些问题和解决方法
  • 华曦达港股IPO观察丨以创新研发为笔,构建AI Home智慧生活新蓝图
  • 8月更新!Windows 10 22H2 64位 五合一版【原版+优化版、版本号:19045.6159】
  • 大模型备案材料—《安全评估报告》撰写指南
  • Zookeeper 在 Kafka 中扮演了什么角色?
  • 8.18作业
  • Python实战--基于Django的企业资源管理系统
  • 嵌入式学习硬件I.MX6ULL(五)按键 中断 GIC OCP原则
  • seuratv4数据结构
  • 软考 系统架构设计师系列知识点之杂项集萃(129)
  • 【数模国奖冲刺】备赛过程中的常见问题
  • Jmeter对图片验证码的处理
  • vue3 + antd实现简单的图片点开可以缩小放大查看