Dapatkan kesalahan saat menggunakan Livy untuk mengirimkan pekerjaan Spark: Pengguna tidak menginisialisasi konteks percikan

Saya sangat baru di Spark dan saya mengikuti dokumen ini untuk mengirimkan pekerjaan Spark melalui Livy https://docs.microsoft.com/en-us/azure/hdinsight/spark/apache-spark-livy-rest-interface

Inilah perintah saya:

curl -k --user "username:password!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"/test4spark/test4sparkhaha.jar", "className":"helloworld4spark.test" }' "https://xxx.azurehdinsight.net/livy/batches" -H "X-Requested-By: username"

File test4sparkhaha.jar adalah aplikasi Java super sederhana, hanya berisi satu kelas, dan hanya ada metode utama yang mencetak "hahaha", tidak ada yang lain... Saya mengekspor proyek di Eclipse ke Runnable Jar dan saya mencoba menjalankannya di cluster percikan saya menggunakan Java -jar dan Spark-submit. Keduanya bekerja dengan baik. Kemudian saya mulai mencoba mengirimkan pekerjaan melalui Livy dan selalu gagal, saya menemukan kesalahan di bawah ini di log Benang:

19/11/06 14:36:06 ERROR ApplicationMaster: Pengecualian tidak tertangkap: java.lang.IllegalStateException: Pengguna tidak menginisialisasi konteks percikan! di org.apache.spark.deploy.yarn.ApplicationMaster.runDriver(ApplicationMaster.scala:510) di org.apache.spark.deploy.yarn.ApplicationMaster.org$apache$spark$deploy$yarn$ApplicationMaster$$runImpl(ApplicationMaster .scala:345) di org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$2.apply$mcV$sp(ApplicationMaster.scala:260) di org.apache.spark.deploy.yarn.ApplicationMaster$$ anonfun$run$2.apply(ApplicationMaster.scala:260) di org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$run$2.apply(ApplicationMaster.scala:260) di org.apache.spark.deploy.yarn .ApplicationMaster$$anon$5.run(ApplicationMaster.scala:815) di java.security.AccessController.doPrivileged(Metode Asli) di javax.security.auth.Subject.doAs(Subject.java:422) di org.apache.hadoop .security.UserGroupInformation.doAs(UserGroupInformation.java:1869) di org.apache.spark.deploy.yarn.ApplicationMaster.doAsUser(ApplicationMaster.scala:814) di org.apache.spark.deploy.yarn.ApplicationMaster.run(ApplicationMaster .scala:259) di org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:839) di org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)

Inilah perintah Spark-submit yang saya coba:

spark-submit --class helloworld4spark.test test4sparkhaha.jar

Ini bekerja dengan sempurna...

Bisakah kalian membantu saya memahami mengapa ini memberikan kesalahan saat Spark-submit berfungsi dengan baik?


person Chase    schedule 06.11.2019    source sumber


Jawaban (1)


Saya kira Anda mencoba mengirimkan file .jar lokal dengan Livy. Untuk pengiriman percikan berfungsi (mengirimkan pekerjaan ke Yarn mendukungnya), tetapi untuk server Livy tidak.

Untuk membuatnya berfungsi, Anda perlu mengunggah toples Anda ke lokasi yang dapat diakses hdfs/wasbs/adls/http (pastikan Spark Anda dikonfigurasi untuk mengakses lokasi tersebut).

Silakan lihat paragraf pertama panduan ini.

person Aliaksandr Sasnouskikh    schedule 06.11.2019
comment
Hai Aliaksandr, terima kasih telah membalas!. Saya memang mencoba jalur WASB pada awalnya, tetapi muncul kesalahan yang mengatakan ClassNotFound. Ini aneh karena kesalahannya tidak masuk akal jadi saya kira alasan terjadinya kesalahan seperti itu adalah karena jalur WASB tidak dapat mengembalikan file jar dengan benar. Jadi saya mengunggah file jar dari lokal ke HDFS, /test4spark/test4sparkhaha.jar adalah jalur HDFS - person Chase; 07.11.2019
comment
Hai Chase, pastikan untuk menggunakan jalur dalam format wasb://<mycontainer>@<mystorageaccount>.blob.core.windows.net/path/to/test4sparkhaha.jar. Pastikan juga bahwa klaster Anda dikonfigurasi untuk mengakses kontainer blob tersebut. Biasanya saat Anda menjalankan HDInsight, Anda memasang akun Blob Storage ke kluster, yang dapat diakses tanpa memberikan kredensial tambahan, jadi gunakanlah akun tersebut. Dan nama kelas Anda terlihat tidak biasa, terasa seperti Anda menunjuk ke nama paketnya, seharusnya seperti helloworld4spark.test.MyClassWithMain. - person Aliaksandr Sasnouskikh; 07.11.2019