|||
弹性分布式数据集:基于内存的集群计算的容错性抽象(1)—— 引言、RDD
弹性分布式数据集:基于内存的集群计算的容错性抽象(2)—— 编程接口、RDD实现实例、任务调度
弹性分布式数据集:基于内存的集群计算的容错性抽象(3)—— 实现、实验结果
6. 实现
我们使用10000行Scala代码实现了Spark。系统可以使用任何Hadoop数据源(如HDFS,Hbase)作为输入,这样很容易与Hadoop环境集成。Spark以库的形式实现,不需要修改Scala编译器。
这里讨论关于实现的三方面问题:(1)修改Scala解释器,允许交互模式使用Spark(6.1);(2)缓存管理(6.2);(3)调试工具rddbg(6.3)。
像Ruby和Python一样,Scala也有一个交互式shell。基于内存的数据可以实现低延时,我们希望允许用户从解释器交互式地运行Spark,从而在大数据集上实现大规模并行数据挖掘。
通常Scala解释器将用户输入的每一行编译为一个类,装载到JVM中,然后执行函数。这个类是一个包含输入行变量或函数的单态(singleton)对象,并在一个初始化函数中运行这行代码。例如,如果用户敲入代码 var x = 5; println(x),则解释器会定义一个包含x的Line1类,并将第2行编译为println(Line1.getInstance().x)。
在Spark中我们对解释器做了两点改动:
1. 类传输(class shipping):解释器支持每行上创建的类以HTTP传输,这样worker节点就能获取这些类的字节码。
2. 改进的代码生成逻辑:通常每行上创建的单态对象通过对应类上的静态方法进行访问。也就是说,如果要序列化一个引用前面代码行变量的闭集(closure),比如上面的例子Line1.x,Java不会根据对象关系传输包含x的Line1实例。所以worker节点不会收到x。我们将这种代码生成逻辑改为直接引用各个行对象的实例。
图7说明了解释器如何将用户输入的一组代码行解释为Java对象。
(图参见原文)
图7 Spark解释器如何将用户输入的两行代码解释为Java对象
Spark解释器便于处理大量对象关系引用(trace),并且有利于HDFS数据集的探究。我们计划以Spark解释器为基础,开发提供高级数据分析语言支持的交互式工具,比如SQL和Matlab的变种。
Worker节点将RDD分区以Java对象的形式缓存在内存中。由于大部分操作是基于扫描的,采取RDD级的LRU(最近最少使用)替换策略(即不会为了装载一个RDD分区而将同一RDD的其他分区替换出去)。目前这种简单的策略适合大多数用户应用。另外,使用带参数的cache操作可以设定RDD的缓存优先级。
RDD的初衷是为了支持容错的确定性再计算(re-computation),这个特性使得调试更容易。我们创建了一个名为rddbg的调试工具,使用程序记录的lineage信息,允许用户:(1)重建任何由程序创建的RDD,并执行交互式查询;(2)使用一个单进程Java调试器(如jdb)传入计算好的RDD分区,重新运行job中的任何任务。
我们强调一下rddbg不是一个完全重放的(replay)调试器:特别是不对非确定性的代码或行为进行重放。但如果某个任务一直运行很慢(比如由于数据分布不均匀或者异常输入等原因),仍然可以用它来帮助找到其中的逻辑错误和性能错误。
Rddbg给程序执行带来的开销很小。程序本来就需要将各个RDD中的所有闭包(closure)序列化并通过网络传送,只不过使用rddbg同时还要将这些闭集记录到磁盘。
7. 实验评估
我们在Amazon EC2上进行了一系列实验来评估Spark及RDD的性能,并与Hadoop及其他应用程序的基准(benchmark)进行了对比。总的说来,结果如下:
(1)对于迭代式机器学习应用,Spark比Hadoop快20多倍。这种加速比是因为:数据存储在内存中,同时Java对象缓存避免了反序列化操作(deserialization)。
(2)用户编写的应用程序执行结果很好。例如,Spark分析报表比Hadoop快40多倍。
(3)如果节点发生失效,通过重建那些丢失的RDD分区,Spark能够实现快速恢复。
(4)Spark能够在5-7s延时范围内,交互式地查询1TB大小的数据集。
(具体实验细节参见原文)
本系列文章《弹性分布式数据集:基于内存的集群计算的容错性抽象》系《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》译文。原文参见这里。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-22 04:06
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社