案例库 · 软件与 IT · 技术决策 · 2010–2013
Spark将数据保存在内存中,并通过重放血统而非复制来恢复失败
RDD将中间结果持久化在内存中,通过从记录的转换重新计算来恢复故障,速度大约快一个数量级。
Apache Spark (UC Berkeley AMPLab)
那一手
MapReduce让集群编程变得简单,但它复用数据的方法只有写回分布式文件系统,这对迭代式机器学习和交互式数据挖掘来说代价高昂。两类应用受影响最大:迭代算法和对同一数据集的即席查询。
RDD为程序员提供了一种受限的分布式共享内存形式:对多个元素同时应用粗粒度转换。每个RDD记录其血统,即构建它的操作,如果某个分区丢失,系统只需重新计算它,而不是像早期分布式内存系统那样复制或记录细粒度更新。
在加州大学伯克利分校的AMPLab,Spark实现了这一抽象,处理了PageRank、K-means和逻辑回归,论文报告称,对于重用频繁的工作负载,将数据保存在内存中可以将性能提升一个数量级。
为什么管用
- 内存复用消除了迭代之间的磁盘往返
- 血统重算避免了跨网络复制数据
- 粗粒度算子保持了编程模型的简单性
- 一个抽象覆盖了迭代、交互和批处理工作负载
值了多少持久化在内存中;从血统重建丢失的分区聪明
可以搬走什么
将故障模型设计进抽象中:当重建成本低而复制成本高时,让系统记住数据是如何生成的,而不是复制其所持有的内容。
后来呢
Spark成为Apache项目,并成为行业标准的大数据引擎之一:如今Apache Spark的网站描述其为一个多语言引擎,用于数据工程、数据科学和机器学习,从批处理到流处理,从SQL到PB级探索性分析,可在笔记本电脑或数千台机器的容错集群上运行。
资料来源
- Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
- RDD Programming Guide: resilient distributed datasets
发现哪里写错了?告诉我们。