Menggunakan notebook Apache Zeppelin dengan klaster Apache Spark pada Azure HDInsight

Klaster HDInsight Spark mencakup notebook Apache Zeppelin. Gunakan notebook untuk menjalankan pekerjaan Apache Spark. Dalam artikel ini, Anda mempelajari cara menggunakan notebook Zeppelin pada klaster HDInsight.

Prasyarat

  • Kluster Apache Spark di Microsoft Azure HDInsight. Untuk instruksi, lihat Membuat klaster Apache Spark di Azure HDInsight.
  • Skema URI untuk penyimpanan utama klaster Anda. Skema yang digunakan adalah wasb:// untuk Azure Blob Storage, abfs:// untuk Azure Data Lake Storage Gen2 atau adl:// untuk Azure Data Lake Storage Gen1. Jika transfer aman diaktifkan untuk Blob Storage, URI akan menjadi wasbs://. Untuk informasi selengkapnya, lihat Memerlukan transfer aman di Azure Storage.

Meluncurkan notebook Apache Zeppelin

  1. Dari Ikhtisar klaster Spark, pilih Notebook Zeppelin dari Dasbor klaster. Masukkan kredensial admin untuk klaster.

    Catatan

    Anda juga dapat meraih Zeppelin Notebook untuk klaster Anda dengan membuka URL berikut di browser Anda. Ganti CLUSTERNAME dengan nama klaster Anda:

    https://CLUSTERNAME.azurehdinsight.net/zeppelin

  2. Buat notebook baru. Dari panel header, arahkan ke Notebook>Buat catatan baru.

    Create a new Zeppelin notebook

    Masukkan nama untuk notebook, lalu pilih Buat Catatan.

  3. Pastikan header notebook menampilkan status tersambung. Hal ini ditandai dengan titik hijau di sudut kanan atas.

    Zeppelin notebook status

  4. Muat data sampel ke dalam tabel sementara. Saat Anda membuat klaster Spark di HDInsight, file data sampel, hvac.csv, disalin ke akun penyimpanan terkait di bawah \HdiSamples\SensorSampleData\hvac.

    Di paragraf kosong yang dibuat secara default di notebook baru, tempelkan cuplikan berikut ini.

    %livy2.spark
    //The above magic instructs Zeppelin to use the Livy Scala interpreter
    
    // Create an RDD using the default Spark context, sc
    val hvacText = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
    // Define a schema
    case class Hvac(date: String, time: String, targettemp: Integer, actualtemp: Integer, buildingID: String)
    
    // Map the values in the .csv file to the schema
    val hvac = hvacText.map(s => s.split(",")).filter(s => s(0) != "Date").map(
        s => Hvac(s(0),
                s(1),
                s(2).toInt,
                s(3).toInt,
                s(6)
        )
    ).toDF()
    
    // Register as a temporary table called "hvac"
    hvac.registerTempTable("hvac")
    

    Tekan SHIFT + ENTER atau pilih tombol Putar untuk paragraf guna menjalankan cuplikan. Status di sudut kanan paragraf harus berlangsung dari SIAP, DITUNDA, BERJALAN hingga SELESAI. Output muncul di bagian bawah paragraf yang sama. Cuplikan layar terlihat seperti gambar berikut:

    Create a temporary table from raw data

    Anda juga dapat memberikan judul untuk setiap paragraf. Dari sudut kanan paragraf, pilih ikon Pengaturan (sprocket), lalu pilih Tampilkan judul

    Catatan

    %spark2 interpreter tidak didukung di notebook Zeppelin di semua versi HDInsight, dan %sh interpreter tidak akan didukung mulai dari HDInsight 4.0 dan seterusnya.

  5. Anda sekarang dapat menjalankan pernyataan Spark SQL pada tabel hvac. Tempelkan kueri berikut ini dalam paragraf baru. Kueri mengambil ID bangunan. Juga perbedaan antara suhu target dan yang sebenarnya untuk setiap bangunan pada tanggal tertentu. Tekan SHIFT + ENTER.

    %sql
    select buildingID, (targettemp - actualtemp) as temp_diff, date from hvac where date = "6/1/13"
    

    Pernyataan %sql pada awalnya memberi tahu notebook untuk menggunakan interpreter Livy Scala.

  6. Pilih ikon Bagan Bilah untuk mengubah tampilan. pengaturan, muncul setelah Anda memilih Bagan Bilah, yang memungkinkan Anda untuk memilih Kunci, dan Nilai. Cuplikan layar berikut menampilkan output.

    Run a Spark SQL statement using the notebook1

  7. Anda juga dapat menjalankan pernyataan Spark SQL menggunakan variabel dalam kueri. Cuplikan berikutnya menampilkan cara menentukan variabel, Temp, dalam kueri dengan nilai yang mungkin ingin Anda kueri. Saat Anda pertama kali menjalankan kueri, tarik turun secara otomatis diisi dengan nilai yang Anda tentukan untuk variabel.

    %sql  
    select buildingID, date, targettemp, (targettemp - actualtemp) as temp_diff from hvac where targettemp > "${Temp = 65,65|75|85}"
    

    Tempelkan cuplikan ini di paragraf baru dan tekan SHIFT + ENTER. Lalu pilih 65 dari daftar tarik turun Suhu.

  8. Pilih ikon Bagan Bilah untuk mengubah tampilan. Kemudian pilih pengaturan dan buat perubahan berikut:

    • Grup: Tambahkan targettemp.

    • Nilai: 1. Hapus tanggal. 2. Tambahkan temp_diff. 3. Ubah agregator dari SUM ke AVG.

      Cuplikan layar berikut menampilkan output.

      Run a Spark SQL statement using the notebook2

Bagaimana cara menggunakan paket eksternal dengan notebook?

Notebook Zeppelin di klaster Apache Spark pada HDInsight dapat menggunakan paket eksternal dari kontribusi komunitas yang tidak termasuk dalam klaster. Cari repositori Maven untuk daftar lengkap paket yang tersedia. Anda juga bisa mendapatkan daftar paket yang tersedia dari sumber lain. Contohnya, daftar lengkap paket dari kontribusi komunitas tersedia di Paket Spark.

Dalam artikel ini, Anda akan melihat cara menggunakan paket spark-csv dengan Jupyter Notebook.

  1. Buka pengaturan interpreter. Dari sudut kanan atas, pilih nama pengguna yang masuk, lalu pilih Interpreter.

    Launch interpreter

  2. Gulirkan ke livy2, lalu pilih edit.

    Change interpreter settings1

  3. Arahkan ke kunci livy.spark.jars.packages, dan atur nilainya dalam format group:id:version. Jadi, jika Anda ingin menggunakan paket spark-csv, Anda harus mengatur nilai kunci ke com.databricks:spark-csv_2.10:1.4.0.

    Change interpreter settings2

    Pilih Simpan lalu OK untuk memulai ulang interpreter Livy.

  4. Jika Anda ingin memahami cara mengetahui nilai kunci yang dimasukkan di atas, berikut caranya.

    a. Cari paket di Repositori Maven. Untuk artikel ini, kami menggunakan spark-csv.

    b. Dari repositori, kumpulkan nilai untuk GroupId, ArtifactId, dan Versi.

    Use external packages with Jupyter Notebook

    c. Gabungkan tiga nilai, yang dipisahkan oleh titik dua ( : ).

    com.databricks:spark-csv_2.10:1.4.0
    

Di mana notebook Zeppelin disimpan?

Notebook Zeppelin disimpan ke headnode klaster. Jadi, jika Anda menghapus klaster, notebook juga akan dihapus. Jika Anda ingin melestarikan notebook Anda untuk digunakan nantinya pada klaster lain, Anda harus mengekspornya setelah Anda selesai menjalankan pekerjaan. Untuk mengekspor notebook, pilih ikon Ekspor seperti yang ditampilkan di gambar di bawah ini.

Download notebook

Tindakan ini menyimpan notebook sebagai file JSON di lokasi unduhan Anda.

Menggunakan Shiro untuk Mengonfigurasi Akses ke Interpreter Zeppelin di Klaster Enterprise Security Package (ESP)

Seperti disebutkan di atas, interpreter %sh tidak didukung mulai dari HDInsight 4.0 dan seterusnya. Selain itu, karena interpreter %sh memperkenalkan masalah keamanan potensial, seperti perintah shell penggunaan keytab akses, interpreter juga telah dihapus dari klaster ESP HDInsight 3.6. Artinya interpreter %sh tidak tersedia saat mengeklik Buat catatan baru atau di UI Interpreter secara default.

Pengguna domain istimewa dapat menggunakan file Shiro.ini untuk mengontrol akses ke UI Interpreter. Hanya pengguna ini yang dapat membuat interpreter %sh baru dan mengatur izin pada setiap interpreter %sh baru. Untuk mengontrol akses menggunakan file shiro.ini, gunakan langkah-langkah berikut:

  1. Tentukan peran baru menggunakan nama grup domain yang sudah ada. Dalam contoh berikut, adminGroupName adalah sekelompok pengguna istimewa di AAD. Jangan menggunakan karakter khusus atau spasi putih dalam nama grup. Karakter setelah = memberikan izin untuk peran ini. * berarti grup memiliki izin penuh.

    [roles]
    adminGroupName = *
    
  2. Tambahkan peran baru untuk akses ke interpreter Zeppelin. Dalam contoh berikut, semua pengguna di adminGroupName diberi akses ke interpreter Zeppelin dan dapat membuat interpreter baru. Anda bisa menempatkan beberapa peran di antara tanda kurung di roles[], yang dipisahkan oleh koma. Kemudian, pengguna yang memiliki izin yang diperlukan, dapat mengakses interpreter Zeppelin.

    [urls]
    /api/interpreter/** = authc, roles[adminGroupName]
    

Contoh shiro.ini untuk beberapa grup domain:

[main]
anyofrolesuser = org.apache.zeppelin.utils.AnyOfRolesUserAuthorizationFilter

[roles]
group1 = *
group2 = *
group3 = *

[urls]
/api/interpreter/** = authc, anyofrolesuser[group1, group2, group3]

Manajemen sesi Livy

Paragraf kode pertama di notebook Zeppelin Anda membuat sesi Livy baru di klaster Anda. Sesi ini dibagikan melintasi semua notebook Zeppelin yang nantinya Anda buat. Jika sesi Livy dimatikan karena alasan apa pun, pekerjaan tidak akan berjalan dari notebook Zeppelin.

Jika demikian, Anda harus melakukan langkah-langkah berikut sebelum Anda bisa mulai menjalankan pekerjaan dari notebook Zeppelin.

  1. Mulai ulang interpreter Livy dari notebook Zeppelin. Untuk melakukannya, buka pengaturan interpreter dengan memilih nama pengguna yang masuk dari sudut kanan atas, lalu pilih Interpreter.

    Launch interpreter

  2. Gulirkan ke livy2, lalu pilih mulai ulang.

    Restart the Livy interpreter

  3. Jalankan sel kode dari notebook Zeppelin yang ada. Kode ini membuat sesi Livy baru di kluster HDInsight.

Informasi Umum

Memvalidasi layanan

Untuk memvalidasi layanan dari Ambari, arahkan ke https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary di mana CLUSTERNAME adalah nama klaster Anda.

Untuk memvalidasi layanan dari baris perintah, SSH ke headnode. Alihkan pengguna ke zeppelin menggunakan perintah sudo su zeppelin. Perintah status:

Perintah Deskripsi
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh status Status layanan.
/usr/hdp/current/zeppelin-server/bin/zeppelin-daemon.sh --version Versi layanan.
ps -aux | grep zeppelin Identifikasi PID.

Lokasi log

Layanan Jalur
zeppelin-server /usr/hdp/current/zeppelin-server/
Log Server /var/log/zeppelin
Interpreter Konfigurasi, Shiro, site.xml, log4j /usr/hdp/current/zeppelin-server/conf atau /etc/zeppelin/conf
Direktori PID /var/run/zeppelin

Mengaktifkan pengelogan debug

  1. Arahkan ke https://CLUSTERNAME.azurehdinsight.net/#/main/services/ZEPPELIN/summary di mana CLUSTERNAME adalah nama klaster Anda.

  2. Arahkan ke CONFIGS>zeppelin-log4j-properties Tingkat Lanjut>log4j_properties_content.

  3. Modifikasi log4j.appender.dailyfile.Threshold = INFO ke log4j.appender.dailyfile.Threshold = DEBUG.

  4. Tambahkan log4j.logger.org.apache.zeppelin.realm=DEBUG.

  5. Simpan perubahan dan mulai ulang layanan.

Langkah berikutnya