[英]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.