请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

从概念角度理解Apache HAWQ架构设计和原理

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Apache HAWQ是面向企业用户的先进大规模分布式分析型数据库,完整支持SQL规范并提供极其优秀的大数据分析性能表现。自2018年8月HAWQ成功孵化成为Apache顶级开源项目后。Apache HAWQ吸引了越来越多开发者和企业的目光。本文由Apache HAWQ社区的commiter金毅博士撰写。旨在为为大家奉上“一个全面的原理性理解和找到易上手的操作样例,进一步找到对产品的直接体会。”
· 本文目标读者无论是管理、维护Apache HAWQ集群、基于Apache HAWQ进行应用程序开发,或者参与和贡献Apache HAWQ项目的发展。绝大多数人首先面临的问题都是如何对Apache HAWQ有一个全面的原理性理解和找到易上手的操作样例进一步找到对产品直接的体会。因此,本系列文章将以原理为重点结合操作介绍Apache HAWQ的实现和使用建议。本文则侧重从概念角度介绍和解释Apache HAWQ的架构设计和原理,阐述Apache HAWQ的功能和性能优势。
·Apache HAWQ 优势Apache HAWQ拥有业界领先的系统并行架构,能够灵活支持多种数据存储实现接入,并支持快速数据和计算资源水平弹性扩展。当前Apache HAWQ使用Hadoop HDFS作为默认存储插件,并支持与Hadoop YARN的资源管理框架集成,这使得Apache HAWQ自然方便的融入到Hadoop生态系统中。当前在国内外,快速演进中的Apache HAWQ和Oushu Database 已在金融、电信、制造、医疗、互联网等行业得到广泛部署和生产应用,已经十分成熟。· Apache HAWQ 架构
从概念角度理解Apache HAWQ架构设计和原理-1.jpg Apache HAWQ 采用主从(Master-Segment)的改进MPP架构。一个典型的Apache HAWQ集群是分布式部署在多个服务器节点上,如多个物理机或多个虚拟机。在HAWQ Master端,Apache HAWQ提供集中的元数据管理并接受所有客户端连接的请求,当一个客户端的数据计算请求以SQL形式发送到Master后,被优化的分布式执行计划被生成并派发到多个Segment服务器运行,计算由多个执行器进程(QE)实现并行计算。存储由Hadoop HDFS提供服务,绝大多数情况下Segment服务器将使用本地HDFS DataNode服务实现数据存取。集群的计算资源由Master端的资源管理器统一调度,并以资源容器的形式在Segment端体现。
Apache HAWQ能够提供业界领先的性能依赖于:
o 功能完备且高性能的执行引擎;
o 成熟的基于成本的并针对分布式计算优化的执行计划优化;
o 计算与数据分离,针对MPP计算特征,计算资源和IO资源优化的弹性资源分配。
Apache HAWQ天然适应云环境,因为 HAWQ Segment节点是无状态和动态识别利用的,这使得Apache HAWQ支持运行期动态加减节点,并使用户能够方便地按需弹性扩容等;因此Apache HAWQ Segment节点也天然支持容错的功能,在有Segment节点失效情况下不影响集群的正常运行。在Master端主节点数据和服务通过主从互备的方式实现高可用。· Apache HAWQ SQL执行流程
从概念角度理解Apache HAWQ架构设计和原理-2.jpg 与任何关系型数据库相同,用户使用客户端与Apache HAWQ 的Master节点建立连接并提交SQL语句实现数据操作;Master端在接收到客户连接后会启动专门进程(QD)负责服务的所有逻辑,在该服务进程得到SQL命令后(如上图的query)通过三个主要模块完成Master阶段功能:
编译器(Parser) 负责解析SQL字符串转换成语法树数据结构变成内部的SQL命令语义表达;优化器(Planner) 基于SQL语法树,目标表统计信息和资源状况生成优化的并行查询计划;分发器(Dispatcher) 将定义好的并行查询计划分发到Segment端(往往是多个);资源管理服务(Resource Manager) 则辅助分发器提供资源分配服务。
在Segment端,执行计划被执行器进程(QE,往往是多个)并行执行并将最后结果反馈给Master端,结果进一步会被发送给客户端供用户使用。对于分析型负载,大量的数据处理和传输负载是发生在Segment节点内核节点间的,因此Master端的计算负载往往来自于DDL操作以及不多的最后数据结果的传递。· Apache HAWQ 原生优化器查询计划是由数据库根据SQL命令和目标表特点产生的由数据库自己使用的计算实现方案,数据库执行器将机械性的根据查询计划执行数据计算任务,例如,查询计划可以指示执行器用全表扫描的方式对某个表数据进行扫描,例如查询计划可以指定两个表的关联算法为Hash关联等。Apache HAWQ 配备成熟的优化器,采用基于成本的计划生成实现。基于关系型数据库方法体系的几十年发展,这个成熟的优化器确保Apache HAWQ在查询计划的生成上得到最终性能极佳的执行方法。
同时,针对MPP架构计算特点,二阶段聚集等只有分布式并行计算环境下才使用的查询计划也被扩展在优化器中,这使得Apache HAWQ具备了针对分布式计算优化的能力。
· Apache HAWQ并行执行计划


从概念角度理解Apache HAWQ架构设计和原理-3.jpg 一个执行计划是数据库优化器生成的一个树形数据结构,执行器将自底向上按照执行计划中各个运算符定义去忠实运行得到的计划。一个完整的执行计划在Apache HAWQ中被分割成分片(Slice),每个分片由不同的进程并行运行,这实现了一个SQL命令执行计划的并行运行。
如上图,一个查询计划被分割成三个分片(Slice),而每个Slice的边界节点为用于数据收发的Motion节点,而从每个分片中看都是一个完整数据结构中的子树。执行器基于分片的定义从最下方的Motion节点接受数据或Scan节点扫描表,再最后将计算结果根据Motion定义发送到其它负责上层分片进程。通常最后一个分片是运行在Master端的服务进程(QD)。该设计使得Apache HAWQ能全自动的对任意合法的执行计划实现并行的计算。· Apache HAWQ的资源管理Apache HAWQ的资源管理和容错服务是紧密的整体,或者说Apache HAWQ的资源管理服务是通过容错服务动态识别和构建计算集群的。基于架构设计的内容,元数据是在Master端集中存储的,Segment端仅依据查询计划运行是无状态节点。
Apache HAWQ的资源管理服务则根据每个节点的状态汇报作为心跳动态识别可用的Segment节点,因此本质上Apache HAWQ集群的启动与停止和运行中Apache HAWQ集群对Segment节点失效和扩展是一个统一的执行逻辑,用户也可以对一个运行中集群进行动态的实时扩展。Apache HAWQ的资源管理服务首先以全局资源容器的概念对一个Segment可用总资源量进行定义,然后在确认了各个Segement节点可用资源的基础上对待执行SQL命令分配具体的资源。而面向一个完整查询计划执行的可消费资源量以虚拟Segment(virtual segment)为单位进行分配。
例如:假设一个查询计划如上图有3个分片,其中一个分片在Master端运行,则在Segment段运行一个完整查询计划需要启动2个执行器进程负责两个分片,而这两个执行器进程可消费资源总量为一个虚拟Segment的总量,如一个虚拟segement的资源量可定义为(1024MBmem,0.25core),那么一个计划查询得到可用资源就是1024MB内存和0.25core。而一个查询计划的执行并行度是弹性的,即如果在一个10个Segment节点的集群中分配了40个虚拟Segment资源执行上述计划,则从这个集群看该SQL消费了40GB内存,通常每个节点分配4个虚拟Segment共消费4GB内存,整个集群的Segment节点中共有80个执行器进程并行完成SQL命令的计算。用户可以根据需要配置SQL命令执行使用的虚拟Segment数,也可以(绝大多数情况下)让Apache HAWQ自行决定分配的虚拟Segment数。Apache HAWQ 资源管理服务能够根据SQL查询资源需求和用户配置的规则以及动态的并发负载自动优化资源的使用。
总结,一个SQL命令的查询计划本身是优化的方案,该查询计划是自然并行化的,通过资源分配可以弹性决定一个SQL命令的执行并行度,通过两个维度的并行达到优化的并行计算的高性能效果。基于该设计,Apache HAWQ相较于传统MPP数据库具有按需弹性执行的能力,在保证性能的情况下确保资源有效分配使用。从层次上,Apache HAWQ支持三层资源管理,全局资源管理基于全局资源容器进行定义,并可支持Apache YARN的集成;第二层的内部资源管理是基于虚拟Segment的查询和用户级资源管理;第三层是针对查询计划每个操作符的分配。· 小结 Apache HAWQ 具备新的MPP架构,其中融合了传统数据库积累下来的深厚技术资产,也加入了最新的架构设计理念和来自于客户的实际使用需求,当前Apache HAWQ也正面向未来技术发展趋势和用户需求进行快速演进。而其中各个模块的实现原理和具体操作样式将在后续的章节内容中详细讨论,希望阅读本文有助于读者对Apache HAWQ的概念和概要架构一个比较清晰的认识。最后欢迎大家关注使用Apache HAWQ并参与Apache HAWQ的成长。
本文首发自微信公众号“偶数科技”第一时间了解更多信息欢迎关注哦~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 7 帖子
广告招商