当前位置: 首页 > 后端技术 > Java

MPP相关

时间:2023-04-02 01:39:56 Java

一、MPP发展历程1、SMP(SymmetricMulti-Processor)所谓对称多处理器结构,是指服务器中多个CPU对称工作,没有主次或从属关系。每个CPU共享相同的物理内存,每个CPU访问内存中任意地址所需的时间是相同的,所以SMP又称为统一内存访问结构(UMA:UniformMemoryAccess)。扩展SMP服务器的方法包括增加内存、使用更快的CPU、增加CPU、扩展I/O(插槽和总线的数量)以及添加更多外部设备(通常是磁盘存储)。SMP服务器的主要特点是共享,系统中的所有资源(CPU、内存、I/O等)都是共享的。正是由于这个特点,SMP服务器的主要问题是它的可扩展性非常有限。对于SMP服务器来说,每个共享链接都可能造成SMP服务器扩展的瓶颈,最受限制的就是内存。由于每个CPU都要通过同一条内存总线访问相同的内存资源,随着CPU数量的增加,内存访问冲突会迅速增加,最终会造成CPU资源的浪费,大大降低CPU性能的有效性。实验数据表明,最好的SMP型服务器CPU是2-4个,多余的就浪费了。2、NUMA(Non-UniformMemoryAccess)由于SMP在扩展能力方面的局限性,人们开始探索如何有效扩展该技术来构建大型系统。NUMA是这项努力的成果之一。使用NUMA技术,一台服务器可以组合几十个CPU(甚至上百个CPU)。NUMA服务器的基本特征是拥有多个CPU模块,每个CPU模块由多个CPU(比如4个)组成,具有独立的本地内存、I/O插槽等。由于节点之间可以通过互连模块(如CrossbarSwitch)进行连接和交换信息,因此每个CPU都可以访问整个系统的内存(这是NUMA系统和MPP系统的一个重要区别)。显然,访问本地内存的速度会远高于访问远程内存(系统中其他节点的内存)的速度,这也是NUMA存储访问不均匀的根源。由于这个特点,为了更好地发挥系统的性能,在开发应用程序时需要尽量减少不同CPU模块之间的信息交互。使用NUMA技术可以更好的解决原有SMP系统的扩展问题,可以在一台物理服务器上支持上百个CPU。典型的NUMA服务器示例包括HP的Superdome、SUN15K、IBMp690等。每个CPU模块通过互连模块连接和交换信息。CPU相互连接。同时,每个CPU模块平均分为若干个Chip(不超过4个),每个Chip都有自己的内存控制器和内存插槽。NUMA中还有三个节点概念:1)本地节点:对于一个节点中的所有CPU,这个节点称为本地节点。2)邻居节点:与本地节点相邻的节点称为邻居节点。3)远程节点:不是本地节点或邻居节点的节点称为远程节点。4)邻居节点和远程节点称为离地节点(OffNode)。不同类型节点的CPU访问内存的速度是不一样的。访问本地节点的速度最快,访问远程节点的速度最慢。也就是说,访问速度与节点的距离有关。距离越远,访问速度越慢。该距离称为生成节点距离。应用程序应尽量减少不同CPU模块之间的交互。如果能将应用程序固定在一个CPU模块中,应用程序的性能将得到很大的提高。3.MPP(MassivelyParallelProcessing)MPP将任务并行分发到多个服务器和节点。在每个节点上完成计算后,将各个部分的结果进行聚合,得到最终的结果(类似于Hadoop)。MPP的系统扩展不同于NUMA。MPP由多个SMP服务器通过一定的节点互联网络连接起来,它们协同工作,完成同一个任务。从用户的角度来看,它是一个服务器系统。每个节点只访问自己的资源,因此是一个完全不共享(ShareNothing)的结构。(1)MPP结构的扩展能力最强,理论可以无限扩展。由于MPP由多个SPM服务器连接,每个节点的CPU无法访问另一个节点的内存,所以不存在远程访问的问题。(2)每个节点中的CPU不能访问另一个节点的内存,节点之间的信息交换是通过节点互连网络实现的。此过程称为数据重新分配。(3)MPP服务器需要复杂的机制来调度和平衡各节点的负载和并行处理。目前一些基于MPP技术的服务器往往通过系统级软件(如数据库)来屏蔽这种复杂性。例如Teradata是一款基于MPP技术的关系型数据库软件(这是第一个采用MPP架构的数据库)。基于该数据库开发应用时,无论后台服务器由多少个节点组成,开发者面对的都是同一个数据库系统,而无需考虑如何调度部分节点的负载。MPP架构特点:(1)任务并行执行;(2)分布式数据存储(本地化);(3)分布式计算;(4)高并发,单节点并发能力大于300用户;(5)横向扩展,支持集群节点的扩展;(6)SharedNothing(完全不共享)架构;(7)私有资源。MPP和NUMA:相同点:第一,NUMA和MPP都是由多个节点组成;第二,每个节点都有自己的CPU、内存、I/O等;两者可以通过节点互联机制交换信息。不同点:首先,节点互联机制不同。NUMA的节点互联是在同一物理服务器内部实现的,MPP的节点互联是通过不同SMP服务器外部的I/O实现的。其次,内存访问机制不同。在NUMA服务器中,任何一个CPU都可以访问整个系统的内存,但是远程内存访问的性能远低于本地内存访问。因此,在开发应用程序时应避免远程内存访问。.在MPP服务器中,每个节点只访问本地内存,不存在远程内存访问问题。2、MPP和批处理架构的相同区别:批处理架构和MPP架构都是分布式并行处理,将任务并行分发到多个服务器和节点。在每个节点上完成计算后,将各个部分的结果相加,得到最终的结果。区别:批处理架构和MPP架构的区别可以举个例子:当我们执行一个任务的时候,会先把这个任务分成多个任务来执行。对于MapReduce,这些任务是随机分配给空闲的Executor;对于MPP架构的引擎来说,每一个处理数据的任务都会绑定到指定的持有数据切片的Executor上。批处理的优点:对于批处理架构,如果一个Executor执行的太慢,那么这个Executor会逐渐被分配到更少的任务去执行。批处理架构有一个推测执行策略,推断一个Executor已经执行了任务,如果任务慢或者有故障,就会少分配任务给它或者直接不分配,这样集群的性能就不会因为以下原因而受到限制某个节点的问题。批处理的缺陷:万物皆有价。对于批处理,它的优点也导致了它的缺点,中间结果会写入磁盘,严重限制了处理数据的性能。MPP的优点:MPP架构不需要将中间数据写入磁盘,因为单个Executor只处理单个任务,所以它可以简单地将数据流式传输到下一个执行阶段。这个过程称为流水线,它提供了很大的性能提升。MPP的缺陷:对于MPP架构来说,因为tasks和Executors是绑定的,如果一个Executor执行的太慢或者挂了,整个集群的性能会被故障节点的执行速度所限制(所谓woodenshort木桶板效应),所以MPP架构最大的缺陷就是短板效应。还有一点就是集群中的节点越多,某个节点出现问题的概率就越大。一旦某个节点出现问题,对于MPP架构来说,整个集群的性能都会受到限制。因此,一般来说,实际生产中的MPP架构不容易出现过多的集群节点。以下面两种架构的数据存储为例:实现两个大表的join操作,以批处理为例,Spark会写3次磁盘(第一次写:表1是根据joinkeyshuffle;第二次写入:表2根据joinkey进行shuffle;第三次写入:将Hash表写入磁盘),MPP只需要一次写入(Hashtablewrite)。这是因为MPP同时运行mapper和reducer,而MapReduce将它们划分为依赖任务(DAG)。这些任务是异步执行的,因此必须通过将中间数据写入共享内存来解决数据依赖性。3、MPP应用采用MPP架构的OLAP引擎分为两类,一类是本身不存储数据,只负责计算的引擎;另一个是存储数据的引擎,也负责计算。1.一个只负责计算,不负责存储的引擎1)ImpalaApacheImpala是一个使用MPP架构的查询引擎。它本身不存储任何数据,直接使用内存进行计算,兼顾数据仓库。具有实时、批处理、多并发等优点。提供类SQL(Hsql-like)语法,在多用户场景下也能有很高的响应速度和吞吐量。它由Java和C++实现,Java提供查询交互的接口和实现,查询引擎部分由C++实现。Impala支持共享HiveMetastore,但不是使用缓慢的Hive+MapReduce批处理,它可以直接从HDFS或HBase查询数据,使用SELECT、JOIN和统计功能,大大降低了延迟。Impala通常与存储引擎Kudu一起提供服务。这样做最大的好处是查询速度更快,支持数据Update和Delete。2)PrestoPresto是一个采用MPP架构的分布式查询引擎。本身不存储数据,但可以访问多个数据源,支持跨数据源的级联查询。Presto是一款擅长对海量数据进行复杂分析的OLAP工具;但是对于OLTP场景,并不是Presto擅长的,所以不要把Presto当数据库来用。Presto是一种低延迟、高并发的内存计算引擎。需要从其他数据源获取数据进行计算分析。可以连接多种数据源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等。2.负责计算和存储的引擎(1)ClickHouseClickHouse是一个开放的源列式数据库是近年来备受关注的,主要应用于数据分析(OLAP)领域。具有自包含的存储和计算能力,完全独立实现高可用,支持包括JOIN等完整的SQL语法,技术优势明显。与Hadoop系统相比,以数据库形式处理大数据更容易上手,学习成本低,灵活性高。现在的社区还在快速发展,在国内社区也很受欢迎,各大厂也纷纷跟进大规模使用。ClickHouse在计算层做了非常细致的工作,尽量压榨硬件能力,提高查询速度。实现了单机多核并行、分布式计算、向量化执行、SIMD指令、代码生成等多项重要技术。ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,实现了数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、master等丰富功能-备份复制等以上功能共同奠定了ClickHouse极速分析性能的基础。(2)DorisDoris是百度主导的大数据分析引擎。它是一个基于GoogleMesa论文和Impala项目的大规模分布式KV存储系统。其设计目标是支持中等规模、高可用、可扩展的KV存储集群。Doris可以实现海量存储、线性伸缩、平滑扩展、自动容错、故障转移、高并发、低运维成本。部署规模,建议部署4-100+台服务器。Doris3的主要架构:DT(DataTransfer)负责数据导入,DS(DataSeacher)模块负责数据查询,DM(DataMaster)模块负责集群元数据管理,数据存储在Armor分布式键值引擎。Doris3依赖ZooKeeper来存储元数据,这样其他模块依赖ZooKeeper就可以实现无状态,进而整个系统可以实现无单点故障。(3)DruidDruid是一个开源的、分布式的、面向列式存储的实时分析数据存储系统。Druid的主要特点如下:亚秒级OLAP查询分析:采用列式存储、倒排索引、位图索引等关键技术;在亚秒级完成海量数据的过滤、聚合、多维分析等操作;实时流式数据分析:Druid提供实时流式数据分析和高效的实时写入;亚秒级实时数据可视化;丰富的数据分析功能:Druid提供了友好的可视化界面;SQL查询语言;高可用和高扩展性:Druid工作节点功能单一,互不依赖;Druid集群易于管理、容错、容灾、扩容;(4)TiDBTiDB是PingCAP自主设计开发的开源分布式关系型数据库。同时支持OLTP和OLAP的融合分布式数据库产品。TiDB兼容MySQL5.7协议和MySQL生态系统等重要特性。目标是为用户提供一站式的OLTP、OLAP、HTAP解决方案。TiDB适用于高可用、强一致性要求高、数据规模大等多种应用场景。(5)GreenplumGreenplum是一个非常强大的关系型分布式数据库,它基于开源的PostgreSQL,采用MPP架构。为了兼容Hadoop生态,推出了HAWQ。分析引擎保留了Greenplum的高性能引擎。底层存储不再使用本地硬盘,而是使用HDFS,避免本地硬盘可靠性差的问题,同时融入Hadoop生态。3.常用引擎对比参考https://www.jianshu.com/p/060...https://blog.csdn.net/wylfeng...https://zhuanlan.zhihu.com/p/...https://www.eefocus.com/嵌入...