簡體   English   中英

使用yarn-cluster模式初始化SparkContext時出錯

[英]Error initializing SparkContext using yarn-cluster mode

我正在運行一個簡單的代碼,以在hdfs上創建文件並將其寫入內容並關閉該文件。 我可以在本地模式以及yarn-client模式下運行此代碼。 但是,當我用yarn-cluster模式運行相同的代碼時,我得到的Error initializing 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()
 }
}

當我使用本地模式和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

我已經看到了這個以及大多數相關鏈接。 但是我所期望的卻有所不同。 如果您有正確的鏈接,請分享,或者您知道如何解決此問題,請告訴我。

謝謝

我也遇到了這個問題,並嘗試使用以下方法解決該問題:嘗試在程序的main()方法內創建“ spark context”(與sql context相同),如下所示:

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 <其他jars>

錯誤消息指出您必須使用spark-submit來啟動應用程序。 您是否正在通過提交火花啟動它?

嘗試代替

val conf= new SparkConf()

var sparkContext =new SparkContext("yarn-cluster","testHdfsWrite",conf)

使用

val conf= new SparkConf()
      .setAppName("testHdfsWrite")
      .setMaster("yarn-cluster")

var sparkContext = new SparkContext(conf)

如果要提交應用程序(尤其是在集群模式下),則應提供模式信息以進行Spark提交腳本。 因此,只需使用以下參數即可啟動您的應用程序:

spark-submit --master yarn --deploy-mode cluster test_2.10-1.0.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM