先从NUMA说起吧,NUMA全称为Non-Uniform Memory Access,是主流服务服务器为了提高SMP的可扩展性而采用的一种体系结构。主流服务器一般由多个NUMA节点组成,每个NUMA节点是一个SMP结构,一般由多个CPU组成,并且具有本地内存和IO设备。NUMA节点可以直接访问本地内存,也可以通过NUMA互联模块访问其他NUMA节点的内存,但是访问本地内存的速度远远高于远程访问速度,因此,开发程序要尽量减少不同NUMA节点之间的信息交互。
MPP是一种海量数据实时分析架构。 MPP作为一种不共享架构,每个节点运行自己的操作系统和数据库等,节点之间信息交互只能通过网络连接实现。MPP架构目前被并行数据库广泛采用,一般通过scan、sort和merge等操作符实时返回查询结果。目前采用MPP架构的实时查询系统有EMC Greenplum、HP Vertica和Google Dremel,这些都是实时数据处理领域非常有特点的系统,尤其是Dremel可以轻松扩展到上千台服务器,并在数秒内完成TB级数据的分析。
hadoop作为一个开源项目群本身和MPP并没有什么直接关系,Hadoop中的子项目MapReduce虽然也是做数据分析处理的,但是一般只适用于离线数据分析,区别与MPP较为明显。因为Map和Reduce两个过程涉及到输出文件的存取和大量网络传输,因此往往达不到实时处理的要求。与MapReduce 相似的系统还有Microsoft Dryad和Google pregel。
综上所述,NUMA是一种体系结构,MPP是一种实时海量数据分析架构,而Hadoop是一个关于数据存储处理的项目群,其中的MapReduce是一种离线海量数据分析架构。
实测对比GreenPlum和Hive,GP比Hive性能高出至少一个数量级,但是大部分场景下,依然是秒级甚至分钟级的延迟,距离具体通常意义的实时毫秒级,差距巨大。
另外说一句,广义的Hadoop包括 Impala, Presto | Distributed SQL Query Engine for Big Data 这些MPP架构的SQL引擎。Hadoop社区还在持续发展,Spark还在持续给人们带来惊喜,开源软件的迷人之处也在于此。