HAWQ

article/2025/9/18 20:28:38

  为了跟上所谓“大数据”技术的脚步,从两年前开始着手实践各种SQL-on-Hadoop技术,从最初的Hive,到SparkSQL,再到Impala,进行了一系列ETL、CDC、多维数据仓库、OLAP的实验。作为一名从业20年以上的DBA,从数据库的角度看,我的总体感觉是这些技术与传统的DBMS相比,功能不完善,性能差距很大,甚至很难找到一个可行的、相对完备的Hadoop数据仓库解决方案。这使我在实际应用中使用这些产品的时候总是感到顾此失彼、捉襟见肘。也可能是我做数据库的时间太长了,只会用锤子,所以拿什么都跟钉子比。
        然而,在去年12月举办的BDTC大会上听到常雷博士介绍HAWQ项目时,立即引起了我的兴趣。从常博士的演讲中得知,HAWQ支持事务、性能相对于其它SQL-on-Hadoop产品高很多。更为关键的是HAWQ与SQL的兼容性非常好,甚至支持存储过程,这是我以往所接触过的产品中从未有过的。对于传统数据库的开发人员或DBA,使用HAWQ转向大数据平台的成本应该是很低的。于是当时就决定今年要系统研究一下HAWQ,也许它正是我所需要的。
 

一、常用SQL-on-Hadoop产品的不足

 

1. Hive

        Hive是最老牌的一款Hadoop数据仓库产品,更够部署在所有Hadoop发行版本之上。它在MapReduce计算框架上封装一个SQL语义层,极大简化了MR程序的开发。直到现在,Hive以其稳定性依然赢得大量用户。
        但是Hive的缺点也很明显——速度太慢。随着技术的不断进步,Hive的执行引擎也从最初的MapReduce一种,发展出Hive on Spark、Hive on Tez等。尤其是运行在Tez框架上的Hive,其性能有了长足改进。即便如此,Hive的速度还是比较适合后台批处理应用场景,而不适合交互式即席查询和联机分析。

 

2. SparkSQL

        SparkSQL是Hadoop中另一个著名的SQL引擎,正如名字所表示的,它以Spark作为底层计算框架,实际上是一个Scala程序语言的子集。Spark基本的数据结构是RDD,一个分布于集群节点的只读数据集合。传统的MapReduce框架强制在分布式编程中使用一种特定的线性数据流处理方式。MapReduce程序从磁盘读取输入数据,把数据分解成键/值对,经过混洗、排序、归并等数据处理后产生输出,并将最终结果保存在磁盘。Map阶段和Reduce阶段的结果均要写磁盘,这大大降低了系统性能。也是由于这个原因,MapReduce大都被用于执行批处理任务。
        为了解决MapReduce的性能问题,Spark使用RDD作为分布式程序的工作集合,它提供一种分布式共享内存的受限形式。在分布式共享内存系统中,应用可以向全局地址空间的任意位置进行读写操作,而RDD是只读的,对其只能进行创建、转化和求值等操作。这种内存操作大大提高了计算速度。
        开发Spark的初衷是用于机器学习系统的培训算法,而不是SQL查询。Spark宣称其应用的延迟可以比MapReduce降低几个数量级,但是我们的实际使用中,在20TB的数据集合上做SQL查询也要10分钟左右出结果,这个速度纵然是比Hive快了3倍,但显然不能支撑交互查询和OLAP应用。Spark还有一个问题是需要占用大量内存,当内存不足时,容易出现OOM错误。

 

3. Impala

        Impala是一个运行在Hadoop之上的大规模并行处理(MPP)查询引擎,提供对Hadoop集群数据的高性能、低延迟的SQL查询,使用HDFS作为底层存储。对查询的快速响应使交互式查询和对分析查询的调优成为可能,而这些在针对处理长时间批处理作业的SQL-on-Hadoop传统技术上是难以完成的。
        Impala的最大亮点在于它的执行速度。官方宣称大多数情况下它能在几秒或几分钟内返回查询结果,而相同的Hive查询通常需要几十分钟甚至几小时完成,因此Impala适合对Hadoop文件系统上的数据进行分析式查询。Impala缺省使用Parquet文件格式,这种列式存储对于典型数据仓库场景下的大查询是较为高效的。
        Impala的问题主要体现在功能上的欠缺。如不支持update、delete操作,不支持Date数据类型,不支持XML和JSON相关函数,不支持covar_pop、covar_samp、corr、percentile、 percentile_approx、histogram_numeric、collect_set等聚合函数,不支持rollup、cube、grouping set等操作,不支持数据抽样(Sampling),不支持ORC文件格式等等。其中分组聚合、取中位数等是数据分析中的常用操作,当前的Impala存在如此多的局限,使它在易用性上大打折扣,在实际使用时要格外注意。

 

二、HAWQ的可行性

        刚才介绍了几种SQL-on-Hadoop产品的主要问题,那么重点来了,HAWQ是否有能力取而代之呢?下面从功能与性能两方面,简单分析一下使用HAWQ的主要特点。具有了这些特性,使用HAWQ在Hadoop上开发分析型数据仓库应用是完全可行的。

 

1. 功能

(1)完全兼容SQL标准
        HAWQ从代码级别上可以说是数据存储在HDFS上的PostgreSQL数据库,100%符合ANSI SQL规范并且支持SQL 92、99、2003。它支持内连接、外连接、全连接、笛卡尔连接、相关子查询等所有表连接方式,支持并集、交集、差集等集合操作,并支持递归查询。作为一个数据库系统,提供这些功能很好理解。

(2)丰富的函数
        除了包含诸多字符串、数字、日期时间、类型转换等常规标量函数以外,HAWQ还包含丰富的窗口函数和高级聚合函数,这些函数经常被用于分析型数据查询。窗口函数包括cume_dist()、dense_rank()、first_value(expr)、lag(expr [,offset] [,default])、last_valueexpr、lead(expr [,offset] [,default])、ntile(expr)、percent_rank()、rank()、row_number()等。高级聚合函数包括MEDIAN (expr)、PERCENTILE_CONT (expr) WITHIN GROUP (ORDER BY expr [DESC/ASC])、PERCENTILE_DISC (expr) WITHIN GROUP (ORDER BY expr [DESC/ASC])、sum(array[])、pivot_sum (label[], label, expr)等。具体的函数说明参见Using Functions and Operators。

(3)TPC-DS合规性
        TPC-DS针对具有各种操作要求和复杂性的查询定义了99个模板,例如点对点、报告、迭代、OLAP、数据挖掘等。成熟的基于Hadoop的SQL系统需要支持和正确执行多数此类查询,以解决各种不同分析工作场景和使用案例中的问题。图1所示的基准测试是通过TPC-DS中的99个模板生成的111个查询来执行的。图中显示了4种基于SQL-on-Hadoop常见系统的合规等级,绿色和蓝色分别表示:每个系统可以优化的查询个数;可以完成执行并返回查询结果的查询个数。从图中可以看到,HAWQ完成了所有查询,表现远优于其它系统。HAWQ虽然没有提供update、delete等DML语句,但通过其强大的数据查询功能,可以轻松实现多维数据仓库中渐变维(SCD)的处理需求。

图1


(4)分区表
        与传统DBMS系统类似,HAWQ也支持多种分区方法及多级分区,如List分区和Range分区。分区表对查询性能和数据可维护性都有很大帮助。

(5)过程化编程
        HAWQ支持内建的SQL、C、Java、Perl、pgSQL、Python、R等多种语言的过程化编程。参见Using Languages and Extensions in HAWQ。

(6)原生Hadoop文件格式支持
        HAWQ支持HDFS上的AVRO、Parquet、平面文本等多种文件格式,支持snappy、gzip、quicklz、RLE等多种数据压缩方法。与Hive不同,HAWQ实现了schema-on-write(写时模式)数据验证处理,不符合表定义或存储格式的数据是不允许进入到表中的,这点与DBMS系统保持一致。

(7)外部数据整合
        HAWQ通过名为Pivotal eXtension Framework(PXF)的模块提供访问HDFS上的Json文件、Hive、HBase等外部数据的能力。而且PXF还允许用户自定义:PXF提供框架API以便用户为其自有数据堆栈开发新的连接器,增强了数据引擎的松耦合程度。
        除了用于访问HDFS文件的PXF协议,HAWQ还提供了gpfdist文件服务器,它利用HAWQ系统并行读写本地文件系统中的文件。

 

2. 性能

(1)基于成本的SQL查询优化器
        HAWQ采用基于成本的SQL查询优化器,该查询优化器以针对大数据模块化查询优化器架构的研究成果为基础而设计。
        HAWQ能够制定执行计划,可优化利用Hadoop 集群的资源,还可以针对特定环境,如软件版本、硬件类型、CPU、IOPS指标等信息配置优化器。
        HAWQ已经验证,能够快速为涉及超过50个关联表的高性能查询找到理想的查询计划。因此可以将HAWQ用于大量数据分析的传统企业数据仓库工作负载要求。

(2)Dynamic pipelining
        SQL-on-Hadoop的主要设计目标是在Hadoop上执行SQL连接时最大程度地降低数据传输的开销。HAWQ采用Dynamic pipelining来解决这一关键要求,使基于HDFS的数据适用于交互式查询。Dynamic pipelining是一种并行数据流框架,结合了以下独特的技术:

  • 适应性高速UDP互联技术。
  • 操作运行时执行环境。这是所有SQL查询的基础,并针对大数据工作负载进行了调优。
  • 运行时资源管理确保查询的完整性。
  • 无缝数据分配机制,将经常用于特定查询的部分数据集集中起来。

        大数据模块化查询优化器架构中突出的性能分析显示,对于基于Hadoop的分析与数据仓库工作负载,HAWQ要比现有Hadoop查询引擎快一或两个数量级。这些性能改进主要归功于Dynamic pipelining和HAWQ内基于成本的查询优化器的强大功能。

(3)与Impala的性能比较
        图2是HAWQ提供的TPC-DS性能比较图,可以看到HAWQ平均比Impala快4.55倍。

图2


(4)与Hive的性能比较
        图3是我在自己的实验环境中所做的,HAWQ与Hive查询性能对比图。对于不同查询,HAWQ比Hive快4-50倍。测试具体的软硬件环境、数据模型、数据量、查询语句等参见HAWQ与Hive查询性能对比测试。

图3

 

三、适合DBA的解决方案

        当初HAWQ最吸引我的地方是它支持SQL过程化编程。这是通过用户自定义函数(user-defined functions,UDF)实现的。编写UDF的语言可以是SQL、C、Java、Perl、Python、R和pgSQL。数据库开发人员常用的自然是SQL和pgSQL,PL/pgSQL函数可以为SQL语言增加控制结构,执行复杂计算任务,并继承所有PostgreSQL的数据类型(包括用户自定义类型)、函数和操作符。
        HAWQ是我所使用过的SQL-on-Hadoop解决方案中唯一支持SQL过程化编程的,Hive、SparkSQL、Impala都没有此功能。对于习惯了编写存储过程的DBA来说,这无疑大大提高了HAWQ的易用性。HAWQ的UDF提供以下特性:

  • 给HAWQ内部函数起别名。
  • 返回结果集的表函数。
  • 参数个数可变的函数。
  • 多态数据类型。

        HAWQ过程化编程实例参见用HAWQ轻松取代传统数据仓库(十) —— 过程语言。
 

四、HAWQ系统架构

        图4是给出了一个典型的HAWQ集群的主要组件。图5是HAWQ内部架构图。关于HAWQ的系统架构说明,参见解密Apache HAWQ ——功能强大的SQL-on-Hadoop引擎。

图4

 


http://chatgpt.dhexx.cn/article/FxH3BfTI.shtml

相关文章

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

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

HAWQ技术解析(十三) —— 资源管理

一、HAWQ如何管理资源 HAWQ使用多种机制管理CPU、内存、I/O、文件句柄等系统资源,包括全局资源管理、资源队列、强制资源使用限额等。 1. 全局资源管理 Hadoop通常使用YARN全局管理资源。YARN是一个通用的资源管理框架,为MapReduce作业或其…

HAWQ个人学习笔记(一)——HAWQ介绍

一、什么是HAWQ? HAWQ是Hadoop原生SQL查询引擎,针对分析性的应用。它具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能,结合了MMP数据库的关键技术优势和Hadoop的可扩展性和便利性。读写依赖于HDFS。 注:Hadoop…

全面讲解光纤、光模块、光纤交换机、光模块组网设计与案例

光纤组网已是当今建筑智能化弱电行业里一种常见的组网方式,组建远距离无线、监控网络时,往往需要使用光纤进行连接通信,使用光纤收发器是经济适用型做法,尤其是在室外的使用。其实光纤收发器不仅可以成对使用,还可以配…

400G光模块的相关知识

现在的高速光模块市场慢慢从100G向400G转移,未来400G必定是主流的高速光模块,目前这个阶段占领主流的还是100G,之前100G的相关知识已经讲述过了,400G与100G的传输速率由各种因素导致,我们讲讲400G与100G的信号传输。 4…

QSFP28-100G-LR4光模块有什么特点及优势?

100G以太网的迅速发展给100G光模块带来了巨大的市场需求,在众多100G光模块中,QSFP28光模块以其较小的尺寸和低功耗的特点成为最受欢迎的光模块。下面易天光通信(ETU-LINK)将从定义,工作原理,应用场景和常见…

DWDM光模块和CWDM光模块的区别

DWDM光模块和CWDM光模块的区别 近年来波分复用(WDM)技术受到网络用户的热烈欢迎,这是一种在单根光纤上复用不同波长激光的多个光载波信号的技术。下文将由亿创飞宇光通信重点介绍CWDM SFP光模块和DWDM SFP光模块。 DWDM光模块是什么?DWDM光模块有哪些主要优势? DWDM光模…

SC接口光模块相关知识

什么是SC接口光模块? SC接口光模块即接口类型为SC的光模块,必须搭配SC接口的跳线才能正常使用。SC光模块的接口的紧固方式是采用插拔销闩式,不须旋转,使用很方便。 SC光模块的分类 SC光模块相比LC光模块和MPO光模块…

全面解析光模块的应用场景

光模块主要应用于数据通信领域,它的功能是实现光电信号的相互转化。因为大数据、区块链、云计算、物联网、人工智能、5G的兴起,使得数据流量迅猛增长,数据中心以及移动通信的光互连成为了光通信行业的研究热点。接下来,易天光通信…

单波100G光模块与4路100G光模块相比,优势有哪些?

目前市场上大多数的100G光模块都是采用4路25Gb/s并行或者波分复用进行传输的,比如100G SR4、100G PSM4、100G LR4、100G CWDM4光模块等,为了降低成本以及更好的传输效率,业界提出了100G single-lambda规范,这个规范是指使用PAM4光…

光模块-寿命分析

光模块结构分类基本指标光模块的使用寿命光模块的三种失效率预计方法基本概念失效率预计 可靠性分析可靠性试验加速寿命试验方法阿伦尼兹(Arrhenius)模型逆幂律模型单应力的艾林(Eyring)模型 光模块加速寿命试验分析方法研究 光模块 光模块是进行光电和电光转换的光电子器件。…

5G通信光模块是什么?5G通信光模块的发展方向如何?

随着移动通信行业的迅猛发展,目前5G已经成为全球关注的超级热门话题,与2G、3G、4G相比,未来光纤通信行业5G地位不容小觑,在5G网络时代,不管什么样的5G承载方案都离不开5G通信光模块,那么5G通信光模块是什么…

100G多模光模块介绍及应用

随着光通信市场对数据传输速率的要求越来越高,更高速率的光模块也随之诞生。与10G、40G的波分传输系统相比,100G光传输实现了偏振复用相位调制技术、数字相干接收技术第三代超强纠错编码技术等一系列重大改革,满足了用户与时俱进的需求。本期…

linux 光功率 模块_【光电通信】10G 光模块消光比补偿方法

今日光电 有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。欢迎来到今日光电! ----与智者为伍 为创新赋能---- 0. 引言 随着光纤到户、4G 业务的高速发展,光通信行业对高速光模块的需求也越来越大,这也对光模块厂商产能提出了新的挑…

精品文章!精讲光模块的方方面面,收藏!

光纤: 光纤作为光通信的传播媒介,分为多模光纤和单模光纤。 多模光纤(橘红色)的纤芯直径为 50um~62.5um,包层外直径 125um,适用于短距离传输( 2KM-5KM);单模光纤(黄色&…

XFP与SFP+光模块的区别是什么?能相互连接吗?

在光纤网络中,10G光模块凭借着较低的成本和功耗被广泛应用于学校、公司等应用环境中。XFP和SFP是10G光模块常见的两种封装类型,下面易天光通信(ETU-LINK)就为大家介绍下XFP与SFP光模块的区别是什么?以及它们两者能相互…

400G光模块知识大全

400G光模块是目前高速传输领域中的一种先进产品,被广泛应用于高性能数据中心、通信网络、大规模计算、云计算等领域。本文将从400G光模块的定义、技术、产品型号、应用场景以及未来发展方向进行详细介绍。 一、什么是400G光模块? 400G光模块是指传输速率…

光模块:定义与组成

光模块是光纤通信系统中的核心器件,是实现光信号传输过程中光电转换和电光转换功能的光电子器件。按照分层划分的话,它属于OSI模型的物理层。 那么光模块主要应用在哪里呢?基本上所有的网络传输环节都会与光模块打交道,其应用场景…

光模块选购注意事项大全

光模块是光纤通信的核心配件,现今光模块市场品种繁多,我们在选购光模块的时候需要考虑哪些因素呢?如何才能采购到合适的光模块呢?选购光模块的时候需要考虑的因素: 1、封装速率 光模块的封装有 SFP:用于155M、1.25G、…

光模块基础知识【快速入门】02

目录 第一节 光模块简介 第二节 光模块分类 1、按网络分类 2、按封装分类 3、按应用分类 4、按使用方式分类 5、按激光器分类 6、按波长分类 第三节 PON光模块 1、PON光模块分类 (1)SFF/SFP/SFP和XFP光模块 (2)OLT光模…