1. 并行计算回顾
原因:
计算量大:单进程算得不够快
内存需求大:内存随机访问比硬盘随机访问快10万倍,单机内存不够大
I/O量大:单个硬盘读写I/O太慢
挑战:
编程困难:并行性、同步语句
性能调优难:负载平衡、局部性(Cache)
容错难:传统容错方法不适用(锁步法)
大数据处理并行系统:
编程模型、容错能力、性能与成本
MapReduce:编程模型简单(Map&&Reduce),容错简单,成本低,性能较差
Spark:性能优化(内存计算),限制了编程模型(确定性的粗粒度操作),确保高效率的容错能力
2. 内存计算的需求
更复杂的多阶段任务、交互式查询(实时)
MapReduce局限性:表达能力有限,复杂任务需要迭代(需要将中间结果保存在硬盘上,大量的I/O操作),只能做离线分析
MapReduce中用文件传递函数,中间结果保存在硬盘上,如果能用内存保存中间结果?
可行性
内存是否足够大、性价比如何、放在内存里如何容错、内存里的数据如何高效表示
3. 传统内存抽象
如何抽象多台机器的内存?
--分布式共享内存
--分布式键-值存储
容错机制:
--副本/log(增加了网络的开销)
优缺点:
允许细粒度的操作,但是容错困难。
4. Spark
设计理念:注重效率与容错
RDD(Resilient Distributed Datasets):高效的容错方法
--基于数据集合