读了RDD的这篇论文,Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computering.
伯克利写论文更注重思想,google的论文给人感觉更加注重工程上的实现。
这篇论文将RDD与共享内存的方式进行了对比。表明RDD更加适合迭代计算环境,不用像mapreduce那样不断的持久化保存中间的计算结果落地的时间。
将其中的数据抽象成RDD,一个一个的dataset,每个dataset有可能分布到不同的机器上,这些机器共同构成一个dataset。
RDD在spark里面是只读的不会修改的,只能够通过spark提供的操作,将一种RDD转换成为另一种RDD。
同一个job的RDD之间会存在血缘关系。
1. RDD之间的关系
血缘关系分为两种:wide dependency和narrow dependency。提出这两种方式非常有利于spark性能的提升。因为narrow dependency的RDD如果发生了某个节点的down机现象,可以通过其他的机器将该分片重新计算一下就行了,而宽依赖却不得不将他的所有的parent都计算一遍,这样将非常耗时。
2. RDD实现上的优化
spark也就是给用户提供更加丰富语义。为使用RDD的用户提供了两种接口,persist 和partition。persist 可以让用户自己决定是否将其存储到持久化设备上,因为有些RDD是在计算中产生的,没有必要进行存储,这样提供了persist可以提高了存储的效率,避免了存储时所引起的开销。
相比mapreduce而言,要想榨取分布式计算的性能,提供用户丰富的控制接口是非常好的一种选择。上层接口不改,已有系统很难有大的提升了。
阅读(1687) | 评论(0) | 转发(0) |