Apache HAWQ 作为一款先进的SQL-On-Hadoop开源分布式数据库产品,其代码基础源自著名的分布式数据库Greenplum Database (GPDB)。在设计之初,高可扩展性(Scalability)即成为HAWQ的一个重要的设计目标。因此HAWQ在架构与实现上均与GPDB有着明显的不同。这些不同点反应了HAWQ对高可扩展性的追求。本文将介绍这些不同点与其背后的设计哲学。 HAWQ架构简介 HAWQ是一款基于massively parallel processing (MPP)架构的分布式数据库。HAWQ由一个master节点,一个可选的standby节点和多个计算节点(segment)组成。其中master节点负责接收用户的查询请求,生成查询计划。然后master节点会指挥多个计算节点执行查询计划,最后将查询结果返回给用户。 无状态的计算节点 从HAWQ的架构可以大概看出,作为计算节点,HAWQ的可扩展性与segment的设计实现密不可分。为了提高HAWQ的可扩展性,HAWQ的计算节点被设计成无状态的节点。GPDB的计算节点存储了大量的状态信息,其中包括用户的配置选项和事务的状态等等。维护多个节点间状态的一致性成为影响可扩展性的重要原因。HAWQ的所有状态信息统统保存在master节点,在执行查询计划的时候,状态信息随着查询计划一并分发到计算节点。无状态计算节点的设计使得计算节点不必要再费力的维护状态信息的一致性。而master的唯一性使得维护状态信息的复杂度不随计算节点的增加而增加。 元数据的存储与访问 基于无状态计算节点的设计理念,HAWQ的元数据集中存储在master节点。这成为HAWQ与GPDB的一个重要的设计区别。元数据集中存储的好处是便于管理与一致性的控制。再加上HAWQ的用户数据存储在分布式文件系统HDFS上,HAWQ因此不在需要为计算节点设计镜像(mirror)节点,

Read More