복붙노트

[SCALA] 스파크 - 응용 프로그램을 제출할 때 오류 "A 마스터 URL이 구성에서 설정해야합니다"

SCALA

스파크 - 응용 프로그램을 제출할 때 오류 "A 마스터 URL이 구성에서 설정해야합니다"

스파크 클러스터에 제출할 때 나는 로컬 모드에서 문제없이 실행되는 스파크 응용 프로그램을 가지고 있지만, 몇 가지 문제가있다.

다음과 같이 오류 MSG은 다음과 같습니다 :

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 메인 클래스입니다. 오류 MSG는 "A 마스터 URL이 구성에서 설정해야합니다",하지만 난 스파크 제출에 "--master"매개 변수를 제공 한 말한다.

사람은 누가이 문제를 해결하는 방법을 알고?

스파크 버전 : 1.6.1

해결법

  1. ==============================

    1.sparkContext 객체가 정의되는 경우,이 메인 함수 안에?

    sparkContext 객체가 정의되는 경우,이 메인 함수 안에?

    나도 내가했던 실수는 내가 주요 기능을 외부와 클래스 내부의 sparkContext을 시작했다, 같은 문제에 직면했다.

    내가 메인 함수 내부를 시작하면 벌금을했다.

  2. ==============================

    2.TLDR :

    TLDR :

    .config("spark.master", "local")
    

    스파크 2.2.1 spark.master에 대한 옵션의 목록

    나는 로컬 모드에서 간단한 스파크 SQL 자바 프로그램을 실행하려고 후에이 페이지에 끝났다. 이를 위해, 나는 내가 사용 spark.master을 설정할 수 있다는 것을 발견 :

    SparkSession spark = SparkSession
    .builder()
    .appName("Java Spark SQL basic example")
    .config("spark.master", "local")
    .getOrCreate();
    

    내 대답에 대한 업데이트 :

    명확하게하기 위해이 프로덕션 환경에서해야 할 일이 아니다. 프로덕션 환경에서는 spark.master는 몇 가지 다른 장소 중 하나를 지정해야합니다 : 중 $ SPARK_HOME / conf의 / 불꽃은 defaults.conf (이 클라우 데라 매니저가 넣어 곳이다), 또는 제출 명령 줄에서 응용 프로그램. (예 --master 실을 스파크 제출).

    이 방법으로 '현지'로 spark.master 지정하는 경우, 스파크 아래의 댓글로 표시된 바와 같이, 하나의 JVM에서 실행하려고합니다. 그런 다음 클러스터 모드 --deploy 지정하려고하면 오류 '클러스터 배포 모드는 마스터와 호환 "로컬"아니다'얻을 것이다. spark.master를 설정하면 사용자가 클러스터 모드에서 실행하지 않는 지역 수단을 = 때문이다.

    대신, 생산 응용 프로그램에 대한, 메인 함수 내 (또는 메인 함수에 의해 호출되는 함수에), 당신은 단순히 사용해야합니다 :

    SparkSession
    .builder()
    .appName("Java Spark SQL basic example")
    .getOrCreate();
    

    이 설정 파일에서 / 명령 행에 지정된 구성을 사용합니다.

    --master와 "spark.master는"단지 다른 방법으로 지정된 동일한 매개 변수이다 : 또한, 너무 이것에 분명합니다. 위의 내 대답에 같은 코드에서 spark.master 설정 --master 설정하는 시도를 무시하며, 불꽃은 defaults.conf에서 값을 대체 할 것이다, 그래서 생산을하지 않습니다. 그러나 시험에 대한 가장 큰.

    또한,이 대답을 참조하십시오. 이는 spark.master 및 각 하나가 실제로 수행에 대한 옵션의 목록에 대한 링크.

    스파크 2.2.1 spark.master에 대한 옵션의 목록

  3. ==============================

    3.교체 한 후 나를 위해 일했다

    교체 한 후 나를 위해 일했다

    SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME");
    

    SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g");
    

    유래에 다른 스레드에서이 솔루션을 발견.

  4. ==============================

    4.호스트에서 실행되는 독립 실행 형 클러스터에서 세션 얻기 위해 포트를, 다음과 같은 코드를 시도 : // HOST : "spark.master"의 기본값은 불꽃이다 PORT를하고 HOST 기대 : PORT 값이있는 것으로 설정 파일을 촉발.

    호스트에서 실행되는 독립 실행 형 클러스터에서 세션 얻기 위해 포트를, 다음과 같은 코드를 시도 : // HOST : "spark.master"의 기본값은 불꽃이다 PORT를하고 HOST 기대 : PORT 값이있는 것으로 설정 파일을 촉발.

    SparkSession spark = SparkSession
        .builder()
        .appName("SomeAppName")
        .getOrCreate();
    

    PORT 스파크 구성 파일에 설정되지 않은 : HOST가 있음 상태 : "org.apache.spark.SparkException 마스터 URL이 구성에서 설정해야합니다."

    ": PORT HOST"지역으로 설정 spark.master의 가치에 대해 걱정하지 않으려면

    SparkSession spark = SparkSession
        .builder()
        .appName("SomeAppName")
        .config("spark.master", "local")
        .getOrCreate();
    

    여기에 마스터 URL이 spark.master로 전달 될 수있는 형식의 목록에 대한 링크입니다

    참조 : 불꽃 튜토리얼 - 설정 스파크 생태계

  5. ==============================

    5.그런 다음 독립 실행 형 응용 프로그램을 실행하는 경우는 SparkContext 대신 SparkSession을 사용해야합니다

    그런 다음 독립 실행 형 응용 프로그램을 실행하는 경우는 SparkContext 대신 SparkSession을 사용해야합니다

    val conf = new SparkConf().setAppName("Samples").setMaster("local")
    val sc = new SparkContext(conf)
    val textData = sc.textFile("sample.txt").cache()
    
  6. ==============================

    6.어떻게 응용 프로그램에서 스파크 컨텍스트 스파크 마스터에 대한 값을 선택 하는가?

    어떻게 응용 프로그램에서 스파크 컨텍스트 스파크 마스터에 대한 값을 선택 하는가?

    귀하의 경우는 스파크 제출 스크립트를 실행하는 곳에서 기계 - 이제 SparkSubmit 드라이버에서 실행됩니다. 그리고 이것은 아마 당신도 기대하고있다.

    그러나, 정보에서 당신이 실행기로 전송되는 코드에서 스파크 컨텍스트를 만드는 것 같습니다 게시 한 - 거기 가능한 spark.master 시스템 속성이 없음을 감안할 때, 그것은 실패합니다. (이러한 경우 그리고 당신은 정말 그렇게 할 수 없습니다.)

    당신은 (당신이 SparkContext (들)을 만들 특히)에 GroupEvolutionES 코드를 게시하시기 바랍니다 수 있습니다.

  7. ==============================

    7.교체 :

    교체 :

    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");
    

    마법을했다.

  8. ==============================

    8.나는 여기에 수정 전에 내 코드 같은 문제가 있었다 :

    나는 여기에 수정 전에 내 코드 같은 문제가 있었다 :

    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[*]")
    

    그것은 좋은 일했다!

  9. ==============================

    9.

    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")
    
  10. ==============================

    10.이 시도

    이 시도

    메이크업 라인

    import org.apache.spark.sql.SparkSession
    trait SparkSessionWrapper {
       lazy val spark:SparkSession = {
          SparkSession
            .builder()
            .getOrCreate()
        }
    }
    

    그것을 확장

    object Preprocess extends SparkSessionWrapper {
    
  11. ==============================

    11.우리는 세트에 setMaster ( "[*] 지역")을 누락되었습니다. 우리가 첨가되면 문제가 해결하세요.

    우리는 세트에 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()
    
  12. ==============================

    12.아래 그림과 같이 당신의 코드에 .setMaster ( "지역")를 추가합니다 :

    아래 그림과 같이 당신의 코드에 .setMaster ( "지역")를 추가합니다 :

    val conf = new SparkConf().setAppName("Second").setMaster("local") 
    

    그것은 나를 위해 일한! 코딩 해피!

  13. ==============================

    13.당신은 다음과 같은 코드를 사용하는 경우

    당신은 다음과 같은 코드를 사용하는 경우

     val sc = new SparkContext(master, "WordCount", System.getenv("SPARK_HOME"))
    

    그런 다음 줄로 교체

      val jobName = "WordCount";
      val conf = new SparkConf().setAppName(jobName);
      val sc = new SparkContext(conf)
    

    스파크 2.0에서는 다음과 같은 코드를 사용할 수 있습니다

    val spark = SparkSession
      .builder()
      .appName("Spark SQL basic example")
      .config("spark.some.config.option", "some-value")
      .master("local[*]")// need to add
      .getOrCreate()
    

    당신은 * 수단을 지역 여기에 모든 노드를 실행하는 경우, 당신은 대신 8 1, 2 등을 말할 수있다 ( "지역 [*]") .master 추가해야

    당신은 마스터 URL 클러스터의 경우를 설정해야

  14. ==============================

    14.당신이 JavaSparkContext에서 스파크 구성을 제공하지 않는 경우이 오류가 발생합니다. 그건: JavaSparkContext 캐롤라이나 = 새로운 JavaSparkContext ();

    당신이 JavaSparkContext에서 스파크 구성을 제공하지 않는 경우이 오류가 발생합니다. 그건: JavaSparkContext 캐롤라이나 = 새로운 JavaSparkContext ();

    해결 방법 : JavaSparkContext 사우스 캐롤라이나 제공 = 새로운 JavaSparkContext (conf의);

  15. from https://stackoverflow.com/questions/38008330/spark-error-a-master-url-must-be-set-in-your-configuration-when-submitting-a by cc-by-sa and MIT license