Pertanyaan Bagaimana saya bisa men-debug aplikasi percikan secara lokal?


Saya sangat baru mencetuskan dan saya hanya ingin belajar selangkah demi selangkah cara mendebug aplikasi percikan secara lokal? Adakah yang bisa menjelaskan langkah-langkah yang diperlukan untuk melakukan ini?

Saya dapat menjalankan aplikasi sederhana di situs web percikan secara lokal dari baris perintah, tetapi saya hanya perlu menelusuri kode dan melihat cara kerjanya. Setiap bantuan sangat dihargai. Terima kasih.


32
2018-05-22 18:37


asal


Jawaban:


Seperti disebutkan David Griffin, menggunakan spark-shell bisa sangat membantu. Namun, saya menemukan bahwa melakukan debugging lokal yang sebenarnya, pengaturan titik istirahat, memeriksa variabel, dll sangat diperlukan. Inilah cara saya melakukannya menggunakan IntelliJ.

Pertama, pastikan Anda dapat menjalankan aplikasi percikan lokal menggunakan spark-submit, mis. sesuatu seperti:

spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar

Kemudian, beri tahu driver percikan lokal Anda untuk menjeda dan menunggu koneksi dari debugger ketika dijalankan, dengan menambahkan opsi seperti berikut:

--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

dimana agentlib:jdwp adalah opsi Java Debug Wire Protocol, diikuti oleh daftar sub-opsi yang dipisahkan koma:

  • transport mendefinisikan protokol koneksi yang digunakan antara debugger dan debuggee - baik soket atau "memori bersama" - Anda hampir selalu menginginkan socket (dt_socket) kecuali saya percaya pada beberapa kasus di Microsoft Windows
  • server apakah proses ini harus menjadi server ketika berbicara dengan debugger (atau sebaliknya, klien) - Anda selalu membutuhkan satu server dan satu klien. Dalam hal ini, kita akan menjadi server dan menunggu koneksi dari debugger
  • suspend apakah akan menjeda eksekusi hingga debugger berhasil tersambung. Kami mengaktifkan ini sehingga pengandar tidak akan mulai sampai debugger terhubung
  • address di sini, ini adalah port untuk didengarkan (untuk permintaan koneksi debugger yang masuk). Anda dapat mengaturnya ke port yang tersedia (Anda hanya perlu memastikan debugger dikonfigurasi untuk terhubung ke port yang sama ini)

Jadi sekarang, Anda spark-submit baris perintah harus terlihat seperti ini:

spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Sekarang jika Anda menjalankan di atas, Anda akan melihat sesuatu seperti

Listening for transport dt_socket at address: 5005

dan aplikasi percikan Anda menunggu debugger untuk dilampirkan.

Selanjutnya, buka proyek IntelliJ yang berisi aplikasi Spark Anda, lalu buka "Run -> Edit Configurations ..." Lalu klik "+" untuk menambahkan konfigurasi run / debug baru, dan pilih "Remote". Beri nama, mis. "SparkLocal", dan pilih "Socket" untuk Transport, "Lampirkan" untuk mode Debugger, dan ketik "localhost" untuk Host dan port yang Anda gunakan di atas untuk Port, dalam hal ini, "5005". Klik "OK" untuk menyimpan.

Dalam versi IntelliJ saya memberi Anda saran untuk baris perintah debug untuk digunakan pada proses debugged, dan ini menggunakan "suspend = n" - kami mengabaikan itu dan menggunakan "suspend = y" (seperti di atas) karena kami ingin aplikasi untuk menunggu sampai kita terhubung untuk memulai.

Sekarang Anda harus siap untuk melakukan debug. Cukup mulai percikan dengan perintah di atas, lalu pilih konfigurasi run IntelliJ yang baru saja Anda buat dan klik Debug. IntelliJ harus terhubung ke aplikasi Spark Anda, yang sekarang harus mulai berjalan. Anda dapat mengatur break point, memeriksa variabel, dll.


14
2018-04-15 13:21



Jalankan shell Spark. Ini langsung dari Dokumentasi Spark:

./bin/spark-shell --master local[2]

Anda juga akan melihat shell Spark yang disebut sebagai REPL. Sejauh ini cara terbaik untuk belajar Spark. Saya menghabiskan 80% waktu saya di shell Spark dan 20% lainnya menerjemahkan kode ke dalam aplikasi saya.


9
2018-05-23 05:09



Hanya lewat opsi java untuk membuka port debug. Ini artikel bagus yang menjawab pertanyaan Anda - http://danosipov.com/?p=779 Saya menggunakannya seperti

$ SPARK_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spark-shell

(Ya, SPARK_JAVA_OPTS tidak lagi digunakan, tetapi berfungsi dengan baik)


7
2017-11-24 08:39



Jawaban @Jason Evans tidak berhasil untuk saya. Tapi

--conf spark.driver.extraJavaOptions=-Xrunjdwp:transport=dt_socket,server=y,address=8086,suspend=n

bekerja


3
2017-11-29 01:32



hanya satu perubahan kecil yang diperlukan untuk jawaban @Jason Evan. Diperlukan ‘-’ sebelum Agentlib String ... .... "

 --conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Anda mungkin juga menggunakan opsi "--driver-java-options" untuk mencapai tujuan yang sama

--driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

2
2018-02-13 09:29



Anda dapat mencoba ini spark-env.sh:

SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888


0
2017-07-30 14:11