Large scale systems
the problem of scale - growth
Hadoop Assumptions
- Simple primitives go a long way.
map:过滤、筛选、检查输入数据并写入本地磁盘中
reduce:远程读入map的本地输出结果,并进行归并分析等,再写入HDFS中 - Computation is too expensive for one machine
- Data too big to fit in one machine (introduction of HDFS)
- Commodity machines are cheap and fail often
Spark Assumptions ( 2,3 and 4 same as Hadoop ones)
- MapReduce 的两大局限性
- Lots of disk I/Os (因为Map和Reduce要在HDFS写入写出嘛)
- Inability to perform iterative computation
Spark 生态系统的目标就是将批处理、交互式处理、流式处理融合到一个软件框架内。Spark 是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。
Spark 允许应用在内存中保存工作集以便高效地重复利用,它支持多种数据处理应用,同时也保持了 MapReduce 的重要特性,如高容错性、数据本地化、大规模数据处理等。
Spark是Hadoop的一个扩展: generalised MapReduce to support more operations than Map / Reduce.
- 2 Additions: (使得Spark能够拥有比Hadoop更快速度的特性是DAG scheduler和内存读取)
- Fast data sharing
- General DAGs (一个DAG可以包括多个AG,DAG除了可以提升scheduler的效率,还是Lineage追溯的基础)
DAG - 有向无环图
相对于传统线性区块链,DAG 优势在于速度快,吞吐量高,由于 DAG 采用的图式网络,每个节点无需等待其它节点的数据,可以异步处理交易,避免了因等待造成的时间浪费。
DAG是Spark中任务的物理执行图,由stage组成,stage内任务流水线并行化执行保证效率,stage间先后依次执行保证结果正确。本章通过对DAG的生成逻辑、执行时的操作以及用户的driver程序如何触发DAG的执行等进行分析,了解了Spark在该部分的实现逻辑。
一分钟了解DAG
Spark DAG 详解
Core abstraction: RDD 弹性分布式数据集 (Resilient Distributed Datasets)
RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此,RDD支持丰富的转换操作(如map, join, filter, groupBy等),通过这种转换操作,新的RDD则包含了如何从其他RDDs衍生所必需的信息,所以说RDDs之间是有依赖关系的。基于RDDs之间的依赖,RDDs会形成一个有向无环图DAG,该DAG描述了整个流式计算的流程,实际执行的时候,RDD是通过血缘关系(Lineage)一气呵成的,即使出现数据分区丢失,也可以通过血缘关系重建分区,总结起来,基于RDD的流式计算任务可描述为:从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组确定性操作构成的DAG,然后写回稳定存储。另外RDD还可以将数据集缓存到内存中,使得在多个操作之间可以重用数据集,基于这个特点可以很方便地构建迭代型应用(图计算、机器学习等)或者交互式数据分析应用。可以说Spark最初也就是实现RDD的一个分布式系统,后面通过不断发展壮大成为现在较为完善的大数据生态系统,简单来讲,Spark-RDD的关系类似于Hadoop-MapReduce关系。
RDD