本主题介绍了HAWQ体系结构及其主要组件。
在典型的HAWQ部署中,每个slave都有一个物理HAWQ段、一个HDFS DataNode和一个NodeManager。HAWQ、HDFS和YARN的master部署在独立的节点上。
下图提供了典型的HAWQ部署的高级体系结构视图。
HAWQ集成了Hadoop资源管理框架YARN,用于查询资源管理。HAWQ将YARN的容器缓存到资源池中,然后利用HAWQ自身的对用户和组提供的更细粒度的资源管理,在本地管理这些资源。执行一个查询时,HAWQ根据查询成本、资源队列定义、数据位置和系统中当前的资源使用情况来分配一组虚拟段。然后将查询发送到相应的物理主机,这些主机可以是部分节点或整个集群。每个节点上的HAWQ资源执行者监视和控制查询使用的实时资源,以避免违反资源使用规则。
下图提供了构成HAWQ的软件组件的另一个视图。
HAWQ Master
HAWQ master是系统的入口点。数据库进程接收客户端连接并处理发出的SQL命令。HAWQ主程序解析查询、优化查询、将查询分派到段并协调查询执行。
终端用户通过master与HAWQ进行交互,可以使用诸如psql之类的客户机程序或诸如JDBC或ODBC之类的应用程序编程接口(api)连接到数据库。
master是global system catalog所在的位置。global system catalog是一组包含关于HAWQ系统本身的元数据的系统表集合。master不包含任何用户数据;数据只驻留在HDFS上。master验证客户端连接,处理传入的SQL命令,在段之间分配工作负载,协调每个段返回的结果,并将最终结果呈现给客户端程序。
HAWQ Segment
在HAWQ中,段是同时处理数据的单元。
每个主机上只有一个物理Segment。每个Segment可以为每个查询片启动多个查询执行器(QEs)。这使得一个Segment像多个虚拟Segment,从而使HAWQ能够更好地利用所有可用资源。
注意:在本文档中,当我们提到Segment指的是物理Segment。
虚拟Segment的行为类似于QEs的容器。每个虚拟Segment对于查询的每个片都有一个QE。使用的虚拟Segment的数量决定了查询的并行度(DOP)。
一个Segment不同于master,因为它:
- 是无状态的。
- 不存储每个数据库和表的元数据。
- 不存储本地文件系统上的数据。
主服务器将SQL请求与要处理的相关元数据信息一起分派给各个Segment。元数据包含所需表的HDFS url。Segment使用这个URL访问相应的数据。
HAWQ Interconnect
Interconnect是HAWQ的网络层。当用户连接到数据库并发出查询时,将在每个segment上创建处理查询的进程。Interconnect是指各部分之间的进程间通信,以及这种通信所依赖的网络基础设施。Interconnect采用标准的以太网交换架构。
默认情况下,Interconnect使用UDP(用户数据报协议)通过网络发送消息。除了UDP提供的外,HAWQ软件执行额外的包验证。这意味着可靠性相当于传输控制协议(TCP),性能和可伸缩性都超过TCP。如果 interconnect使用TCP, HAWQ的可伸缩性限制为1000segment实例。如果interconnect是默认协议UDP,则此限制不适用。
HAWQ Catalog Service
HAWQ资源管理器从YARN获取资源并响应资源请求。HAWQ资源管理器缓冲了资源,以支持低延迟查询。HAWQ资源管理器也可以在独立模式下运行。在这些部署中,HAWQ无需YARN就可以管理资源。
HAWQ Fault Tolerance Service
HAWQ容错服务(FTS)负责检测Segment故障并接收Segment的心跳。
HAWQ Dispatcher
HAWQ dispatcher将查询计划分派到选定Segmen,并协调查询的执行。dispatcher和HAWQ资源管理器是负责查询动态调度的主要组件,以及执行查询所需的资源。