大数据运算系统(一)

1 .MapReduce/Hadoop 简介

  1. MapReduce是目前云计算中最广泛使用的计算模型,Hadoop是MapReduce的一个开源实现

  2. 解决思路:1. 程序员写串行程序 2. 由系统完成并行分布式地执行

  3. 程序员保证串行程序的正确性:1. 编程序时不需要思考并行的问题 2. 调试时只需要保证串行执行正确

  4. 系统负责并行分布执行的正确性和效率

  5. 缺点:1. 直接进行并行分布式编程,可以完成各种各样丰富的功能 2. 而一个编程模型实际上是限定了程序的功能类型

  6. MapReduce:Map(ik, iv) -> {<mk, mv>},Reduce(mk, {mv}) -> {<ok, ov>}

  7. Map 函数在这里插入图片描述

  8. Shuffle (由系统完成):在这里插入图片描述

    • Shuffle = group by mk
    • 对于所有的map函数的输出,进行group by
    • 将相同mk的所有mv都一起提供给Reduce
  9. Reduce 函数:在这里插入图片描述

  10. Map‐shuffle‐Reduceword count 举例:

    • 程序员编制串行的Map函数和Reduce函数

    • 系统完成shuffle功能

    • 在这里插入图片描述

    • 在这里插入图片描述

  11. MR: Fault Tolerance(容错):

    • 定期发送,向JobTracker汇报进度
    • JobTracker可以及时发现不响应的机器或速度非常慢的机器,这些异常机器被称作Stragglers
  12. Split:一个HDFS数据块;Split 的个数可能多于Mappers个数:1. 每个split对应一个Map Task 2. 每个Mapper可能需要处理多个Task 。优化:就近处理 : JobTracker尽量Mapper处理本机data node存储的split,从而减少网络数据传输的开销

  13. 对于一个split,Mapper:1. 对每个<ik, iv>调用一次Map函数生成<mk,mv> 2. 对每个mk调用Partitioner计算其对应的Reduce task id 3. 属于同一个Reduce task的<mk,mv>存储于同一个文件,放在本地硬盘上 4. 每个文件按照mk自小到大排序

  14. Partitioner: 1. Hadoop默认使用HashPartitioner Reduce task id = hash(mk) % ReduceTaskNumber 2. 程序员可以编写自己的Partitioner

  15. MR运行:Shuffle:1. Reducer从每个Map task传输中间结果文件 2. 每个文件本身已经排好序了 3. 对多个结果文件进行归并,从而实现group by

  16. MR运行:Reduce:1. 对于每个<mk,{mv}>调用一次Reduce函数 2. 产生的<ok, ov>写入输出文件 3. OutputFormat 4. 每个Reduce task 产生一个单独的文件

  17. Combiner:1. Combiner(mk, {mv}) -> <mk, mv’> 2. 传输很多<mk, 1>似乎有些浪费 3. 如果在Mapper一侧,一个mk出现多次,完全可以进行本地的累计,这样只需要传输一个<mk, 本地次数> 4. 这可以用Combiner实现

2. 图算法举例: PageRank

  1. 初始化:1. 所有的顶点的PageRank为 1 N \frac{1}{N} N1 ,迭代:用上述公式迭代直至收敛

在这里插入图片描述

  1. 问题: N 非常大时,数据精度可能不够?:1. 初始化:所有的顶点的PageRank为1 2. 迭代:用上述公式迭代直至收敛

在这里插入图片描述

  1. 图计算模型:

    • 运算分成多个超步,超步间全局同步
    • 超步内,并行执行每个顶点
    • 顶点算法通常步骤:1. 接收上个超步发出的in‐neighbor的消息 2. 计算当前顶点的值 3. 向out‐neighbor发消息
  2. BSP 模型:1. 全部计算分成多个超步(SuperStep) 2. 超步之间进行全局同步 3. 超步内部全部并行,对多个运算单元进行计算,每个超步内部,所有运算,都无依赖地分布式运行 4. 相邻的超步之间存在依赖关系,上一个超步的运算产生下一个超步的输入

在这里插入图片描述

  1. 基于顶点的编程模型:1. 每个顶点有一个value 2. 顶点为中心的运算,程序员可以实现一个Compute函数,在每个超步中,同步图系统对每个顶点调用一次Compute,Compute通常接收消息,计算,然后发送消息

在这里插入图片描述

  1. 图运算如何结束?:顶点的两种状态:1. 活跃态Active:图系统只对活跃顶点调用compute 2. 非活跃态Inactive:compute调用Volt to halt时,顶点变为非活跃态

  2. 同步图运算系统小结:1. **运算在内存中完成 **2. 基于BSP模型实现同步图运算 3. 基于顶点的编程模型 4. 容错依靠定期地把图状态写入硬盘生成检查点,在一个超步开始时,master可以要求所有的worker,都进行检查点操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程哥哥吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值