为什么并行计算?
- 计算量大
- 单进程算得不够快,多CPU算
- 内存需求大
- 单机内存不够大
- 内存随机访问比硬盘随机访问快100,000倍
- I/O 量大
- 单个硬盘读写太慢,多个硬盘读写
并行计算的挑战
- 编程困难
- 并行性识别与表达,难写
- 同步语句,难写对
- 性能调优难,难写快 (并行计算目标就是提升性能,性能调优难)
-负载平衡- 局部性 (高速缓存cache,使用cache可以快10倍左右)
- 容错难
并行计算中的局部性
矩阵相乘,按列访问会造成cache失效
分块算法,得到更高的局部性
高可用性
大数据处理系统通常是由大量不可靠服务器组成的,如果处理1个10天的大数据处理任务时在第8天机器坏掉怎么办?
重新计算不一定能解决问题
传统的容错方法不适用
- 锁步法(性能会有较大影响),多版本编程(多个人来编程,对比结果,软件容错)
检查点设置与恢复(保存程序状态,从保存状态位置继续执行,IO量大)
大数据处理并行系统
内存计算需求
- 用户只需要编写串行程序
- 自动并行化和分布式执行
- 自动容错
- 自动负载平衡
用户对系统提出了更高的要求 - 更复杂的多阶段任务
- 交互式查询
Map Reduce 的局限性 - 表达能力有限
- 只有Map 和Reduce两种操作
- 复杂任务通常需要迭代的 MapReduce
- 需要将中间结构保存在硬盘上
- 大量I/O操作造成性能急剧下降
- 引入的I/O操作多,只能做离线分析,很难支持数据的交互式查询