Shu*_*ang 79 scala apache-spark
我有一个Spark应用程序在本地模式下运行没有问题,但在提交到Spark集群时有一些问题.
错误消息如下:
16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 2.0 in stage 0.0 (TID 2, cluster-node-02): java.lang.ExceptionInInitializerError
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
at GroupEvolutionES$.<init>(GroupEvolutionES.scala:37)
at GroupEvolutionES$.<clinit>(GroupEvolutionES.scala)
... 14 more
16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 5.0 in stage 0.0 (TID 5, cluster-node-02): java.lang.NoClassDefFoundError: Could not initialize class GroupEvolutionES$
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,GroupEvolutionES是主类.错误消息msg说"必须在配置中设置主URL",但我已经提供了"--master"参数spark-submit.
有谁知道如何解决这个问题?
Spark版本:1.6.1
Jac*_*son 105
在尝试以本地模式运行简单的Spark SQL java程序后,我最终在此页面上.为此,我发现我可以使用以下命令设置spark.master:
.config("spark.master", "local")
Run Code Online (Sandbox Code Playgroud)
我的回答更新:
需要说明的是,这不是您在生产环境中应该做的事情.在生产环境中,应该在其他几个地方指定spark.master:在$ SPARK_HOME/conf/spark-defaults.conf中(这是cloudera管理器将放置它的地方),或者在提交时在命令行上该应用程序.(ex spark-submit --master yarn).
如果您以这种方式将spark.master指定为"local",则spark将尝试在单个jvm中运行,如下面的注释所示.如果您随后尝试指定--deploy-mode cluster,则会收到错误"群集部署模式与主"本地"不兼容.这是因为设置spark.master = local意味着您不是在群集模式下运行.
相反,对于生产应用程序,在主函数内(或在主函数调用的函数中),您应该只使用:
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.config("spark.master", "local")
.getOrCreate();
Run Code Online (Sandbox Code Playgroud)
这将使用命令行/在配置文件中指定的配置.
另外,要清楚这一点: - master和"spark.master"是完全相同的参数,只是以不同的方式指定.在代码中设置spark.master,就像我上面的回答一样,将覆盖设置--master的尝试,并将覆盖spark-defaults.conf中的值,因此不要在生产中执行.它非常适合测试.
另外,看到这个答案.它链接到spark.master的选项列表以及每个实际执行的操作.
小智 55
更换后为我工作
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME");
Run Code Online (Sandbox Code Playgroud)
同
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g");
Run Code Online (Sandbox Code Playgroud)
在stackoverflow上的其他一些线程上找到此解决方案.
Daz*_*ler 37
sparkContext对象在哪里定义,它是在main函数里面吗?
我也面临同样的问题,我做的错误是我在main函数和类内部启动了sparkContext.
当我在main函数中启动它时,它运行正常.
Mal*_*n M 26
"spark.master"的默认值是spark:// HOST:PORT,以下代码尝试从在HOST:PORT上运行的独立集群中获取会话,并期望HOST:PORT值位于spark配置文件.
SparkSession spark = SparkSession
.builder()
.appName("SomeAppName")
.getOrCreate();
Run Code Online (Sandbox Code Playgroud)
" org.apache.spark.SparkException:必须在配置中设置主URL "说明火花配置文件中未设置HOST:PORT.
为了不打扰"HOST:PORT"的值,请将spark.master设置为local
SparkSession spark = SparkSession
.builder()
.appName("SomeAppName")
.config("spark.master", "local")
.getOrCreate();
Run Code Online (Sandbox Code Playgroud)
以下是可以将主URL传递给spark.master的格式列表的链接
参考:Spark教程 - 设置Spark生态系统
小智 9
只需添加.setMaster("local")到您的代码中,如下所示:
val conf = new SparkConf().setAppName("Second").setMaster("local")
Run Code Online (Sandbox Code Playgroud)
它对我有用!快乐编码!
如果您正在运行一个独立的应用程序,那么您必须使用SparkContext而不是SparkSession
val conf = new SparkConf().setAppName("Samples").setMaster("local")
val sc = new SparkContext(conf)
val textData = sc.textFile("sample.txt").cache()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76437 次 |
| 最近记录: |