【发布时间】:2017-06-07 19:46:24
【问题描述】:
我已经启动了一个单节点独立 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 的理解正确,这是因为集群找不到代码。那么我如何提供代码来激发火花呢?在这个测试中我没有运行 HDFS 或任何东西,但它都在一个盒子上,所以我希望 SparkContext 将当前目录传递给 spark,但它显然没有。
谁能指出正确的设置方法?
【问题讨论】:
-
我实际上尝试了 sc.addJar(SparkContext.jarOfClass(this.getClass).get) ——但这当然失败了,因为没有 JAR .. IntelliJ 没有创建一个..跨度>
-
sbt-assembly 确实可以生成一个我可以提交的 JAR,但我仍然找不到让 intelliJ 中的“运行”功能运行的方法..
-
在 IntelliJ 中为您的项目创建 jar 工件配置,然后打开您的运行配置并将“构建工件”添加到“启动前”部分。
sc.addJar应该包含您的工件的完整路径。显然这是开发设置,不适合生产使用。 -
所以也许我只是个盲人,但我看不到创建真正遵循 sbt-assembly 设置的构建工件的方法(例如,不包括 spark 的东西)?
标签: scala intellij-idea apache-spark