Greenplum属于MPP架构,和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术,两者的相似点在于:
但两种技术在数据存储和计算方法上,也存在明显的差异:
基于上述不同,体现在效率、功能等特性方面也大不相同。
MapReduce相比而言是一种较为蛮力的计算方式,数据处理过程分为Map->Shuffle->Reduce的过程,相比MPP而言,MapReduce的数据在计算前未经整理和组织,而MPP预先把数据有效的组织,例如:行列表关系、Hash分布、索引、分区、列存、统计信息收集等,这决定了在计算过程中效率大不相同。
另外,MapReduce在整个Map->Shuffle->Reduce过程中通过文件来交换数据,效率很低,MapReduce要求每个步骤间的数据都要序列化到磁盘,意味着MapReduce作业的IO成本很高,导致交互分析和迭代算法开销很大,MPP数据库采用Pipline方式在内存数据流中处理数据,效率比文件方式高很多。
总结:MPP数据库在计算并行度、计算算法上比Hadoop更优,效率更高。
MPP数据库采用SQL作为交互式语言,SQL简单易学,具有很强的数据操纵能力和过程语言能力,SQL语言是专门为统计和数据分析开发的语言,各种功能和函数琳琅满目,SQL语言不仅适合开发人员,也适用于分析业务人员,大大简化数据的操作和交互过程。
MapReduce编程明显困难,在原生的MapReduce开发框架基础上开发,需要熟悉JAVA开发和并行原理。为了解决易用性的问题,近近来SQL on Haddop技术大量涌现,几乎成为当前Hadoop开发使用的一个技术热点趋势。这些技术包括Hive、HAWQ、Spark SQL、Impala、Presto、Drill、Tajo等。这些技术有些是在MapReduce上做优化,比如Spark采用内存中的MapReduce技术,有的采用C/C++代替Java语言重构Hadoop和MapReduce,有些是直接绕开MapReduce,如Impala、HAWQ借鉴MPP计算思想来做查询优化和内存数据Pipeline计算,以此提高性能。
虽然SQL on Hadoop比原始MapReduce在易用上有所提高,但SQL成熟度和关系分析上目前还与MPP数据库有较大差距。
上述产品,除了HAWQ外,对SQL的支持非常有限,特别是分析型复杂SQL,如SQL 2003 OLAP 窗口函数,几乎都不支持。由于Hadoop本身Append-only特性,SQL on Hadoop大多不支持数据局部更新和删除功能,基本上都缺少索引和存储过程等特征。除HAWQ外,大多对于ODBC/JDBC/DBI/OLEDB/.NET接口的支持有限,与主流第三方BI报表工具的兼容性不如MPP数据库。
SQL on Hadoop不擅长交互式的Ad Hoc查询,大多通过预关联的方式规避这个问题。另外,在并发处理方面能力较弱。高并发场景下,需要控制计算请求的并发度,避免资源过载导致的稳定性问题和性能下降问题。
为保证数据的高性能计算,MPP数据库节点和数据之间是紧耦合的,相反,Hadoop的节点和数据是没有耦合关系的。这决定了Hadoop的架构更加灵活,存储节点和计算节点的无关性,现在在2个方面:
如果数据需要频繁的计算和统计并且希望具有更好的SQL交互式支持和更快计算性能及复杂SQL语法支持,建议选择MPP数据库。特别如数据仓库、集市、ODS、交互式分析数据平台等系统,MPP有明显的优势。
如果数据加载后只会被用于读取少数次的任务和用于少数次的访问,而且主要用于Batch,对计算性能不是很敏感,选择Hadoop也不错,Hadoop不需要花费较多的精力来模式化你的数据,节点数据模型设计和数据加载设计方面的投入。包括历史数据系统、ETL临时数据区、数据交换平台等。