Apache HAWQ 大规模并行 SQL 分析处理引擎

程序名称:Apache HAWQ

授权协议: Apache

操作系统: 跨平台

开发语言: Java

Apache HAWQ 介绍

HAWQ 是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用。和其他关系型数据库类似,接受SQL,返回结果集。

Apache HAWQ 具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能。主要如下:

  1. 对标准的完善支持:ANSI SQL标准,OLAP扩展,标准JDBC/ODBC支持,比其他Hadoop SQL引擎都要完善。

  2. 具有MPP(大规模并行处理系统)的性能,比其他Hadoop里面的SQL引擎快数倍。

  3. 具有非常成熟的并行优化器。优化器是并行SQL引擎的重要组成部分,对性能影响很多,尤其是对复杂查询。

  4. 支持ACID事务特性:这是很多现有基于Hadoop的SQL引擎做不到的,对保证数据一致性很重要。

  5. 动态数据流引擎:基于UDP的高速互联网络。

  6. 弹性执行引擎:可以根据查询大小来决定执行查询使用的节点及Segment个数。

  7. 支持多种分区方法及多级分区:比如List分区和Range分区。分区表对性能有很大帮助,比如你只想访问最近一个月的数据,查询只需要扫描最近一个月数据所在分区。

  8. 支持多种压缩方法:snappy,gzip,quicklz,RLE等。

  9. 多种UDF(用户自定义函数)语言支持:java, python, c/c++, perl, R等。

  10. 动态扩容:动态按需扩容,按照存储大小或者计算需求,秒级添加节点。

  11. 多级资源或负载管理:和外部资源管理器YARN集成;可以管理CPU,Memory资源等;支持多级资源队列;方便的DDL管理接口。

  12. 支持访问任何HDFS及其他系统的数据:各种HDFS格式(文本,SequenceFile,Avro,Parquet等等)以及其他外部系统(HBase等),并且用户自己可以开发插件来访问新的数据源。

  13. 原生的机器学习数据挖掘库MADLib支持:易于使用及高性能。

  14. 与Hadoop系统无缝集成:存储、资源、安装部署(Ambari)、数据格式、访问等。

  15. 完善的安全及权限管理:kerberos;数据库,表等各个级别的授权管理。

  16. 支持多种第三方工具:比如Tableau,SAS,较新的Apache Zeppelin等。

  17. 支持对HDFS和YARN的快速访问库:libhdfs3和libyarn(其他项目也可以使用)。

  18. 支持在本地、虚拟化环境或者在云端部署。

HAWQ 是原生 Hadoop SQL 引擎中“原生”的意思,“原生”主要体现在如下几个方面:

  1. 数据都存储在HDFS上,不需要使用connector模式。

  2. 高可扩展性:和其他Hadoop组件一样,高可扩展。并且具有高性能。

  3. 原生的代码存取:和其他Hadoop项目一样。HAWQ是Apache项目。用户可以自由的下载,使用和做贡献。区别与其他的伪开源软件。

  4. 透明性:用Apache的方式开发软件。所有功能的开发及讨论都是公开的。用户可以自由参与。

  5. 原生的管理:可以通过Ambari部署、资源可以从YARN分配,与其它Hadoop组件可以运行在同一个集群。

下图是一个典型的HAWQ集群的主要组件。其中有几个Master节点:包括HAWQ master节点,HDFS master节点NameNode,YARN
master节点ResourceManager。现在HAWQ元数据服务在HAWQ
master节点里面,将来的版本会成为单独的服务。其他节点为Slave节点。每个Slave节点上部署有HDFS DataNode,YARN
NodeManager以及一个HAWQ Segment。HAWQ Segment在执行查询的时候会启动多个QE (Query Executor,
查询执行器)。查询执行器运行在资源容器里面。

软件内部架构:

可以看到在HAWQ
master节点内部有如下几个重要组件:查询解析器(Parser/Analyzer),优化器,资源管理器,资源代理,HDFS元数据缓存,容错服务,查询派遣器,元数据服务。在Slave节点上安装有一个物理Segment,在查询执行时,针对一个查询,弹性执行引擎会启动多个虚拟Segment同时执行查询,节点间数据交换通过Interconnect(高速互联网络)进行。如果一个查询启动了1000个虚拟Segment,意思是这个查询被均匀的分成了1000份任务,这些任务会并行执行。所以说虚拟Segment数其实表明了查询的并行度。查询的并行度是由弹性执行引擎根据查询大小以及当前资源使用情况动态确定的。下面我逐个来解释这些组件的作用以及它们之间的关系:

  1. 查询解析器:负责解析查询,并检查语法及语义。最终生成查询树传递给优化器。

  2. 优化器:负责接受查询树,生成查询计划。针对一个查询,可能有数亿个可能的等价的查询计划,但执行性能差别很大。优化器的作用是找出优化的查询计划。

  3. 资源管理器:资源管理器通过资源代理向全局资源管理器(比如YARN)动态申请资源。并缓存资源。在不需要的时候返回资源。我们缓存资源的主要原因是减少HAWQ与全局资源管理器之间的交互代价。HAWQ支持毫秒级查询。如果每一个小的查询都去向资源管理器申请资源,这样的话,性能会受到影响。资源管理器同时需要保证查询不使用超过分配给该查询的资源,否则查询之间会相互影响,可能导致系统整体不可用。

  4. HDFS元数据缓存:用于HAWQ确定哪些Segment扫描表的哪些部分。HAWQ是把计算派遣到数据所在的地方。所以我们需要匹配计算和数据的局部性。这些需要HDFS块的位置信息。位置信息存储在HDFS NameNode上。每个查询都访问HDFS NameNode会造成NameNode的瓶颈。所以我们在HAWQ Master节点上建立了HDFS元数据缓存。

  5. 容错服务:负责检测哪些节点可用,哪些节点不可用。不可用的机器会被排除出资源池。

  6. 查询派遣器:优化器优化完查询以后,查询派遣器派遣计划到各个节点上执行,并协调查询执行的整个过程。查询派遣器是整个并行系统的粘合剂。

  7. 元数据服务:负责存储HAWQ的各种元数据,包括数据库和表信息,以及访问权限信息等。另外,元数据服务也是实现分布式事务的关键。

  8. 高速互联网络:负责在节点之间传输数据。软件实现,基于UDP。

查询的主要流程:

用户通过JDBC/ODBC提交查询之后,查询解析器得到查询树,然后优化器根据查询树生成查询计划,派遣器和资源管理器打交道得到资源,分解查询计划,然后派遣计划到Segment的执行器上面执行。最终结果会传回给用户。

并行查询计划示例:

这个查询包含一个连接,一个表达式和一个聚集。图中有两个查询计划。简单来看,并行查询计划和串行查询计划最不同的是多了一些Motion操作符。Motion负责在节点之间交换数据。底层是通过高速互联网络实现的。我们可以看到这里有三种Motion:

  1. Redistribution Motion: 负责按照hash键值重新分布数据

  2. Broadcast Motion: 负责广播数据

  3. Gather Motion: 负责搜集数据到一起。

左边的查询计划表示了如果表lineitem和orders都使用了连接键进行分布的情况。在这个例子中,lineitem按照l_orderkey进行hash分布,orders表按照o_orderkey进行分布。这样的话两个表做连接的时候是不需要进行重新分布的。右边的查询计划表示了一个需要重新分布数据的例子。该查询计划和左边的查询计划相比多了一个Motion节点。

更详细的介绍请看 http://www.36dsj.com/archives/36776

Apache HAWQ 官网

https://hawq.apache.org/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


RedHadoop 是一个持续优化的企业级Hadoop基础软件平台,让Hadoop大数据更简单! RedHadoop大数据工场企业版是RedHadoop公司第一款产品,简称BWE(RedHadoop BigData Works
来自 Mozilla 的 Heka 是一个用来收集和整理来自多个不同源的数据的工具,通过对数据进行收集和整理后发送结果报告到不同的目标用于进一步分析。
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC
Mincemeat-node 是使用Node.js实现的极简MapReduce框架,可以快速的部署投入工作,免去Hadoop繁琐的配置,享受随心大数据。
REEF 是微软开发的一个大数据框架。 REEF运行在YARN的上层。YARN是新一代Hadoop资源管理器,通过YARN,用户可以运行和管理同一个物理集群机上的多种作业,例如MapReduce批处理和图形处理作业。这样不仅可以巩固一个
Scribe旨在帮助Facebook处理服务器上的大量数据,正像Scribe网页所述“如经常访问Facebook,请使用Scribe。”具体而言,Scribe就是一台服务器,实时收集用网站日志信息。
HTools是一款专业的Hadoop管理工具,不管您是非专业IT人士,还是多年经验的技术人员,本工具都会为您提供优质的管理服务和轻松的操作过程,
hive让大数据飞了起来,不再需要专人写MR。平常我们都可以用基于thrift的任意语言来调用hive。
MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念”Map(映射)”和”Reduce(化简)”,和他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。
Netflix 开源了一个叫做Suro的工具,它能够在数据被发送到不同的数据平台(如Hadoop、Elasticsearch)之前,收集不同应用服务器上的事件数据,这项创新技术具备成为大数据主流实践的潜力
Apache Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口和 OLAP 接口,支持
Hadoop 是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop
Themis 是小米公司开发的,为 HBase 提供了跨行/跨表的事务处理,基于 Google 的 percolator.
腾讯分布式数据仓库项目,在Hadoop和hive的基础上开发的腾讯内部最大的离线数据处理平台。TDW支持Oracle功能兼容的SQL语法,支持PB级的存储和TB级的计算等。
Spring XD 是一个统一的,分布式,可扩展的系统用于数据摄取,实时分析,批量处理和数据导出。该项目的目标是简化大数据应用的开发。
HP Vertica 基于列存储,相比传统面向行存储的数据库具有巨大的优势。同时 Vertica 支持 MPP(massively parallel
S3mper 是通过一致的,二级索引对亚马逊 S3 索引做额外的一致性检查。 S3mper 利用面向方面编程和AspectJ 实现来引导Hadoop 文件系统实现(主要是实现
Crate Data 是一个开源的大规模的可伸缩的数据存储系统,无需任何系统管理需求。提供强大的搜索功能。用于存储各种表格数据、非结构化数据和二进制对象。并可通过 SQL
Presto是Facebook最新研发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。据称该引擎的性能是Hive 的 10 倍以上。
YARN是新一代Hadoop资源管理器,通过YARN,用户可以运行和管理同一个物理集群机上的多种作业,例如MapReduce批处理和图形处理作业。这样不仅可以巩固一个组织管理的系统数目,而且可以对相同的数据进行不同类型的数