圆周率π的近似计算(三)-MapReduce分布式计算入门

MapReduce 分布式计算入门

一个胖子

在学 hadoop 的我们最先接触的分布式框架就是MapReduce框架,本意就是通过使用MapReduce 框架进行实现圆周率 π 的分布式计算的小demo;

MapReduce 的处理流程
  1. Mapper 阶段执行流程

    • 第一阶段 将输入目录下的文件按照一定的标准进行逻辑切片,形成片规划.默认的切片规则是按照 文件块 切片.每片都有一个 MapTask 进行处理.(getSplits)

    • 第二阶段 是对切片中的数据按照一定的规则解析成 key,value 元组.默认规则是把每一行文本内容解析成键值对. key 是每一行的起始位置,value 是本行的文本内容.(TextInputFormat)

    • 第三阶段 是调用Mapper 类中的Map 方法. 上阶段每解析出来一个 k,v 调用一次 map 方法.输出同样是键值对,但是可以有多个输出.

    • 第四阶段 是按照一定的规则对第三阶段输出的键值对进行分区。 默认是只有一个区。 分区的数量就是 Reducer 任务运行的数量。默认只有一个Reducer 任务。

    • 第五阶段是对每个分区中的键值对进行排序。如果有第六阶段,那么进入第六阶段;如果没有,直接输出到文件中。

    • 第六阶段是对数据进行局部聚合处理,也就是 combiner 处理。 键相等的键值对会调用一次 reduce 方法。经过这一阶段,数据量会减少。 本阶段默认是没有的。

  2. Reduce 阶段执行流程

    • 第一阶段是 Reducer 任务会主动从 Mapper 任务复制其输出的键值对。Mapper 任务可能会有很多,因此 Reducer 会复制多个 Mapper 的输出。

    • 第二阶段是把复制到 Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。

    • 第三阶段是对排序后的键值对调用 reduce 方法。 键相等的键值对调用一次reduce 方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到 HDFS 文件中。


进行圆周率 π 的分布式计算

从分 MapReduce 的执行流程看出,分布式框架已经帮我们实现了任务的分发,因此我们的关注点就基本可以不用考虑关于分布式方面的任务,我们主要需要关注的就是 map 方法的构建
,和 reduce 方法的构建.

数学模型

进行分布式计算的任务有个先决条件,那就是可以进行并行计算,就是各 map 之间相互独立,无依赖关系.

因此,我们在建立数学模型时最好是一个重复计算无相互关联的模型,而 蒙特卡洛 的模型恰好符合这种特点,因此我们依次构建模型.

在上篇文章中,我们采用的通过面积比的方式来近似求解 圆周率 π ,即正方形面积为 1 ,扇形面积为 π/4,则正方形和扇形的面积比为 π/4,求得这个面积比,我们就能得到最后的 π;

蒙特卡罗方法,就是将面积比转化为概率问题求解,就是在正方形中取一随机点进行重复试验,统计出这个点落在扇形中的概率.用这个概率去描述扇形和正方形的面积比,求得概率即可近似求出圆周率 π 的大小;

随机试验的优点是,每次试验相互独立互不影响,缺点随机性大,数据不稳定,一般只用做近似求解.

综上,我们可以将 求解圆周率的任务 转化为随机试验的统计工作.

实现方法
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值