web-dev-qa-db-ja.com

スパーク - アプリを送信するときにエラーが発生する

ローカルモードで問題なく動作する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を設定しなければならない"と書かれていますが、私はspark-submitに "--master"パラメータを与えました。

この問題を解決する方法を知っている人は誰ですか?

スパークバージョン:1.6.1

72
Shuai Zhang

SparkContextオブジェクトはどこで定義されていますか?それはmain関数の中にありますか?

私も同じ問題に直面しました、私がした間違いは私がメイン関数の外側とクラスの内側のsparkContextを始めたことでした。

私がmain関数の中でそれを始めたとき、それはうまくいきました。

35
Dazzler

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は他の2つの場所のいずれかで指定する必要があります。$ SPARK_HOME/conf/spark-defaults.conf(これはclouderaマネージャが置く場所です)、または送信時にコマンドラインで指定する必要があります。アプリ。 (ex spark-submit - マスターヤーン).

この方法でspark.masterを 'local'に指定すると、下記のコメントに示すように、sparkは単一のjvmで実行しようとします。その後、--deploy-mode clusterを指定しようとすると、「クラスターのデプロイモードはマスターの「ローカル」と互換性がありません」というエラーが表示されます。これは、spark.master = localを設定すると、クラスタモードで実行していないことになるためです。

代わりに、プロダクションアプリの場合は、メイン関数内(またはメイン関数によって呼び出される関数内)で、単に使用する必要があります。

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

これはコマンドラインで/ configファイルで指定された設定を使用します。

また、これも明確にするために、--masterと "spark.master"はまったく同じパラメータで、異なる方法で指定されています。上記の私の答えのように、コードでspark.masterを設定すると、--masterを設定しようとする試みが上書きされ、spark-defaults.confの値が上書きされるので、本番では行わないでください。テストには最適です。

また、 この答え も参照してください。これは spark.masterのオプション一覧 にリンクしていて、それぞれが実際に何をしているのでしょうか。

spark 2.2.1のspark.masterのオプション一覧

94
Jack Davidson

交換した後私のために働きました

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の他のスレッドでこの解決策を見つけました。

52
Sachin

"spark.master"のデフォルト値はspark:// Host:PORTです。次のコードは、Host:PORTで実行されているスタンドアロンクラスタからセッションを取得しようとし、そのホストを想定しています。 :スパーク設定ファイルに含まれるPORT値。

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

"org.Apache.spark.SparkException:設定にマスターURLを設定する必要があります"と表示されますHost:PORTはspark設定に設定されていませんファイル。

"Host:PORT"の値を気にしないためには、spark.masterlocalに設定してください。

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

ここ はマスターURLをspark.masterに渡すことができるフォーマットのリストへのリンクです。

参照: Spark Tutorial - Setup Spark Ecosystem

26
Mallikarjun M

スタンドアロンアプリケーションを実行している場合は、SparkContextの代わりにSparkSessionを使用する必要があります。

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

アプリケーション内のスパークコンテキストは、どのようにしてスパークマスターの値を選択しますか?

  • SCの作成中に、SparkConfを使用して明示的に指定します。
  • あるいは、System.getProperties(SparkSubmitが--master引数を読んだ後にそれを先に置いた場所)から選びます。

これで、SparkSubmitがドライバ上で実行されます。この場合、ドライバはspark-submitスクリプトを実行している場所のマシンです。そしてこれはおそらくあなたにも期待通りに働いています。

しかし、あなたが投稿した情報から、エクゼキュータに送られるコードでスパークコンテキストを作成しているように見えます - そしてそこに利用可能なspark.masterシステムプロパティがないとすれば、それは失敗します。 (もしそうであれば、実際にそうすべきではありません。)

GroupEvolutionESコードを投稿してください(特にSparkContext(s)を作成している場所)。

3
Sachin Tyagi

私は同じ問題を抱えていた、これは修正前の私のコードです:

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

それはうまくいった!

2
user2989087
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")
2
rio

交換します。

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

魔法をしました。

2
Nazima

これを試して

特色をつける

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

それを拡張する

object Preprocess extends SparkSessionWrapper {
2
gyuseong

設定するsetMaster( "local [*]")がありません。追加したら問題は解決します。

問題:

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()
1
KARTHIKEYAN.A

以下のコードを使用している場合

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

それから次の行に置き換えます

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

Spark 2.0では、次のコードを使うことができます。

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

ここでlocalを実行すると*すべてのノードを意味する場合は、.master( "local [*]")を追加する必要があります。

クラスタの場合はマスターURLを設定する必要があります

0
vaquar khan