Spark设计实现π的计算


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。

posted @ 2021-11-04 21:45  赵广陆  阅读(193)  评论(0编辑  收藏  举报