Menggunakan REST API Apache Spark untuk mengirimkan pekerjaan jarak jauh ke kluster Microsoft Azure HDInsight Spark

Pelajari cara menggunakan Apache Livy, REST API Apache Spark, yang digunakan untuk mengirimkan pekerjaan jarak jauh ke kluster Microsoft Azure HDInsight Spark. Untuk dokumentasi terperinci, lihat Apache Livy.

Anda dapat menggunakan Livy untuk menjalankan shell Spark interaktif atau mengirimkan pekerjaan batch untuk dijalankan pada Spark. Artikel ini membahas tentang penggunaan Livy untuk mengirimkan pekerjaan batch. Cuplikan dalam artikel ini menggunakan cURL untuk memerintahkan REST API ke titik akhir Livy Spark.

Prasyarat

Kluster Apache Spark di Microsoft Azure HDInsight. Untuk petunjuk selengkapnya, lihat Membuat kluster Apache Spark di Microsoft Azure HDInsight.

Mengirimkan pekerjaan batch Apache Livy Spark

Sebelum Anda mengirimkan pekerjaan batch, Anda harus mengunggah jar aplikasi pada penyimpanan kluster yang terkait dengan kluster. Anda dapat menggunakan AzCopy, sebuah utilitas baris perintah, untuk melakukannya. Ada berbagai klien lain yang dapat Anda gunakan untuk mengunggah data. Anda dapat mengetahui lebih banyak tentangnya di Mengunggah data untuk pekerjaan Apache Hadoop di Microsoft Azure HDInsight.

curl -k --user "admin:password" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"

Contoh

  • Jika file jar berada di penyimpanan kluster (WASBS)

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    
  • Jika Anda ingin meneruskan nama file jar dan namakelas sebagai bagian dari file input (contohnya, input.txt)

    curl -k  --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

Dapatkan informasi tentang batch Livy Spark yang berjalan pada kluster

Sintaks:

curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"

Contoh

  • Jika Anda ingin mengambil semua batch Livy Spark yang berjalan pada kluster:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    
  • Jika Anda ingin mengambil batch tertentu dengan ID batch tertentu

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
    

Menghapus pekerjaan batch Livy Spark

curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"

Contoh

Menghapus pekerjaan batch dengan 5 ID batch.

curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"

Livy Spark dan ketersediaan tinggi

Livy menyediakan ketersediaan tinggi untuk pekerjaan Spark yang berjalan pada kluster. Berikut adalah beberapa contohnya.

  • Jika layanan Livy tidak berfungsi setelah Anda mengirimkan pekerjaan dari jarak jauh ke kluster Spark, pekerjaan terus berjalan di latar belakang. Ketika Livy berfungsi kembali, ia akan memulihkan status pekerjaan dan melaporkannya kembali.
  • Jupyter Notebooks untuk Microsoft Azure HDInsight didukung oleh Livy di backend. Jika notebook menjalankan pekerjaan Spark dan layanan Livy dimulai ulang, notebook akan terus menjalankan sel kode.

Tampilkan sebuah contoh kepada saya

Di bagian ini, kita akan melihat contoh untuk menggunakan Livy Spark untuk mengirimkan pekerjaan batch, memantau kemajuan pekerjaan, lalu menghapusnya. Aplikasi yang kami gunakan dalam contoh ini adalah yang dikembangkan dalam artikel Membuat aplikasi Scala mandiri dan menjalankan pada kluster Microsoft Azure HDInsight Spark. Langkah-langkah di sini mengasumsikan:

  • Anda telah menyalin melalui jar aplikasi ke akun penyimpanan yang terkait dengan kluster.
  • Anda telah menginstal CuRL di komputer tempat Anda mencoba langkah-langkah ini.

Lakukan langkah-langkah berikut:

  1. Untuk kemudahan penggunaan, atur variabel lingkungan. Contoh ini didasarkan pada lingkungan Windows, lakukan revisi pada variabel sesuai kebutuhan untuk lingkungan Anda. Ganti CLUSTERNAME, dan PASSWORD dengan nilai yang sesuai.

    set clustername=CLUSTERNAME
    set password=PASSWORD
    
  2. Pastikan Livy Spark berjalan pada kluster. Kita bisa melakukannya dengan mendapatkan daftar batch yang sedang berjalan. Jika Anda menjalankan pekerjaan menggunakan Livy untuk pertama kalinya, outputnya akan bernilai nol.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"
    

    Anda akan mendapatkan output yang mirip dengan cuplikan berikut:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:47:53 GMT
    < Content-Length: 34
    <
    {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Perhatikan bagaimana baris terakhir dalam output mengatakan total:0, yang menunjukkan tidak ada batch yang sedang berjalan.

  3. Mari sekarang kita mengirimkan sebuah pekerjaan batch. Cuplikan berikut menggunakan file input (input.txt) untuk meneruskan nama jar dan nama kelas sebagai parameter. Jika Anda menjalankan langkah-langkah ini dari komputer Windows, penggunaan fiile input merupakan pendekatan yang disarankan.

    curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

    Parameter dalam file input.txt didefinisikan sebagai berikut:

    { "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
    

    Anda akan mendapatkan output yang mirip dengan cuplikan berikut:

    < HTTP/1.1 201 Created
    < Content-Type: application/json; charset=UTF-8
    < Location: /0
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:51:30 GMT
    < Content-Length: 36
    <
    {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Perhatikan bagaimana baris terakhir dari output mengatakan state:starting. Ia juga mengatakan, id:0. Di sini, 0 merupakan ID batch.

  4. Sekarang Anda dapat mengambil status batch tertentu ini menggunakan ID batch.

    curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Anda akan mendapatkan output yang mirip dengan cuplikan berikut:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:54:42 GMT
    < Content-Length: 509
    <
    {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://myspar.lpel.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Output sekarang menampilkan state:success, yang menunjukkan bahwa pekerjaan berhasil diselesaikan.

  5. Jika mau, sekarang Anda dapat menghapus batch.

    curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"
    

    Anda akan mendapatkan output yang mirip dengan cuplikan berikut:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Sat, 21 Nov 2015 18:51:54 GMT
    < Content-Length: 17
    <
    {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Baris terakhir dari output menunjukkan bahwa batch berhasil dihapus. Penghapusan pekerjaan saat masih berjalan juga menghentikan pekerjaan. Jika Anda menghapus pekerjaan yang telah selesai, baik berhasil maupun tidak, tindakan ini akan menghapus informasi pekerjaan sepenuhnya.

Pembaruan konfigurasi Livy dimulai dengan versi Microsoft Azure HDInsight 3.5

Kluster Microsoft Azure HDInsight 3.5 ke atas, secara default, menonaktifkan penggunaan jalur file lokal untuk mengakses file data sampel atau jar. Kami lebih menginginkan Anda menggunakan jalur wasbs://untuk mengakses jar atau file data sampel dari kluster.

Pengiriman pekerjaan Livy untuk kluster dalam jaringan virtual Azure

Jika Anda terhubung ke kluster Microsoft Azure HDInsight Spark dari dalam Azure Virtual Network, Anda dapat langsung terhubung ke Livy pada kluster. Untuk kasus seperti ini, URL untuk titik akhir Livy adalah http://<IP address of the headnode>:8998/batches. Di sini, 8998 adalah port tempat Livy berjalan pada headnode kluster. Untuk informasi selengkapnya tentang mengakses layanan pada port non-publik, lihat Port yang digunakan oleh layanan Apache Hadoop pada Microsoft Azure HDInsight.

Langkah berikutnya