Saya memiliki aplikasi Spark yang berjalan tanpa masalah dalam mode lokal, tetapi mengalami beberapa masalah saat mengirimkan ke cluster Spark.
Pesan kesalahannya adalah sebagai berikut:
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)
Pada kode diatas, GroupEvolutionES
merupakan kelas utama. Pesan kesalahan mengatakan "URL master harus disetel dalam konfigurasi Anda", tetapi saya telah memberikan parameter "--master" ke spark-submit
.
Adakah yang tahu cara memperbaiki masalah ini?
Versi Spark: 1.6.1
scala
apache-spark
Shuai Zhang
sumber
sumber
Spark
proyek saya . Dari jawaban @Dazzler , saya mengerti bahwa saya harus memindahkan -kreasi di dalam suite. Tapi juga hanya menyatakan s menjadi perbaiki itu (cinta !). Ini telah ditunjukkan oleh @gyuseong dalam jawabannya di bawah iniDataFrameSuiteBase
DataFrame
test(..) { .. }
DataFrame
lazy
Scala
Jawaban:
Di mana objek sparkContext didefinisikan, apakah itu di dalam fungsi utama?
Saya juga menghadapi masalah yang sama, kesalahan yang saya lakukan adalah saya memulai sparkContext di luar fungsi utama dan di dalam kelas.
Ketika saya memulainya di dalam fungsi utama, itu bekerja dengan baik.
sumber
main()
metode alih-alih memperluasscala.App
. Subkelas dariscala.App
mungkin tidak bekerja dengan benar." Spark 2.1.0 ManualgetOrCreate()
konteks harus dibuat di tingkat driver dan diteruskan ke tingkat pelaksana sesuai kebutuhan.TLDR:
.config("spark.master", "local")
daftar opsi untuk spark.master di spark 2.2.1
Saya berakhir di halaman ini setelah mencoba menjalankan program java Spark SQL sederhana dalam mode lokal. Untuk melakukan ini, saya menemukan bahwa saya dapat mengatur spark.master menggunakan:
SparkSession spark = SparkSession .builder() .appName("Java Spark SQL basic example") .config("spark.master", "local") .getOrCreate();
Pembaruan untuk jawaban saya:
Untuk lebih jelasnya, ini bukan yang harus Anda lakukan dalam lingkungan produksi. Dalam lingkungan produksi, spark.master harus ditentukan di salah satu dari beberapa tempat lain: baik di $ SPARK_HOME / conf / spark-defaults.conf (di sinilah pengelola cloudera akan meletakkannya), atau di baris perintah saat Anda mengirimkan aplikasi. (misalnya percikan-kirim - benang master).
Jika Anda menetapkan spark.master menjadi 'lokal' dengan cara ini, spark akan mencoba berjalan dalam satu jvm, seperti yang ditunjukkan oleh komentar di bawah. Jika Anda kemudian mencoba menentukan --deploy-mode cluster, Anda akan mendapatkan pesan error 'Mode penerapan cluster tidak kompatibel dengan master "lokal"'. Ini karena pengaturan spark.master = local berarti Anda TIDAK menjalankan mode cluster.
Sebagai gantinya, untuk aplikasi produksi, dalam fungsi utama Anda (atau dalam fungsi yang dipanggil oleh fungsi utama Anda), Anda cukup menggunakan:
SparkSession .builder() .appName("Java Spark SQL basic example") .getOrCreate();
Ini akan menggunakan konfigurasi yang ditentukan pada baris perintah / dalam file konfigurasi.
Selain itu, untuk memperjelas hal ini juga: --master dan "spark.master" adalah parameter yang sama persis, hanya ditentukan dengan cara berbeda. Menetapkan kode spark.master, seperti dalam jawaban saya di atas, akan menimpa upaya untuk mengatur --master, dan akan menimpa nilai di spark-defaults.conf, jadi jangan lakukan itu dalam produksi. Ini bagus untuk tes.
juga, lihat jawaban ini . yang tertaut ke daftar opsi untuk spark.master dan apa yang sebenarnya dilakukan masing-masing opsi .
daftar opsi untuk spark.master di spark 2.2.1
sumber
Bekerja untuk saya setelah mengganti
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME");
dengan
SparkConf sparkConf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[2]").set("spark.executor.memory","1g");
Menemukan solusi ini di beberapa utas lain di stackoverflow.
sumber
setMaster("local[2]")
(alangkah baiknya memiliki penjelasan), tetapi jawaban ini dapat dianggap sebagai solusi untuk masalah tersebut.Nilai default "spark.master" adalah spark: // HOST: PORT, dan kode berikut mencoba untuk mendapatkan sesi dari kluster mandiri yang berjalan di HOST: PORT , dan mengharapkan nilai HOST: PORT ada di file konfigurasi percikan.
SparkSession spark = SparkSession .builder() .appName("SomeAppName") .getOrCreate();
" org.apache.spark.SparkException: URL master harus disetel dalam konfigurasi Anda " menyatakan bahwa HOST: PORT tidak disetel di file konfigurasi spark.
Agar tidak peduli dengan nilai "HOST: PORT", setel spark.master sebagai lokal
SparkSession spark = SparkSession .builder() .appName("SomeAppName") .config("spark.master", "local") .getOrCreate();
Sini ini tautan untuk daftar format di mana URL master dapat diteruskan ke spark.master
Referensi: Tutorial Spark - Menyiapkan Ekosistem Spark
sumber
cukup tambahkan
.setMaster("local")
ke kode Anda seperti yang ditunjukkan di bawah ini:val conf = new SparkConf().setAppName("Second").setMaster("local")
Itu berhasil untuk saya! Selamat membuat kode!
sumber
Jika Anda menjalankan aplikasi mandiri maka Anda harus menggunakan
SparkContext
bukannyaSparkSession
val conf = new SparkConf().setAppName("Samples").setMaster("local") val sc = new SparkContext(conf) val textData = sc.textFile("sample.txt").cache()
sumber
.setMaster("local")
adalah kunci untuk memecahkan masalah bagi sayalocal
ataulocal[*]
. Saat saya menerapkannya ke AWS EMR, ia menggunakan Yarn untuk koordinasi, lalu saya menetapkan master sebagaiyarn
Bagaimana konteks percikan dalam aplikasi Anda memilih nilai untuk master percikan?
SparkConf
saat membuat SC.System.getProperties
(di mana SparkSubmit sebelumnya meletakkannya setelah membaca--master
argumen Anda ).Sekarang,
SparkSubmit
jalankan driver - yang dalam kasus Anda adalah mesin tempat Anda menjalankan filespark-submit
skrip. Dan ini mungkin berfungsi seperti yang diharapkan untuk Anda juga.Namun, dari informasi yang Anda posting sepertinya Anda sedang membuat konteks percikan dalam kode yang dikirim ke pelaksana - dan mengingat bahwa tidak ada
spark.master
properti sistem yang tersedia di sana, gagal. (Dan Anda seharusnya tidak melakukannya, jika ini masalahnya.)Bisakah Anda memposting
GroupEvolutionES
kode (khususnya di tempat Anda membuatSparkContext(s)
).sumber
main
fungsi GroupEvolutionES (yang tidak saya lakukan).Mengganti:
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");
Melakukan keajaiban.
sumber
Saya memiliki masalah yang sama, Ini kode saya sebelum modifikasi:
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) } }
Dan setelah mengganti:
val conf = new SparkConf().setAppName("wordCount")
Dengan:
val conf = new SparkConf().setAppName("wordCount").setMaster("local[*]")
Ini bekerja dengan baik!
sumber
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")
sumber
coba ini
membuat sifat
import org.apache.spark.sql.SparkSession trait SparkSessionWrapper { lazy val spark:SparkSession = { SparkSession .builder() .getOrCreate() } }
memperpanjangnya
object Preprocess extends SparkSessionWrapper {
sumber
Kami kehilangan setMaster ("local [*]") untuk disetel. Setelah kami menambahkan maka masalah teratasi.
Masalah:
val spark = SparkSession .builder() .appName("Spark Hive Example") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .getOrCreate()
larutan:
val spark = SparkSession .builder() .appName("Spark Hive Example") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .master("local[*]") .getOrCreate()
sumber
Jika Anda menggunakan kode berikut
val sc = new SparkContext(master, "WordCount", System.getenv("SPARK_HOME"))
Kemudian ganti dengan baris berikut
val jobName = "WordCount"; val conf = new SparkConf().setAppName(jobName); val sc = new SparkContext(conf)
Di Spark 2.0 Anda dapat menggunakan kode berikut
val spark = SparkSession .builder() .appName("Spark SQL basic example") .config("spark.some.config.option", "some-value") .master("local[*]")// need to add .getOrCreate()
Anda perlu menambahkan .master ("local [*]") jika menjalankan local di sini * berarti semua node, Anda dapat mengatakan insted 8 1,2 dll
Anda perlu mengatur URL Master jika di cluster
sumber
Jika Anda tidak menyediakan konfigurasi Spark di JavaSparkContext maka Anda mendapatkan kesalahan ini. Yaitu: JavaSparkContext sc = new JavaSparkContext ();
Solusi: Sediakan JavaSparkContext sc = new JavaSparkContext (conf);
sumber
Mencoba opsi ini dalam mempelajari pemrosesan Spark dengan menyiapkan konteks Spark di mesin lokal. Persyaratan 1) Biarkan sesi Spark berjalan di lokal 2) Tambahkan ketergantungan Spark maven 3) Simpan file input di root \ folder input 4) output akan ditempatkan di folder \ output. Mendapatkan nilai saham maksimal selama setahun. unduh CSV apa pun dari yahoo finance https://in.finance.yahoo.com/quote/CAPPL.BO/history/ Maven dependency dan kode Scala di bawah -
<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.3</version> <scope>provided</scope> </dependency> </dependencies> object MaxEquityPriceForYear { def main(args: Array[String]) { val sparkConf = new SparkConf().setAppName("ShareMaxPrice").setMaster("local[2]").set("spark.executor.memory", "1g"); val sc = new SparkContext(sparkConf); val input = "./input/CAPPL.BO.csv" val output = "./output" sc.textFile(input) .map(_.split(",")) .map(rec => ((rec(0).split("-"))(0).toInt, rec(1).toFloat)) .reduceByKey((a, b) => Math.max(a, b)) .saveAsTextFile(output) }
sumber
Saya menggunakan konstruktor SparkContext ini, dan kesalahan hilang:
val sc = new SparkContext("local[*]", "MyApp")
sumber