1、专业处理系统的问题(本文所指专业系统均为Spark诞生之前)
- 工作的重复性:正如分布式SQL引擎、机器学习引擎都需要执行并行聚合一样。单独的计算系统需要针对每个域重新解决如何并行聚合计算。这表现在工作分配和容错上便是重复的。这是很多专业计算系统的潜在问题。
- 在执行组合计算上:多数情况下,大数据计算的数据量是很庞大的,而且在得到最终计算结果之前,通常是经过多个计算引擎管道式组合计算而来,这样就会产生大量的中间数据,现行解决方案是将这些数据输出到一个可复制的、稳定的存储系统,来实现多个计算引擎之间共享数据。问题就在这里,庞大数据的移动是代价巨大的。这个代价通常是一般计算的很多倍。
- 计算范围的限制性:如果一个应用并不适用于该专业计算系统的计算模型,用户就必须修改该系统使应用能够使用,或者就是重写一套新的适合应用的运行系统。举个简单的例子,在有大量迭代计算的机器学习的应用中,Hadoop Mapreduce计算模型就不适用了。
- 资源共享:在不同的计算引擎之间动态共享资源是很难的,原因在于,在应用申请资源期间,绝大多数计算引擎都假定他们拥有相同的一套机器。
- 在管理上:与一套具有综合能力的统一系统相比,单独的系统所付出的管理和部署工作量是显著的,不止如此,用户还需要针对每个系统去学习他们的API和计算模型。
基于以上限制,Spark诞生了,作为一个对于集群计算的统一抽象,无论是从可用性还是性能,特别是在复杂计算及多用户环境,其益处显著。
2、弹性分布式数据集RDD
为了解决以上问题,兼顾高效和容错性,RDD提供了