数据仓库选择Greenplum还是SQL-on-Hadoop

news/2025/3/5 12:17:01/

Greenplum和Hadoop都是为了解决大数据并行计算而出现的技术,二者的相似点在于:

  1. 分布式存储数据在多个节点上。
  2. 采用分布式并行计算框架。
  3. 支持向外扩展来提高整体的计算能力和存储容量。
  4. 支持X86开放集群架构。

但两种技术在数据存储和计算方法上,也存在很多显而易见的差异:

  1. Greenplum按照关系数据库行列表方式存储数据(有模式);Hadoop按照文件切块方式分布式存储(无模式)数据。
  2. 两者采用的数据分布机制不同,Greenplum采用Hash分布,计算节点和存储紧密耦合,数据分布在记录级的更小粒度,一般在1KB以下;Hadoop FS按照文件切块后随机分配,节点和数据无耦合,数据分布粒度在文件块级,默认为64MB。
  3. Greenplum采用SQL并行查询计划;Hadoop采用MapReduce框架。

基于以上不同,体现在效率、功能特性等方面也大不相同。Greenplum数据库在计算并行度、计算算法上比Hadoop更加优雅,效率更高。图3-11由Pivotal提供,显示相同硬件环境下,基于MapReduce的Hive和Greenplum在TPC-H(商业智能测试)22个SQL测试中的性能比较,可以看到两者的执行速度相去甚远。

 

图3-11  Hive和Greenplum在TPCH中的性能比较

为了取得第一手数据,笔者做了以下两个简单的Greenplum与MySQL查询性能对比测试,以便有一个最初的直观体验。也许你会觉得拿分布式集群数据库与单机集中式数据库作比较有失公允,没错!笔者想说明的是:这两个查询都是线上实际在MySQL上运行的慢查询,而考虑Greenplum就是为了解决大数据量在MySQL上查不动的问题。而且这也并不是严格的对等测试,Greenplum只是由三台测试机组成的集群,而MySQL使用的是线上高配服务器。

-- 查询1:
select userid, target, relation_type, update_timefrom relationwhere userid = 717600270and relation_type in (1, 2) order by update_time desclimit 30;-- 查询2:
select a.*from moments_dynamic a -- force index (idx_user_all)join (select target from relation r where r.userid = 918046590 and (r.relation_type = 1 or r.relation_type = 2) union all select 918046590) b on a.userid=b.targetwhere dynamic_status = 0and dynamic_type in (1, 6, 8, 11, 13) order by id desclimit 80;

moments_dynamic表有79309341行,relation表有499194521行。查询1,Greenplum用时44 ms,MySQL用时9210 ms;查询2,Greenplum用时75ms,MySQL用时170 ms(force index (idx_user_all))。

在功能上Greenplum数据库采用SQL作为主要交互式语言。SQL语言简单易学,具有很强的数据操纵能力和过程语言的流程控制能力,是专门为统计和数据分析开发的语言,丰富的功能和函数极大简化了数据操作和交互过程。

而对于MapReduce编程明显是困难的,在原生的MapReduce开发框架基础上进行开发,需要技术人员谙熟Java开发和并行原理,而这即便是技术人员也难以学习和操控。为了解决易用性问题,近年来SQL-on-Hadoop技术大量涌现出来,成为当前Hadoop开发使用的一个技术热点。其中,Hive支持MapReduce、Spark、Tez三种计算框架;Spark SQL采用内存中的MapReduce;Impala、HAWQ则借鉴MPP计算思想来做查询优化和内存数据管道计算,以此来提高性能。

虽然SQL-on-Hadoop比原始的MapReduce在易用性上有所提高,但在SQL成熟度和复杂分析上目前还与Greenplum数据库有较大差距,笔者在使用过程中对此深有体会:

  1. SQL-on-Hadoop系统中,除了HAWQ(HAWQ从代码级别上可以简单理解成是数据存储在HDFS上的Greenplum数据库)外,其余系统对SQL的支持都非常有限,特别是分析型复杂SQL,如SQL 2003 OLAP WINDOW函数,几乎都不支持,更不用说存储过程等数据库常规功能。以Impala为例,不支持Date数据类型,不支持XML和JSON相关函数,不支持covar_pop、covar_samp、corr、percentile、percentile_approx、histogram_numeric、collect_set等聚合函数,不支持rollup、cube、grouping set等操作,不支持数据抽样(Sampling)等数据分析中的常用操作。在TPC-DS测试中,Spark SQL、Impala、Hive等只支持其中1/3左右的SQL测试。TPC-DS是专门用于评测决策支持系统(大数据或数据仓库)的标准SQL测试集,包含99个SQL。
  2. 由于HDFS本身只能追加数据的特性(Append-only),SQL-on-Hadoop大多不支持行级数据更新(update)和删除(delete)功能。而像Hive虽然通过配置可以支持事务和行级更新,但实现极为别扭,性能更是无法接受,基本不具实用价值。
  3. SQL-on-Hadoop不擅长于交互式即席查询,多通过预关联的方式来规避这个问题。另外,在并发处理方面能力较弱,高并发大查询场景下,需要控制计算请求的并发度,避免资源过载导致的稳定性和性能下降等问题。笔者就曾多次遇到几个并发Spark SQL任务占用大量内存,最终出现OOM错误的情况。

反观专为大数据存储、计算、挖掘而设计的Greenplum,它所拥有的丰富特性使其成为构建数据仓库等分析型应用的理想选择:

  1. 完善的标准支持。Greenplum完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展。例如,支持内连接、外连接、全连接、笛卡尔连接、相关子查询等所有表连接方式,支持并集、交集、差集等集合操作,并支持递归函数调用。作为一个数据库系统,提供这些功能很好理解。
  2. 除了包含诸多字符串、数字、日期时间、类型转换等常规标量函数以外,Greenplum还包含丰富的窗口函数和高级聚合函数,这些函数经常被用于分析型数据查询。窗口函数包括cume_dist、dense_rank、first_value、lag、last_valueexpr、lead、ntile、percent_rank、rank、row_number等。高级聚合函数包括median、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)等。
  3. 得益于PostgreSQL良好的扩展性(这里是extension,不是scalability),Greenplum 可以采用各种开发语言来开发用户自定义函数(UDF)。自定义函数部署到Greenplum后,能充分享受到实例级别的并行性能优势。建议把库外的处理逻辑部署为用MPP数据库的UDF这种库内方式来处理,这将获得意想不到的性能和方便。
  4. 支持分布式事务,支持ACID,保证数据的强一致性。
  5. Greenplum支持用“Hadoop外部表”方式来访问、加载HDFS的数据。虽然Greenplum的Hadoop外部表性能大幅低于MPP内部表,但比Hadoop自身的Hive要快很多。Greenplum还提供了gpfdist文件服务器,可并行读写本地文件系统中的文件,最大化数据装载性能。
  6. Greenplum有完善的生态系统,可以与很多企业级产品集成,如SAS、Cognos、Informatic、Tableau等;也可以与很多种开源软件集成,如Pentaho、Talend等。

本文节选自《Greenplum构建实时数据仓库实践》,内容发布获得作者和出版社授权。

 


http://www.ppmy.cn/news/82352.html

相关文章

公网对讲SDK——对讲应用场景

anyRTC 公网对讲 SDK的发布,解决了开发者想做公网对讲应用但没有技术的困境;SDK全平台支持的特性,让开发者可以在任何平台接入对讲能力;同时因为包体积小、对业务零入侵等特性被运用到各行各业中,下面咱们就来聊一聊公…

LeetCode 1080. 根到叶路径上的不足节点

【LetMeFly】1080.根到叶路径上的不足节点 力扣题目链接:https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths/ 给定一棵二叉树的根 root,请你考虑它所有 从根到叶的路径:从根到任何叶的路径。(所谓一个叶子…

11.计算机基础-计算机网络面试题—基础知识

本文目录如下: 计算机基础-计算机网络 面试题一、基础知识简述 TCP 和 UDP 的区别?http 与 https的区别?Session 和 Cookie 有什么区别?详细描述一下 HTTP 访问一个网站的过程?https 是如何实现加密的?URL是什么&…

性能测试——性能统计工具

性能统计工具 一、io监控命令1、io监控命令iostat2、io指标监控命令df 二、cpu监控命令1、cpu指标监控命令uptime2、cpu指标监控命令 cat /proc/cpuinfo3、cpu 指标监控命令 mpstat4、cpu指标监控命令 sar 三、mem指标监控命令1、mem指标监控命令 cat /proc/meminfo2、mem指标监…

FL Studio水果软件好用吗?对电脑硬件环境有哪些需求

如果你打算将来朝着艺术和音乐方向发展,那么学习音乐理论和音乐制作就是一门基础课了。 实践才是检验学习效果途径,在我们日常的练习中,一款功能强大且易学的音乐制作工具是少不了的。在没有实际体验过各个音乐制作工具的功能前,…

员工每天带薪拉屎3至6小时,对谁更不利?

#员工每天带薪拉屎3至6小时被解雇# 事件摘要: 据劳动报报道,2015年7月开始,某公司员工王某每天在厕所停留的时间为3至6个小时。记录显示,自2015年9月7日至17日(9月13日除外)王某每天分二至三次&#xff0…

【C生万物】 字符串内存函数篇 (上)

欢迎来到 Claffic 的博客 💞💞💞 👉 专栏:《C生万物 | 先来学C》👈 前言: 过了指针这个坎后,下一步就是C语言中关于字符的处理,这一期来讲…

电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。

统一供应商门户 便捷动态、呈现丰富 供应商门户具备内外协同的能力,为外部供应商集中推送展示与其相关的所有采购业务信息(历史合作、考察整改,绩效评价等),支持供应商信息的自助维护,实时风险自动提示。…