0
点赞
收藏
分享

微信扫一扫

HAWQ技术解析(三) —— 基本架构


HAWQ是一个Hadoop原生的SQL查询引擎,它结合了MPP数据库的关键技术和Hadoop的可扩展性。HAWQ在原生的HDFS上读写数据,MPP架构使HAWQ表现出超越其它SQL on Hadoop解决方案的查询性能,Hadoop又为HAWQ提供了传统数据库所不具备的线性扩展能力。

一、HAWQ的架构

在一个典型的HAWQ部署中,每个slave节点上会安装有一个HAWQ物理段,一个HDFS的DataNode和一个NodeManager。而HAWQ、HDFS和YARN的主机则安装在(与slave)分离的节点上。下图提供了一个HAWQ典型部署的高级别架构视图。

HAWQ技术解析(三) —— 基本架构_资源管理器


HAWQ与Hadoop的资源管理框架YARN紧密结合,为查询提供资源管理。HAWQ在一个资源池中缓存YARN容器,然后利用HAWQ自身的细粒度资源管理,为用户或组在本地管理这些资源。当执行一个查询时,HAWQ根据查询成本、资源队列定义、数据局部化和当前系统中的资源使用情况,为查询分配一组虚拟段。之后查询被分发到相应的物理主机,可能是节点子集或整个集群。每个HAWQ节点上的资源实施器监控着查询对资源的实时使用情况,避免违规的资源使用。下图提供了构成HAWQ软件组件的另一个视图。

HAWQ技术解析(三) —— 基本架构_hdfs_02

1. HAWQ主节点

    HAWQ主节点是系统的入口点,有一个接受客户端连接,并处理SQL命令的数据库进程。HAWQ主节点解析查询,优化查询,向段分发查询,并协调查询执行。最终用户通过主节点与HAWQ交互。可以使用如psql的客户端程序,或者类似JDBC、ODBC的应用程序接口(APIs)连接到数据库。“全局系统目录”是一组系统表的集合,包含HAWQ系统自身的元数据,存储在主节点中。主节点本身不含任何用户数据,数据只存储在HDFS上。主节点对客户端连接请求进行鉴权,处理输入的SQL命令,在段间分发任务,协调每个段返回的结果,向客户端程序输出最终结果。

2. HAWQ段

在HAWQ中,段是并行数据处理单元。每个主机上只有一个物理段,每个段可以为一个查询片段启动多个查询执行器(Query Executors ,QEs)。这使得单一的物理段表现得像多个虚拟段,从而使HAWQ能够更好地利用所有可用资源。注意:在本文档中,当我们提到段本身时,指的就是物理段。
一个虚拟段就像是QE的一个容器。每个虚拟段含有为查询片段启动的一个QE。虚拟段的数量被用于确定一个查询的并行度(degree of parallelism,DOP)。段有别于主节点,原因是段:无状态、不存储数据库表元数据、不存储本地文件系统中的数据。主节点将SQL请求连同相关的元数据信息分发给段进行处理。元数据中包含所请求表的HDFS url地址,段使用该URL访问相应的数据

3. HAWQ互联

“互联”是HAWQ的网络层。当一个用户连接到数据库并发出了一个查询,每个处理查询的段上会创建多个进程。“互联”指的是段之间的进程间通信,以及通信所依赖的底层网络架构。互联使用标准的以太网交换结构。缺省情况下,互联使用UDP(User Datagram Protocol)在网络间传输消息。HAWQ软件在UDP的功能之上执行附加的包验证。这就意味着(HAWQ的网络传输)可靠性相当于TCP(Transmission Control Protocol),而在性能和可扩展性上却优于TCP。如果使用TCP互联,HAWQ有一个1000个段实例的扩展上限,而UDP作为当前互联使用的缺省协议,则没有这个限制。

4. HAWQ资源管理器

HAWQ资源管理器从YARN获取资源,并响应资源请求。资源被HAWQ资源管理器缓存,以支持低延时查询。HAWQ资源管理器也能够以独立模式运行。在这种部署中,HAWQ自己管理资源而不需要YARN。

5. HAWQ目录服务

HAWQ目录服务存储全部元数据,例如UDF/UDT信息,表信息,安全信息和数据文件位置信息等。

6. HAWQ容错服务

HAWQ容错服务(FTS)负责接收从segment发来的心跳信息,并负责检测段是否失效。

7. HAWQ分发器

HAWQ分发器将查询计划分发到选择的段的子集上,并协调查询的执行。分发器和资源管理器是HAWQ的主要组件,分发器负责查询的动态调度。资源管理器负责执行查询资源需求。

原文:http://hdb.docs.pivotal.io/211/hawq/overview/HAWQArchitecture.html

二、表的分布与存储

除系统表外,HAWQ将其它所有表数据存储到HDFS中。当用户创建了一个表,其元数据存储到master主机上的本地文件系统中,表的数据存储到HDFS中。为了简化表数据管理,一个表中的所有数据都保存在一个HDFS目录中。对于所有HAWQ表存储格式,AO(Append-Only)和Parquet,数据文件是可拆分的,因此HAWQ可以赋予多个虚拟段并发处理同一个数据文件,这提高了查询执行的并行度。

1. 表分布策略

HAWQ缺省的表分布策略是随机分布。相对于使用表的哈希分布策略,随机分布有一些好处。例如,当集群扩容后,HAWQ可以自动使用更多的资源,而不再需要重新分布数据。对于大表,重新分布数据的代价是很高的。当底层HDFS在执行rebalance操作,或者某些DataNode失效后,随机分布表的数据本地化会更好,而且集群规模越大,这种策略的优势越明显。另一方面,对于某些查询,哈希分布的表会比随机分布快。例如,在一些TPC-H查询中,哈希分布表的查询性能更好。你应该依据你的应用场景选择最合适的分布策略。

2. 数据本地化

数据是跨越HDFS的DataNode分布存储的。由于远程读取会引入网络I/O,HAWQ使用一个数据本地化算法提升本地数据读取比例。当HAWQ给虚拟段分配数据块时,它考虑三个方面的因素:本地读取比例、数据文件连续读、保持虚拟段间的数据平衡。

3. 外部数据访问

HAWQ可以使用Pivotal eXtension Framework(PXF)访问外部文件。PXF是HAWQ的扩展框架,它允许HAWQ象读写HAWQ表一样来访问外部数据源的数据。PXF中已经内建了多个连接器,用于访问HDFS文件,Hive表和HBase表。并且PXF还与HCatalog集成,直接查询Hive表。用户可以使用PXF API开发的Java插件,创建自己定制的PXF连接器,访问其它并行数据存储或处理引擎。
原文:http://hdb.docs.pivotal.io/211/hawq/overview/TableDistributionStorage.html

三、运行时弹性查询

HAWQ使用动态分配虚拟段为执行查询提供资源。HAWQ 1.x时,用于执行一个查询的段(计算资源容器)的个数是固定的,无论底层查询是一个需要很多资源的大查询,还是一个需要很少资源的小查询。这种架构虽然简单,但资源使用低效。为了解决这个问题,HAWQ现在使用基于虚拟段的运行时弹性查询特性。HAWQ会根据查询的成本,按需分配虚拟段。换言之,对于大查询,HAWQ分配很多虚拟段,而只给小查询分配少数虚拟段。

1. 存储

在HAWQ里,虚拟段的个数会依据查询的成本而有所不同。为了简化表管理,与一个表相关的所有数据都存储到一个HDFS目录下。对于所有HAWQ表存储格式,AO(Append-Only)和Parquet,数据文件是可拆分的,因此HAWQ可以赋予多个虚拟段并发处理同一个数据文件,这提高了查询执行的并行度。

2. 物理段与虚拟段

在HAWQ里,每个主机只安装一个物理段,但运行查询时可以启动多个虚拟段。HAWQ为查询按需分配多个分布于不同主机上的虚拟段。虚拟段是内存、CPU等资源的容器。查询就是在虚拟段中被查询执行器所执行。
注意:在本文档中,当我们提到段本身时,指的就是物理段。

3. 虚拟段分配策略

依据虚拟段分配策略分配不同数量的虚拟段。以下因素决定了一个查询所使用的虚拟段个数:查询运行时的可用资源、查询成本、表的分布策略,就是说,是随机分布表还是哈希分布表、查询是否引入了UDF或外部表、特定的服务器配置参数,比如针对哈希表查询的“default_hash_table_bucket_number”,以及“hawq_rm_nvseg_perquery_limit”等。
原文:http://hdb.docs.pivotal.io/211/hawq/overview/ElasticSegments.html

四、资源管理

HAWQ提供多种方法管理资源,包含多个用户配置选项,与YARN资源管理器的集成等。HAWQ使用下面的机制进行资源管理:

  • 全局资源管理。你可以将HAWQ与YARN资源管理器集成,在需要时请求或回收资源。如果不与YARN集成,HAWQ可以管理它自己的资源,并排他地使用集群资源。如果你将YARN集成到HAWQ,则HAWQ自动地从YARN获取资源,并通过内部定义的资源队列管理这些获得的资源。当资源不再使用时,被自动返回给YARN。
  • 用户定义资源队列等级。HAWQ管理员或者超级用户设计和定义资源队列,用于为查询组织和分发资源。
  • 查询运行时动态资源分配。HAWQ根据资源队列的定义动态分配资源。HAWQ会基于运行时(或排队中)的查询,以及当前资源队列的容量,自动分发资源。
  • 虚拟段和查询的资源限制。你可以配置HAWQ强制虚拟段和用于查询的资源队列对CPU和内存的使用限制。
    原文:http://hdb.docs.pivotal.io/211/hawq/overview/ResourceManagement.html

五、HDFS目录缓存

HDFS目录缓存是HAWQ 主节点用来确定HDFS上表数据分布信息的一种缓存服务。HDFS在做RPC处理时会比较慢,尤其是当并发请求数很高时。为了决定哪个段管理哪部分数据,HAWQ需要从HDFS的NameNode获取数据的位置信息。HDFS目录缓存就是用来缓存数据的位置信息,从而加快HDFS的RPC处理。
原文:http://hdb.docs.pivotal.io/211/hawq/overview/HDFSCatalogCache.html

六、管理工具

HAWQ的管理工具都被合并进一个hawq命令。该命令可以初始化、启动和停止每一个单独的段,并且支持集群的动态扩展。

原文:http://hdb.docs.pivotal.io/211/hawq/overview/ManagementTools.html

(hawq命令的简要联机帮助如下图所示。)

HAWQ技术解析(三) —— 基本架构_资源管理器_03

七、高可用、冗余和容错

HAWQ通过系统冗余保证其集群的高可用性。HAWQ的部署利用硬件平台的冗余,如用为主节点提供RAID,为段提供JBOD,为互联层提供网络冗余。在软件层面,HAWQ通过主节点镜像和双集群维护提供冗余。另外,HAWQ支持HDFS的NameNode高可用配置。为了保持集群的健康,HAWQ使用基于心跳和按需探查协议(on-demand probe protocols)的容错服务(Fault Tolerance Service,FTS)。它可以动态识别新加入的节点,也可以在节点变得不稳定时,将其从集群中删除。

1. 关于高可用

HAWQ使用多种机制保证高可用性,其中对于HAWQ最重要的机制如下:

  • 主节点镜像。万一主节点失效,集群还有一个备用主节点可用。
  • 双重集群。管理员可以创建一个备用集群,并通过双重ETL或者备份与恢复机制同步主集群的数据。
    除在HAWQ级别管理高可用外,你可以在HDFS中实现NameNode的高可用,从而为HAWQ提供高可用性。

2. 关于段容错

HAWQ中的段是无状态的,这保证了段能够快速恢复,并且有更好的可用性。当一个段失效时,该段被从资源池中删除,查询不会再被分发到该段。当失效段重新可用时,容错服务验证该节点有效后,将它添加回资源池。

3. 关于互联冗余

互联指的是段和段之间的进程间通信,以及通信所依赖的网络架构。可以通过在网络中部署双重千兆以太网交换机,并部署与HAWQ主机服务器(主节点和段)冗余的千兆连接。为了在HAWQ中使用多个网卡,需要进行网卡绑定。
原文:http://hdb.docs.pivotal.io/211/hawq/overview/RedundancyFailover.html


举报

相关推荐

YARN基本架构

[Kafka] Kafka基本架构

eMMC--基本架构

Docker 的基本架构

Yarn的基本架构

Spark简述及基本架构

0 条评论