我在mapr群集上安装了全新的spark 1.2.1,在测试它时,我发现它在本地模式下工作良好,但在毛线模式下,似乎无法访问变量,即使广播也是如此。确切地说,以下测试代码
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object JustSpark extends App {
val conf = new org.apache.spark.SparkConf().setAppName("SimpleApplication")
val sc = new SparkContext(conf)
val a = List(1,3,4,5,6)
val b = List("a","b","c")
val bBC= sc.broadcast(b)
val data = sc.parallelize(a)
val transform = data map ( t => { "hi" })
transform.take(3) foreach (println _)
val transformx2 = data map ( t => { bBC.value.size })
transformx2.take(3) foreach (println _)
//val transform2 = data map ( t => { b.size })
//transform2.take(3) foreach (println _)
}
在本地模式下工作,但在 yarn 上失败。更准确地说,
transform2
和transformx2
这两种方法均会失败,并且如果--master local[8]
都可以使用。我正在用sbt进行编译,并使用提交工具进行发送
/opt/mapr/spark/spark-1.2.1/bin/spark-submit --class JustSpark --master yarn target/scala-2.10/simulator_2.10-1.0.jar
知道发生了什么吗?失败消息仅声称它应在访问变量的地方有一个Java空指针异常。还有其他方法可以在RDD映射中传递变量吗?
最佳答案
我将做出一个很好的猜测:这是因为您使用的是App
。有关详细信息,请参见https://issues.apache.org/jira/browse/SPARK-4170。改写main()
方法。
关于hadoop - yarn 模式下的Spark RDD映射不允许访问变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29049677/