Tutorial: Siapkan notebook Jupyter JupyterLab untuk menguji dan men-debug skrip ETL - AWS Glue

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial: Siapkan notebook Jupyter JupyterLab untuk menguji dan men-debug skrip ETL

Dalam tutorial ini, Anda menghubungkan notebook Jupyter saat JupyterLab berjalan di mesin lokal Anda ke titik akhir pengembangan. Anda melakukan ini sehingga Anda dapat secara interaktif menjalankan, melakukan debug, dan menguji skrip extract, transform, and load (ETL) AWS Glue sebelum men-deploy-nya. Tutorial ini menggunakan penerusan port Secure Shell (SSH) untuk menghubungkan mesin lokal Anda ke titik akhir pengembangan AWS Glue. Untuk informasi selengkapnya, lihat Penerusan port di Wikipedia.

Langkah 1: Instal JupyterLab dan Sparkmagic

Anda dapat menginstal JupyterLab dengan menggunakan conda ataupip. condaadalah sistem manajemen paket open-source dan sistem manajemen lingkungan yang berjalan di Windows, macOS, dan Linux. pipadalah penginstal paket untuk Python.

Jika Anda menginstal di macOS, maka Anda harus menginstal Xcode sebelum Anda dapat menginstal Sparkmagic.

  1. Instal JupyterLab, Sparkmagic, dan ekstensi terkait.

    $ conda install -c conda-forge jupyterlab $ pip install sparkmagic $ jupyter nbextension enable --py --sys-prefix widgetsnbextension $ jupyter labextension install @jupyter-widgets/jupyterlab-manager
  2. Periksa direktori sparkmagic dari Location.

    $ pip show sparkmagic | grep Location Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
  3. Ubah direktori Anda ke direktori yang dikembalikanLocation, dan instal kernel untuk Scala dan. PySpark

    $ cd /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages $ jupyter-kernelspec install sparkmagic/kernels/sparkkernel $ jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
  4. Mengunduh sampel file config.

    $ curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json

    Dalam file konfigurasi ini, Anda dapat mengkonfigurasi parameter terkait Spark seperti driverMemory dan executorCores.

Langkah 2: Mulai JupyterLab

Ketika Anda mulai JupyterLab, browser web default Anda secara otomatis dibuka, dan URL http://localhost:8888/lab/workspaces/{workspace_name} ditampilkan.

$ jupyter lab

Langkah 3: Memulai penerusan port SSH untuk terhubung ke titik akhir pengembangan Anda

Selanjutnya, gunakan penerusan port lokal SSH untuk meneruskan port lokal (di sini, 8998) ke tujuan jarak jauh yang ditentukan oleh AWS Glue (169.254.76.1:8998).

  1. Buka jendela terminal terpisah yang memberikan Anda akses ke SSH. Pada Microsoft Windows, Anda dapat menggunakan shell BASH yang disediakan oleh Git untuk Windows, atau Anda dapat menginstal Cygwin.

  2. Jalankan perintah SSH berikut, dan lakukan modifikasi sebagai berikut:

    • Ganti private-key-file-path dengan path ke file .pem yang berisi kunci privat yang sesuai dengan kunci publik yang Anda gunakan untuk membuat titik akhir pengembangan Anda.

    • Jika Anda sedang meneruskan port yang berbeda dari 8998, ganti 8998 dengan nomor port yang sebenarnya sedang Anda gunakan secara lokal. Alamat 169.254.76.1:8998 adalah port jarak jauh dan tidak diubah oleh Anda.

    • Ganti dev-endpoint-public-dns dengan alamat DNS publik dari titik akhir pengembangan Anda. Untuk menemukan alamat ini, arahkan ke titik akhir pengembangan Anda di konsol AWS Glue, pilih nama, dan salin Alamat publik yang tercantum pada halaman Detail titik akhir.

    ssh -i private-key-file-path -NTL 8998:169.254.76.1:8998 glue@dev-endpoint-public-dns

    Anda mungkin akan melihat pesan peringatan seperti yang berikut ini:

    The authenticity of host 'ec2-xx-xxx-xxx-xx.us-west-2.compute.amazonaws.com (xx.xxx.xxx.xx)' can't be established. ECDSA key fingerprint is SHA256:4e97875Brt+1wKzRko+JflSnp21X7aTP3BcFnHYLEts. Are you sure you want to continue connecting (yes/no)?

    Masuk yes dan biarkan jendela terminal terbuka saat Anda menggunakan JupyterLab.

  3. Periksa apakah penerusan port SSH berfungsi dengan baik dengan titik akhir pengembangan.

    $ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}

Langkah 4: Jalankan fragmen skrip sederhana dalam paragraf notebook

Sekarang notebook Anda JupyterLab harus bekerja dengan titik akhir pengembangan Anda. Masukkan fragmen skrip berikut ke notebook Anda dan jalankan.

  1. Periksa apakah Spark berhasil berjalan. Perintah berikut menginstruksikan Spark untuk menghitung 1 dan kemudian mencetak nilainya.

    spark.sql("select 1").show()
  2. Periksa apakah integrasi AWS Glue Data Catalog bekerja. Perintah berikut mencantumkan tabel dalam Katalog Data.

    spark.sql("show tables").show()
  3. Periksa apakah fragmen skrip sederhana yang menggunakan perpustakaan AWS Glue bekerja.

    Skrip berikut menggunakan metadata tabel persons_json dalam AWS Glue Data Catalog untuk membuat DynamicFrame dari data sampel Anda. Ia kemudian mencetak jumlah item dan skema data ini.

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about *this* data print("Count: ", persons_DyF.count()) persons_DyF.printSchema()

Output dari skrip tersebut adalah sebagai berikut.

Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- note: string | | |-- name: string | | |-- lang: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string

Pemecahan Masalah

  • Selama instalasi JupyterLab, jika komputer Anda berada di belakang proxy perusahaan atau firewall, Anda mungkin mengalami kesalahan HTTP dan SSL karena profil keamanan khusus yang dikelola oleh departemen TI perusahaan.

    Berikut ini adalah contoh kesalahan khas yang terjadi ketika conda tidak dapat terhubung ke repositorinya sendiri:

    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>

    Ini mungkin terjadi karena perusahaan Anda dapat memblokir koneksi ke repositori yang banyak digunakan di Python dan komunitas. JavaScript Untuk informasi selengkapnya, lihat Masalah Instalasi di JupyterLab situs web.

  • Jika Anda menemukan kesalahan koneksi ditolak saat mencoba connect ke titik akhir pengembangan, Anda mungkin menggunakan titik akhir pengembangan yang sudah kedaluwarsa. Cobalah membuat sebuah titik akhir pengembangan baru dan hubungkan kembali.