Spark相关论文如下:

Spark: Cluster Computing with Working Sets

这篇文章有些内容过时了,如当时不支持shuffle,但是基本的思想可以借鉴。

简介

  1. mr模型是用来处理acyclic data flow的,但是,有时候我们想要在一个数据集上执行多次操作( reuse a working set of data across multiple parallel operations):
  1. spark查询39GB数据不要1s,10x的速度对比hadoop
  2. 数据并行计算框架的基本能力,可以自动处理下面这些复杂度:
  1. spark的提供了并行计算框架的基本能力(学习如何实现)、
  2. spark提供了抽象概念的RDD
  1. RDD不是通用的一个分布式共享内存的抽象,他为了实现可靠性和可扩展,牺牲了通用的表达能力(就是我们不能把rdd看成分布式缓存)
  2. 使用scala实现

编程模型

程序组成:

  1. 数据集RDD
  1. 数据集上的并行操作
  1. 共享变量

编程例子

实现

RDD

  1. spark是建立在mesos之上的,mesos是一个『集群操作系统』,在上面协议跑各种分布式的框架,hadoop、mpi等,当然可以实现spark
  1. 实现spark的核心是实现『RDD』
  2. 数据集在spark中表示成一串scala的object:他们表示了** the lineage of each RDD**,且每个对象包括
  1. 所有RDD都实现了的一组相同的接口
  1. 当我们执行『并行操作』时,会
  1. 不同类型的RDD,只是实现上面的接口不同
  1. 发送task到worker上,就是发送closure(以及闭包bound内的变量),

共享变量

  1. broadcast and accumulators 各自都使用了『自定义的序列化格式
  2. broadcast:以具有值v的广播变量b为例
  1. Accumulators

继承Scala解释器实现交互查询

  1. scala交互解释器实现原理:
  1. spark对他的修改

Resilient Distributed Datasets: A Fault-Tolerant Abstraction forIn-Memory Cluster Computing

简介

错误容忍的两种方式

rdd概览

The main difference between RDDs and DSM is that RDDs can only be created (“written”) through coarse-grained transformations, while DSM allows reads and writes to each memory location.

spark编程接口

RDD的操作(operation)


注意点:

例子

RDD的实现

论文中说RDD是 a simple graph-based representation (基于图的表示)

设计一:如何表示RDD

RDD的表示通过暴露5个信息(5个接口方法)来实现

a set of partitions, which are atomic pieces of the dataset;
a set of dependencies on parent RDDs; a function for computing the dataset based on its par-ents; and metadata about its partitioning scheme and data placement.

设计二:如何表示RDD的关系

把RDD间的关系定义为下面两类

例子:

两种关系的特点

RDD实现demo

其他实现

Each Spark program runs as a separate Mesos application, with its own driver (master) and workers, and resource sharing between these applications is handled by Mesos.

job 调度

未解决问题:

整合解释器

略,基本与上一篇的解释一致,问题还是Modified code generation的意义

checkpoint机制

RDD lineage虽然可以用来恢复失败任务,但是,如果在RDD链条很长的情况下,恢复重算非常费时间。尤其是存在宽依赖的场景,下游的一个task失败,导致上游大量重算。如之前的RankPage的例子。
这里,我们需要用户通过手动添加RDD的persist的REPLICATE flag来告知系统用多副本方式缓存RDD,防止中间结果丢失。

未解决问题:

中文参考文章

http://itindex.net/detail/51871-spark-rdd-模型

I

lazy问题:
read rdd时是lazy?
cache是lazy?

cache问题:
shuffle的rdd,宽依赖是否会自动cache?(有人说是的)。cache在哪里(论文中说在父节点?类似MR?)
每一个RDD可以设置persistence priority?什么
LRU策略具体是什么

操作问题:
论文中说以后会提供一个在map里面的lookup操作?是什么鬼?
论文中说会有自动的checkpoint(persist(REPLICATE)还)

架构问题
调度起schedule具体是个什么东西

shuffle论文:Managing Data Transfers in Computer Clusters with Orchestra

分为两个部分 broadcast和shuffle。看了shuffle部分

shuffle

基本结论如下

优化方案(没有实践)

http://www.mosharaf.com/wp-content/uploads/orchestra-sigcomm11.pdf