scala - 使用 yarn-cluster 模式初始化 SparkContext 时出错

标签 scala hadoop apache-spark hadoop-yarn

我正在运行一个简单的代码来在 hdfs 上创建一个文件并将内容写入其中并关闭该文件。我能够在本地模式和 yarn-client 模式下运行这段代码。但是当我用 yarn-cluster 模式运行相同的代码时,我得到了 作为 初始化 SparkContext 时出错

我使用的 Scala 代码如下:

object Main {
def main(args: Array[String]): Unit = {
val conf= new SparkConf()

var sparkContext =new SparkContext("yarn-cluster","testHdfsWrite",conf)
val uri = URI.create (hdfslocation); // hdfs location of my home directory
val confi = new Configuration();
val file = FileSystem.get(uri, confi);
val os = file.create(new Path(uri))
os.write("Hello World".getBytes("UTF-8"))
os.close()
 }
}

当我使用local 模式和yarn-client 模式时,这段代码成功地创建了一个文件并向其中写入内容“Hello World”。但是当我使用 yarn-cluster 模式时,我遇到了以下异常。

 ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit.
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:411)
        at org.apache.spark.SparkContext.<init>(SparkContext.scala:147)
        at Main$.main(Main.scala:17)
        at Main.main(Main.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
INFO SparkContext: Successfully stopped SparkContext

我已经看到了this以及大部分相关链接。但这与我的期望不同。如果您有正确的链接,请分享,或者如果您知道如何解决此问题,请告诉我。

谢谢

最佳答案

我也遇到过这个问题,并尝试使用以下方法解决它: 试试这个,在程序的 main() 方法中创建“spark 上下文”(对于 sql 上下文也是如此):

def main(args: Array[String]): Unit = {

  val conf = new SparkConf().setAppName("Simple Application")

  val sc = new SparkContext(conf)

  val sqlContext = new SQLContext(sc)

} 并在下面导入:

导入 org.apache.spark.SparkConf

导入 org.apache.spark.SparkContext

在集群模式下使用以下命令运行您的代码并且不要在您的代码中设置“yarn-cluster”,在使用以下集群提交作业时提供它:

spark-submit --master yarn-cluster --packages <包名> --class com.Test.ExampleTest <程序jar的hadoop路径> --jars <其他jar>/p>

关于scala - 使用 yarn-cluster 模式初始化 SparkContext 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888556/

相关文章:

scala - 如何为 akka-camel 端点启用 JMX 监控

scala - UUID 路径可绑定(bind) - Play Framework

scala - Scala 中右箭头的含义

apache-spark - 将数据湖与已删除的记录同步

apache-spark - application_的应用报告(YARN上状态: ACCEPTED) never ends for Spark Submit (with Spark 1. 2.0)

scala - Scala的shebang行是什么,它不会破坏mimetype?

hadoop - Hadoop 中的复制因子

hadoop - 在Hadoop中, reducer 在随机播放阶段在哪里复制其输入

apache-spark - 从 google pubsub 到 spark streaming 的数据摄取很慢

apache-spark - 阅读最新的 spark kafka 流媒体