Spark设计实现π的计算

该博客介绍了如何利用Scala和Spark进行分布式估算圆周率。程序通过生成大量随机点,统计落入正方形内切圆的点数比例来逼近Pi。文章详细展示了程序设计,并提供了在本地和Yarn集群上提交Spark应用的命令示例。
摘要由CSDN通过智能技术生成


1 分布式估算圆周率

  1. 计算原理

假设正方形的面积S等于x²,而正方形的内切圆的面积C等于Pi×(x/2)²,因此圆面积与正方形面积之比C/S就为Pi/4,于是就有Pi=4×C/S。
可以利用计算机随机产生大量位于正方形内部的点,通过点的数量去近似表示面积。假设位于正方形中点的数量为Ps,落在圆内的点的数量为Pc,则随机点的数量趋近于无穷时,4×Pc/Ps将逼近于Pi。

在这里插入图片描述

2 程序设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.oldlu
import scala.math.random
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author oldlu
 * @date 2021/11/2
 * @version 1.0
 */
object SparkPi {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("spark Pi")
    val spark = new SparkContext(conf)
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = 100000 * slices
    val count = spark.parallelize(1 to n, slices).map { i =>
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x * x + y * y < 1) 1 else 0
    }.reduce(_ + _)
    println("Pi is roughly " + 4.0 * count / n)
    spark.stop()

  }
}

在这里插入图片描述
单击选择“Application”后,可在弹出对话框中设置参数,如图9-21所示,其中,“Name”设置为“sparkPi”;“Main class”设置为“com.csu.sparkPi”;“VM options”为“-Dspark.master=local -Dspark.app.name=sparkPi”;“Working directory”为系统自动设置的值;“Program arguments”不用填写;其余设置保持默认即可。

在这里插入图片描述
在这里插入图片描述

3 分布式运行

分布式运行是指在客户端(Client)以命令行的方式向Spark集群提交jar包的运行方式,所以需要将上述sparkPi程序编译成jar包(俗称打jar包)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 采用本地模式提交sparkAPP.jar

./spark-submit --master local --class com.oldlu.SparkPi /usr/local/sparkdemo/SparkPi.jar
在这里插入图片描述

3.2 采用Yarn-client或Yarn-cluster模式提交

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意,上述示例是作者计算机上的情形,读者看到的结果可能有一些差异。

读者也可以采用Yarn-client模式运行程序,这时只需要将提交命令中的“yarn-cluster”改为“yarn-client”即可,输出结果将直接显示在提交作业的终端中。

要正确执行上述命令,必须确保Spark集群中的Yarn已经启动。如果读者不能成功执行该命令,应首先检查一下系统是否启动了Yarn,如果没有,就需要设法启动它。例如,可以简单地通过启动Hadoop来启动Yarn,因为有的用户可能只安装了Hadoop自带的Yarn。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赵广陆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值