SparkPi 超过 1 个切片时运行缓慢

Ahs*_*jaz 5 scala distributed-computing apache-spark

Spark 相对较新,并尝试在独立的 12 核三机器集群上运行 SparkPi 示例。我无法理解的是,与使用 12 个切片相比,使用单个切片运行此示例可以提供更好的性能。当我使用并行函数时也是如此。随着添加每个切片,时间几乎呈线性缩放。如果我做错了什么,请告诉我。代码片段如下:

val spark = new SparkContext("spark://telecom:7077", "SparkPi",
  System.getenv("SPARK_HOME"), List("target/scala-2.10/sparkpii_2.10-1.0.jar"))
val slices = 1
val n = 10000000 * 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()
Run Code Online (Sandbox Code Playgroud)

更新:问题在于随机函数,因为它是同步方法,所以无法扩展到多个核心。

Ahs*_*jaz 2

Sparkpi 示例中使用的随机函数是同步方法,无法扩展到多个核心。这是一个足够简单的示例,可以在集群上部署,但不要用它来检查 Spark 的性能和可扩展性。