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

news2024/11/20 7:15:52

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_time
  from relation
 where userid = 717600270
   and relation_type in (1, 2) 
 order by update_time desc
 limit 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.target
 where dynamic_status = 0
   and dynamic_type in (1, 6, 8, 11, 13) 
 order by id desc
 limit 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.coloradmin.cn/o/553821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADS-600树脂,除COD有机物树脂,大孔树脂型号,矿井水有机物

基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的,由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物,氯代烃等含氯物质,表面活性剂,氨基酸&#…

Python系列模块之标准库OS详解

感谢点赞和关注 ,每天进步一点点!加油! 目录 ​一、模块 1.1 模块的定义 1.2 模块的分类 1.3 模块的基本导入语法 二、Python中的包 三、标准库之os模块 实战: 钉钉告警应用 一、模块 1.1 模块的定义 Python 模块(Module)&a…

【JAVA程序设计】(C00139)基于Springboot+Thymeleaf的药店管理系统

基于SpringbootThymeleaf的药店管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本项目为基于SpringbootThymeleaf的药店管理系统(医院药品管理系统、医院管理系统),本项目主要功能为: 药品库存管理(登记…

0基础学习VR全景平台篇第27章:场景管理-视角功能

大家好,欢迎收看蛙色平台免费教程! 功能位置示意 一、本功能将用在哪里? 视角功能:指观看者打开场景时,默认展示的位置内容,可针对视角显示范围、视角远近范围进行设置。 应用场景:几乎每个作品…

通过nginx解决vue项目打包后跨域代理失效问题

这里 我的接口是写在 http://localhost:80上的 接口名是user 需要一个id路径参数 我们知道 80是默认 所以就可以不带端口因此访问就是http://localhost/user/1 然后 我vue项目中的 vue.config.js 配置如下 const { defineConfig } require(vue/cli-service) module.exports …

00后职场人,怎么做到刚来就涨薪5k? 原因竟是学会了这个宝藏工具

经常有粉丝问我有“有哪些适合绝大多数普通职场人的制作大屏的工具?” 确实,在这个内卷的时代,大家想要的是更加炫酷的汇报效果。要满足大多数职场人的大屏工具首先一定要满足以下三点: (1)简单易上手&am…

使用Python技术开发一个社区婴幼儿预防接种系统

婴幼儿预防接种作为社区预防保健的主要工作之一,是儿科临床和公共卫生保健的基础,目前国内外对婴幼儿预防接种工作非常重视。我们社区在工作中改变传统服务理念,根据不同年龄段婴幼儿的心理状态,采取不同心理护理应用,进行婴幼儿预防接种。 本论文主要论述了如何使用Python技术…

国际原油如何投资?国际原油期货投资策略有哪些?

国际原油产品的规模比较大,市场的交易环境是非常安全的,相信很多人都对国际原油产品的投资比较感兴趣,但是个人投资者需要注意:要买卖实体原油几乎是不可能的,投资者参与国际原油投资最方便快速的方式,就是…

【TCP】滑动窗口

滑动窗口 概念: 我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。 这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。 如果你说完一句话…

大数据面试题:请描述MapReduce中shuffle阶段的工作流程,如何优化shuffle阶段?

map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle。 shuffle: 洗牌、发牌——(核心机制:数据分区,排序,合并)。 shuffle是Mapreduce的核心&…

【社区图书馆】记:读完《网络工程师的Python之路:网络运维自动化实战(第2版)》读后感【书评】

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 书籍整体感受书籍中分了11大章&#…

springboot+vue实习管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的实习管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

数据库链接池从100ms优化到3ms!

数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1万并发用户访问 想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是…

开发中造成空指针的常见用法,如何避免

1. 前言 《手册》的第 7 页和 25 页有两段关于空指针的描述: 【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 返回类型为…

AIGC周报|让AI来画《海贼王》;苹果限制员工使用ChatGPT;李彦宏:不担心大模型会让工作消失

AIGC(AI Generated Content)即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT,以及 DallE 2、Stable Diffusion 等文生图模型,都属于 AIGC 的典型案例,它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

实现BIM的Revit软件学习资料

实现BIM的Revit软件学习资料 一、BIM与Revit的关系二、Revit使用方法总结(一)快捷键(二)一些技巧 一、BIM与Revit的关系 链接: BIM与Revit是什么关系?看完秒懂系列! REVIT是实现BIM理念的工具之一。 二、Revit使用方…

pyton打包成exe程序简易教程

我们知道,Python程序需要有python环境才能够运行的,但当我们开发出一个程序之后,给到用户 那么用户是不会去添加这个python环境的。 所以为了用户也能够正常使用,我们就需要将这个程序打包成exe程序。 1.打包之前需要先下载一个模…

Java面试知识点(全)-dubbo面试知识点

Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 面试官问你如果这个都不清楚,那下面的就没必要问了。 官网:http://dubbo.apache.org 为什么要用Dubbo&#xff1f…

基于 Socket 接口实现自定义协议通信

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 根据自定义的协议规范,使用 Socket 编程接口编写基本的网络应用软件。 掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包 开发一个客户端,实现人机交互界面和与服务器的…

ChatGPT助力Midjourney解锁惊喜创意

[请wx关注“云智AI助手”关注我们 │ 谢谢支持 ] Cloud wisdom, AI assistant 通过结合这两个强大的基础AI模型的优势,我们能够获得令人惊叹的效果。现在,你将有机会亲眼见证Midjourney和ChatGPT共同合作的潜力。它们能够协同工作,相互补充&…