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

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通过系统冗余保证其集群的高可用性。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

原文链接:https://blog.csdn.net/wzy0623/article/details/55517578)

HAWQ技术解析(三) —— 基本架构相关推荐

  1. 北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单

    北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单 2.1.2 出库订单 出库订单包括有订单信息.订单出库信息.订单货品三个标签页的信息编写. 订单信息界面截图: 2.1.2图(1) 订 ...

  2. HAWQ技术解析(十一) —— 数据管理

    一.基本操作 1. INSERT         在常用的增删改查数据库操作中,HAWQ仅支持INSERT和SELECT两种,不支持UPDATE和DELETE,这主要是因为HDFS是一个只能追加数据而 ...

  3. HAWQ技术解析(十七) —— 最佳实践

    一.HAWQ参数配置最佳实践 (原文地址: http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/bestpractic ...

  4. HAWQ技术解析(十六) —— 运维监控

    与任何IT系统一样,为了保证HAWQ集群的高可用和高性能,需要进行一系列监控与维护活动.本篇讨论HAWQ推荐的运维与监控活动. 一.推荐的监控与维护任务 表1至表5是HAWQ向系统管理员推荐定期执行的 ...

  5. HAWQ技术解析(一) —— HAWQ简介

    一.SQL on Hadoop         过去五年里,许多企业已慢慢开始接受Hadoop生态系统,将它用作其大数据分析堆栈的核心组件.尽管Hadoop生态系统的MapReduce组件是一个强大的 ...

  6. HAWQ技术解析(十) —— 过程语言

    HAWQ支持用户自定义函数(user-defined functions,UDF),还支持给HAWQ内部的函数起别名.编写UDF的语言可以是SQL.C.Java.Perl.Python.R和pgSQL ...

  7. HAWQ技术解析(四) —— 启动停止

    前面已经完成了HAWQ的安装部署,也了解了HAWQ的系统架构与主要组件,下面开始使用它.HAWQ作为Hadoop上的一个服务提供给用户,与其它所有服务一样,最基本的操作就是启动.停止.重启服务.要完成 ...

  8. HAWQ技术解析(五) —— 连接管理

    服务器启动后,还要经过一系列配置,才能被客户端程序所连接.本篇说明如何配置客户端身份认证,HAWQ的权限管理机制,HAWQ最常用的命令行客户端工具psql及与mysql命令行常用命令类比,最后还将列举 ...

  9. HAWQ技术解析(十八) —— 问题排查

    (原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/troubleshooting/Troubleshoo ...

最新文章

  1. java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站
  2. php代码清除空格注解,PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
  3. Java 并发总结——线程池
  4. php分页代码 页数太多,php分页函数示例代码分享
  5. Vue执行动画(transition)
  6. switch case 解决字符串选择的问题
  7. KingDZ 变菜鸟,每日一个C#小实例之---C#MessageBox小技巧
  8. 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)
  9. 10968134正文 52.puppet自动化运维工具
  10. 电路串联和并联图解_电路串联和并联的区别有哪些
  11. 网络没有运行wmi服务器,win7系统中没有wmi服务如何解决_win7没有wmi服务的解决方法...
  12. 计算机教室联想系统管理员密码,联想怎么清除bios超级管理员密码的方法
  13. Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)
  14. 田忌赛马 java,从田忌赛马看Java与.net
  15. mysql strict_MySQL模式 Strict Mode知识点详解
  16. No4.搭建基本的授权码模式请求token(一):实现授权服务端的授权码模式操作
  17. 爬虫学习:基本库的使用
  18. oracle sqlplus 退格,Oraclesqlplus中方向键、退格键的使用
  19. 美国空运专线 美国空运专线时效多久
  20. 关抢占 自旋锁_也说自旋锁

热门文章

  1. 物联卡中心:关于携号转网,你想知道的都在这了!
  2. 什么是云原生(cloud native)?
  3. sd卡和tf卡的一些常识
  4. Android连接手机真机调试。(小米为例,其他品牌类似)
  5. ES6 数组的扩展:扩展运算符
  6. nginx软重启nginx平滑重启
  7. android popupmenu icon,带有图标的PopupMenu
  8. 包装类(装箱与拆箱)
  9. 基于ARM嵌入式工控机主板的人机界面组态软件开发方案
  10. 用Delphi写一个UTF8编码格式的文本文件