gpt4 book ai didi

scala - 如何从代码向 Spark 提交作业?

转载 作者:行者123 更新时间:2023-12-01 02:03:10 31 4
gpt4 key购买 nike

我已经启动了一个单节点独立 Spark 集群,并确认我的构建适用于 ./bin/run-example SparkPi 10。然后我用 scala 写了一个非常简单的测试项目;

import org.apache.spark.{SparkConf, SparkContext}

object Main {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf()
val sc = new SparkContext("spark://UbuntuVM:7077", "Simple Application")

val count = sc.parallelize(1 to 100).map{i =>
val x = Math.random()
val y = Math.random()
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / 100)
}
}

我正在我的 IDE (IntelliJ) 中运行它。它成功连接到集群,我看到它提交作业,但它们都抛出错误;

INFO TaskSetManager: Lost task 1.3 in stage 0.0 (TID 7) on executor 192.168.1.233: java.lang.ClassNotFoundException (Main$$anonfun$1) [duplicate 7]

如果我对spark的理解没有错的话,这是因为集群找不到代码。那么如何将代码提供给 spark 呢?在这个测试中我没有运行 HDFS 或任何东西,但它都在一个盒子上,所以我希望 SparkContext 将当前目录传递给 spark,但它显然没有。

谁能指出正确的设置方法?

最佳答案

如果您想在本地测试您的 Spark 程序,您甚至不需要启动单节点独立 Spark。只需像这样将您的主 url 设置为 local[*]

val sc = new SparkContext("local[*]", "Simple Application", sparkConf)

然后在 sbt 中,键入 > run 来运行您的程序(这应该与从 IntelliJ 运行相同,但我以前使用 sbt 从终端运行程序)。

由于您可能不想多次在 local[*]spark://... 之间更改代码中的主 url,因此可以将它们留空

val sc = new SparkContext(new SparkConf())

并在运行时设置你的java属性,比如在build.sbt中,你可以添加

javaOptions := Seq("-Dspark.master=local[*]", "-Dspark.app.name=my-app")

并在 sbt 中使用 run 运行它。


为了获得更全面的本地模式体验,您可能需要在 build.sbt

中添加以下行
run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))
runMain in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))
fork := true
javaOptions := Seq("-Dspark.master=local[*]", s"-Dspark.app.name=my-app")
outputStrategy := Some(StdoutOutput)

我们已经创建了一个 sbt 插件,可以为您添加这些设置,它还可以帮助您在 aws ec2 等云系统上部署一个独立的 Spark 集群,看看 spark-deployer如果你有兴趣。

关于scala - 如何从代码向 Spark 提交作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081332/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com