Spark-앱을 제출할 때 "구성에 마스터 URL을 설정해야합니다"오류
로컬 모드에서 문제없이 실행되는 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)
위의 코드 GroupEvolutionES
에서 메인 클래스입니다. 오류 메시지는 "구성에 마스터 URL을 설정해야합니다"라고 표시되지만 "--master"매개 변수를에 제공했습니다 spark-submit
.
이 문제를 해결하는 방법을 아는 사람이 있습니까?
Spark 버전 : 1.6.1
sparkContext 객체는 어디에 정의되어 있습니까? 주 함수 안에 있습니까?
나도 같은 문제에 직면했는데, 내가 한 실수는 주 함수 외부와 클래스 내부에서 sparkContext를 시작하는 것입니다.
주 기능 내에서 시작했을 때 제대로 작동했습니다.
TLDR :
.config("spark.master", "local")
spark 2.2.1의 spark.master 옵션 목록
로컬 모드에서 간단한 Spark SQL Java 프로그램을 실행하려고 시도한 후이 페이지에서 끝났습니다. 이를 위해 다음을 사용하여 spark.master를 설정할 수 있음을 알았습니다.
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.config("spark.master", "local")
.getOrCreate();
내 답변에 대한 업데이트 :
명확하게 말하면 이것은 프로덕션 환경에서 수행해야하는 작업이 아닙니다. 프로덕션 환경에서 spark.master는 $ SPARK_HOME / conf / spark-defaults.conf (cloudera 관리자가 배치 할 위치) 또는 제출시 명령 줄 중 하나에 지정해야합니다. 앱. (ex spark-submit --master yarn).
이런 방식으로 spark.master를 '로컬'로 지정하면 아래 설명에 표시된 것처럼 spark는 단일 jvm에서 실행을 시도합니다. 그런 다음 --deploy-mode 클러스터를 지정하려고하면 '클러스터 배포 모드가 마스터 "로컬"과 호환되지 않음'오류가 표시됩니다. 이는 spark.master = local을 설정하면 클러스터 모드에서 실행되고 있지 않음을 의미하기 때문입니다.
대신 프로덕션 앱의 경우 주 함수 (또는 주 함수에서 호출하는 함수) 내에서 다음을 사용하면됩니다.
SparkSession
.builder()
.appName("Java Spark SQL basic example")
.getOrCreate();
이것은 명령 줄 / 구성 파일에 지정된 구성을 사용합니다.
또한 이것에 대해서도 명확히하기 위해 : --master 및 "spark.master"는 정확히 동일한 매개 변수이며 다른 방식으로 지정됩니다. 위의 대답과 같이 코드에서 spark.master를 설정하면 --master 설정 시도가 무시되고 spark-defaults.conf의 값이 무시되므로 프로덕션에서는 수행하지 마십시오. 그래도 테스트에 적합합니다.
또한 이 답변을 참조하십시오 . spark.master에 대한 옵션 목록과 각 옵션이 실제로 수행하는 작업에 대한 링크 입니다.
spark 2.2.1의 spark.master 옵션 목록
교체 후 나를 위해 일했습니다.
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME");
와
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g");
stackoverflow의 다른 스레드에서이 솔루션을 찾았습니다.
"spark.master"의 기본값은 spark : // HOST : PORT이며 다음 코드는 HOST : PORT 에서 실행중인 독립 실행 형 클러스터에서 세션을 가져 오려고 시도 하고 HOST : PORT 값이 스파크 구성 파일.
SparkSession spark = SparkSession
.builder()
.appName("SomeAppName")
.getOrCreate();
" org.apache.spark.SparkException : 구성에 마스터 URL을 설정해야합니다. "는 HOST : PORT 가 스파크 구성 파일에 설정되어 있지 않음을 나타냅니다.
"HOST : PORT"의 값에 대해 신경 쓰지 않으려면 spark.master 를 로컬 로 설정 하십시오.
SparkSession spark = SparkSession
.builder()
.appName("SomeAppName")
.config("spark.master", "local")
.getOrCreate();
다음 은 마스터 URL을 spark.master에 전달할 수있는 형식 목록에 대한 링크입니다.
참조 : Spark Tutorial - Setup Spark Ecosystem
독립 실행 형 응용 프로그램을 실행하는 경우 SparkContext
대신 다음을 사용해야 합니다.SparkSession
val conf = new SparkConf().setAppName("Samples").setMaster("local")
val sc = new SparkContext(conf)
val textData = sc.textFile("sample.txt").cache()
애플리케이션의 스파크 컨텍스트는 스파크 마스터의 값을 어떻게 선택합니까?
SparkConf
SC를 만드는 동안 명시 적으로 제공합니다 .- 또는
System.getProperties
(SparkSubmit이 이전에--master
인수를 읽은 후 넣은 곳 )에서 선택합니다.
이제 SparkSubmit
드라이버 에서 실행됩니다. 귀하의 경우 spark-submit
스크립트를 실행하는 시스템입니다 . 그리고 이것은 아마도 당신에게도 예상대로 작동 할 것입니다.
그러나 게시 한 정보를 보면 실행자에게 전송되는 코드에서 스파크 컨텍스트를 만드는 것처럼 보이며 여기에 spark.master
사용할 수있는 시스템 속성 이 없으면 실패합니다. (그렇다면 실제로 그렇게해서는 안됩니다.)
GroupEvolutionES
코드 (특히 생성중인 위치) 를 게시 해 주시겠습니까 SparkContext(s)
?
교체 :
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME");
WITH
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g");
마술을했다.
나는 같은 문제가 있었다. 수정 전의 코드는 다음과 같다.
package com.asagaama
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
/**
* Created by asagaama on 16/02/2017.
*/
object Word {
def countWords(sc: SparkContext) = {
// Load our input data
val input = sc.textFile("/Users/Documents/spark/testscase/test/test.txt")
// Split it up into words
val words = input.flatMap(line => line.split(" "))
// Transform into pairs and count
val counts = words.map(word => (word, 1)).reduceByKey { case (x, y) => x + y }
// Save the word count back out to a text file, causing evaluation.
counts.saveAsTextFile("/Users/Documents/spark/testscase/test/result.txt")
}
def main(args: Array[String]) = {
val conf = new SparkConf().setAppName("wordCount")
val sc = new SparkContext(conf)
countWords(sc)
}
}
그리고 교체 후 :
val conf = new SparkConf().setAppName("wordCount")
와 함께 :
val conf = new SparkConf().setAppName("wordCount").setMaster("local[*]")
잘 작동했습니다!
var appName:String ="test"
val conf = new SparkConf().setAppName(appName).setMaster("local[*]").set("spark.executor.memory","1g");
val sc = SparkContext.getOrCreate(conf)
sc.setLogLevel("WARN")
이 시도
특성을 만들다
import org.apache.spark.sql.SparkSession
trait SparkSessionWrapper {
lazy val spark:SparkSession = {
SparkSession
.builder()
.getOrCreate()
}
}
그것을 확장
object Preprocess extends SparkSessionWrapper {
우리는 누락 setMaster ( "[*] 지역") 세트를. 추가하면 문제가 해결됩니다.
문제:
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
해결책:
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.master("local[*]")
.getOrCreate()
.setMaster("local")
아래와 같이 코드에 추가 하십시오.
val conf = new SparkConf().setAppName("Second").setMaster("local")
그것은 나를 위해 일했습니다! 행복한 코딩!
다음 코드를 사용하는 경우
val sc = new SparkContext(master, "WordCount", System.getenv("SPARK_HOME"))
Then replace with following lines
val jobName = "WordCount";
val conf = new SparkConf().setAppName(jobName);
val sc = new SparkContext(conf)
In Spark 2.0 you can use following code
val spark = SparkSession
.builder()
.appName("Spark SQL basic example")
.config("spark.some.config.option", "some-value")
.master("local[*]")// need to add
.getOrCreate()
You need to add .master("local[*]") if runing local here * means all node , you can say insted of 8 1,2 etc
You need to set Master URL if on cluster
If you don't provide Spark configuration in JavaSparkContext then you get this error. That is: JavaSparkContext sc = new JavaSparkContext();
Solution: Provide JavaSparkContext sc = new JavaSparkContext(conf);
'program tip' 카테고리의 다른 글
추천하는 Javascript 템플릿 엔진은 무엇입니까? (0) | 2020.10.12 |
---|---|
포인터 주소와 포인터 값을 증가시키는 방법은 무엇입니까? (0) | 2020.10.12 |
쉼표로 구분 된 문자열에서 값을 찾는 MySQL 쿼리 (0) | 2020.10.11 |
다른 해상도 지원 안드로이드 (0) | 2020.10.11 |
파일에서 단일 속성 (예 : ReadOnly)을 제거하는 방법은 무엇입니까? (0) | 2020.10.11 |