当前位置: 首页 > 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.xdnf.cn/news/1324369.html

相关文章:

  • Fluss:颠覆Kafka的面向分析的实时流存储
  • GPT-5之后:当大模型更新不再是唯一焦点
  • 深度学习必然用到的概率知识
  • Vue 3中watch的返回值:解锁监听的隐藏技巧
  • 敏感数据加密平台设计实战:如何为你的系统打造安全“保险柜”
  • 遥感机器学习入门实战教程 | Sklearn 案例②:PCA + k-NN 分类与评估
  • Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
  • 具身智能2硬件架构(人形机器人)摘自Openloong社区
  • Next.js 中的 SEO:搜索引擎优化最佳实践
  • flutter项目适配鸿蒙
  • JMeter与大模型融合应用之构建AI智能体:评审性能测试脚本
  • 【Jenkins】03 - 自动构建和docker构建
  • MCP协议演进:从SSE到Streamable HTTP的技术革命
  • 宁波市第八届网络安全大赛初赛(REVERSE-Writeup)
  • FPGA-Vivado2017.4-建立AXI4用于单片机与FPGA之间数据互通
  • OpenTelemetry、Jaeger 与 Zipkin:分布式链路追踪方案对比与实践
  • vscode wsl解决需要用别的用户调试的问题
  • VSCode REST Client 使用总结
  • Linux下的软件编程——IPC机制
  • Linx--MySQL--安装笔记详细步骤!
  • k8sday10服务发现(1/2)
  • 数据泵实施VPS海外:跨国数据同步的完整解决方案
  • 45 C++ STL模板库14-容器6-容器适配器-优先队列(priority_queue)
  • 系统架构评估方法全景解析
  • 【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
  • LLM - MCP传输协议解读:从SSE的单向奔赴到Streamable HTTP的双向融合
  • mq存量消息如何处理
  • 【iOS】Block补充
  • RecSys:排序中的融分公式与视频播放建模
  • 数据结构(03)——线性表(顺序存储和链式存储)