架构组件&查询处理流程 | 学习笔记

简介: 快速学习 架构组件&查询处理流程

开发者学堂课程【大数据Impala教程架构组件&查询处理流程学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/722/detail/12885


架构组件&查询处理流程


内容介绍:

一、Impala 架构

二、CLI

三、Impalad

四、Impala State Store

五、Catalogd

六、总体结构

七、Impala 查询处理过程

 

一、Impalad 架构

Impala 的架构以及查询处理的过程。从架构层面分析 Impala,非常的清晰,大致可以分为四个模块。

 

二、CLI

首先看一下最后一个模块叫做 CLI ,这是一个命令行的方式。

既然是一款提供用户写 SQL 查询数据的软件,必须给出一种方式去写 SQL,当下 Impala 有这几种方式,最传统的是 Shell 命令行,在这个方面可以执行相关的售后语句,传递给 Impala 服务器进行咨询,此外提供了跟整 Hue 合,在 Hue 上进行查询的能力,包括 JAVA API 方式进行访问,属于外围操作的客户端。

 

三、Impalad

重点看一下自身所携带的三个架构服务模块。第一个叫做 Impalad,通俗理解,可以把它叫做 Impala Server 服务器,它是一个集群的概念,可以部署在任何集群上,也可以部署在多个。

image.png

1.Impalad 来源

通常会把 Impala 服务器部署在跟 Datenode 在同一个节点上,在它的底层上,Impala 追求计算的高效率,尽量要求满足能够在本地计算。把 Datenode 放在 A 机器上,把Impala 安装在 B 机器上,这两台机器之间需要跨网络去读数据,通常把 Impala 服务与 Datenode 部署在同一个节点上,这台机器上的服务的进程叫做 Impalad

2.指责明细

Impalad 的职责明细,主要用于第一点接收用户的 SQL 请求。要去操作 Impala 服务到底连接到哪台机器上,比如说现有 abc 三台机器都部署在 Impala,这时候指定连接到哪台机器,那台机器的 Impalad 负责查询需求,返回结果。当我们没有用户去连接的时候,它就是一个普通的Impala 服务叫做 Impalad

3.Coordinator

一旦接受到请求负责后续的查询,这时候把这台接收为查询请求的称作为 Coordinator 协调者。例如,我们三个本来都是普通的 Impala 服务,当中如果必接受请求,就针对这次的请求,它负责给出后续的协调处理。接收请求,编译成为查询计划树,调用其他 Impala 进行数据的咨询,返回结果。负责本次具体查询的 Impalad 叫做 CoordinatorImpalad 通过我们的本地调用,把身后语句转换为计划树传给后端,后端读数据,进行并行的咨询查询,把结果返回给前端。这是 Impalad 的职责。

 

四、Impala State Store

1.概念

Impala 的第二个架构叫状态存储。状态概念是由于当在多个机器上都去部署 Impala 服务 Impalad 后,就产生一个问题,哪个是存活的,哪个是死亡的,Impala 服务健康状态如何,这时候如何知道,因此需要一个进程去管理他,这个进程叫做 Impala State Store 状态存储服务。

2.内容

主要去保存整个 Impala 集群中,每个 Impalad 的健康状况以及它位于的机器的位置信息。比如,整个机器有100台。在奇数台当中不属于 Impalad ,这些 Impalad 都要跟 State Store 进行新教,包括注册,汇报信息,是成功还是失败。在 State Store 当中,会有一个表对数据进行记录。每个 Impalad 服务的健康状况,与此同时,每一个 Impalad 自己本地也会缓存一份 State Store 中的信息。缓存的原因是接收到用户请求之后,需要协调其他部分一起进行数据计算。正因为不知道有哪些部分,所以都会去缓存一份状态信息,通过信息可以知道当下整个渠道当中。除了自身之外还有其他的 Impalad。有一个数据在那里,需要计算一下,再将结果返回,因此就会缓存一份状态信息。

3.恢复模式

这时候有一个现象需要注意一下,一旦 State Store 进程属于离线,这时候会有一个 recovery 恢复的模式,在恢复模式下已经缓存的可以继续的工作,但缓存之后进程已经结束了,数据不会接着更新。因此如果这时候突然某个部分结束了进程,拿到的是缓存之前的数据,数据就不会更新。所以导致一些执行机而分配的时候会出错,分配给 A 其实 A 已经结束了进程。所以进入恢复模式下,会不断进行尝试,等待 State Store 的启动。这是第二个模块,用来追踪整个集群当中,Impalad 的健康状况以及它的位置信息。


五、Catalogd

第三个模块叫做 Catalogd ,这个模块是 Impala 后续内容新加的,它相当于一个媒介用来维护 Impala 元数据与 Hive 的元数据。虽然 Impala 最终使用的是跟 Hive 的同一个元数据,但这时候需要做一个中间的协调者。就是这个一个进程叫做Catalogd,会把 Hive 当中的元数据拉取过来,放到 Impala 自己的元数据中。如果 Impala 中的元数据涉及到更新,也会把它同步到 Hive 当中。这样相当于做了一个网关,维护着 Impala 本身的元数据与 Hive 的元数据。但是反过来,比如在 Hive 中做了一个修改,它不能自己主动地拉取过来,需要进行强制的刷新或是按照命令指定的刷新,这是一个架构。

 

六、总体结构

1.交互

如果画一个图,数据架构大概可以理解为部署三台服务器。分别是 node-1node-2node-3。每个机器上首先都有一个存储数据的节点 dn。接下来部署 Impalad 服务,首先第一个 Impalad,通常与 DateNode 在同一个节点上而可以部署多个。在每个 DateNode 位置上可以部署一个叫 Impalad 的服务,可以部署多个。部署完之后,node-1上有一个,同样剩下的机器上都要部署同样的,它可以在本地进行数据处理交互。

2.进程

第二点,部署一个状态存储的进程,这个进程主要是维护进程中哪个死亡,哪个健康,比如,这里找一台 node-3机器,再增加一个进程,叫做 State Store,其他的 Impalad 服务启动之后,就要向它进行注册,叫做注册 Impalad 的状态信息并且维持心跳保持联系。这一个维持心跳的目的是知道是活还是死亡,比如心跳超时,说明这个节点有问题,而且反过来每一个 Impalad 当中,还会维护的一个状态信息的缓存。

3.网关

第三个模块叫做 Catalogd ,主要是一个元数据访问的网关。在画布上增加一台机器,这台机器叫做 node-4,这上面主要是有 Hive metastor,那么这时候作为 Impalad 服务,它需要一个进程,维护着跟 Hive 之间的关系。例如,简单画一个 Catalogd,它会通过自身跟 Hive 元数据进行交互,维护的网关。比如,有数据需要更新,把它拉过来做一个维护,最终来说使用的是同一个 Hive metastor 元数据。

4.客户端

需要新增一个 Impala client (shell hue jdbc)客户端。当下用的最多的客户端是 shell 命令行,但不只有 shell 客户端,通过 hue 整合和 jdbc 都可以。作为客户端,不管在哪个机器上,当连接到任何一个 Impala 机器上都可以进行访问。比如将其连接到 node-2 Impalad 之后,就可以写 Impala SQL。把 SQL 发送出去,这时候接收到的 Impalad 就是上文提到的谁接收 Impalad 请求,谁就称之为 Coordinator, 在这种情况下,第二台机器的 Impalad,它就有一个别名是负责本次查询的 Impalad ,称之为 Coordinator,它就会针对 Impalad SQL 做一个解析,编译成执行计划树。在执行计划树中让其他部分进行处理,比如,发送了 SQL 需要计算一个数据,数据在另外的机器上,就会需要帮助计算再返回结果。这样就完成了一个配合。这就是整个 Impalad 的架构,看起来非常简单,也是一个集群的状态。

 

七、Impala 查询处理过程

接下来有了这个架构之后,处理其它的查询流程就非常的简单,非常清晰。准确来说,每个 Impalad 服务分为两个部分,叫做 Java 前端与 c++ 处理的后端。对于 Java 这一端比较熟悉,对于 c++ 不用担心,也不用管理。怎样进行查询处理。

image.png

1.三种方式

首先进行 Impalad CLI ClientODBC/JDBC DriverHue Beeswax 这三种交互的方式,当写下 SQL 回车,SQL 语句就会提交给 Impalad 服务。

2.协调者

每个 Impalad 服务都与 DateNode 位于同一个节点上,但是连接的时候必须要指定一个 Impalad,不管指定谁。比如说指向第三个,负责接受 SQL 提交的 Impalad,称之为 Coordinator 协调者,协调帮助执行的 SQL

3.计划树

接收到 SQL 后,协调者调用 JNI 方法去处理 SQL,把它解析成一个执行计划树,编译好之后会把这个树,以 Thrift 格式返回给 C++后端,每个 Impalad 服务分为 Java 前端和 C++后端。真正进行数据处理的是 C++后端。这个执行计划树中,类似于树结构当中有不同的阶段,每个阶段可以并行执行,有的必须按照顺序执行。整个执行计划树,根据编译分配规则,有的数据在这里,有的数据在那里,把具体的执行逻辑交给不同的 Impalad 进行执行。

4.数据存储

根据执行计划,数据位于的路径。要提交一个 SQL 查询表,表的数据位于另一台机器的 DateNode 上,它知道数据在这里的原因是,数据存储信息 Impala 底层通过 libhdfs HDFS 进行交互。交互的时候就知道,要查询一个数据文件,会了解到这个文件被切成了几块,分别在第一台机器上还是第二台机器。Impalad 服务通过查询发现在机器上有一个数据块是需要计算的。这样叫做协调者,协调由哪个 Impalad 来具体的进行查询,查询之后把结果进行返回。

5.insert 语句

如果不是查询语句而是一个插入语句,这个数据最终要写到 HDFS 上。在底层还会调用 libhdfs ,把数据写到 HDFS 上。就完成了整个的查询,把最终汇总的结果返回给客户端,就得到了结果。当中每个 Impalad 必须要跟状态服务器 State Store 做一个注册和心跳的保持联系。因为不保持联系的话,就不知道哪个已经发生了故障,哪个已经死去。这就是整个查询处理过程,结合架构以及图示做了解即可。

相关文章
|
13天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
14天前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
37 0
|
4月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
4天前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
14 3
|
15天前
|
存储 安全 虚拟化
深入解析:Docker的架构与组件
【8月更文挑战第27天】
109 2
|
17天前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
40 2
|
29天前
|
存储 算法 前端开发
JVM架构与主要组件:了解Java程序的运行环境
JVM的架构设计非常精妙,它确保了Java程序的跨平台性和高效执行。通过了解JVM的各个组件,我们可以更好地理解Java程序的运行机制,这对于编写高效且稳定的Java应用程序至关重要。
34 3
|
2月前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
21天前
|
消息中间件 运维 NoSQL
基础架构组件选型及服务化
【8月更文挑战第22天】本文概述了分布式系统中常见的基础架构组件及其选型与服务化的重要性。
|
21天前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
27 0

热门文章

最新文章