Jupyter Notebook adalah alat pengembangan interaktif andal yang memungkinkan Anda menulis dan menjalankan kode melalui antarmuka web serta melihat hasilnya secara instan tanpa perlu melakukan pre-compile atau menjalankan skrip terpisah. Topik ini menjelaskan cara membuat lingkungan pengembangan yang efisien untuk berinteraksi dengan EMR Serverless Spark.
Informasi latar belakang
Apache Livy menggunakan REST API untuk berinteraksi dengan Spark, menyederhanakan komunikasi antara Spark dan server aplikasi. Untuk informasi selengkapnya tentang Livy API, lihat REST API.
Untuk berinteraksi dengan EMR Serverless Spark di Jupyter Notebook, gunakan plugin sparkmagic atau image Docker. Pilih metode yang paling sesuai dengan kebutuhan Anda.
|
Metode |
Kasus penggunaan |
|
Metode 1: Gunakan image Docker untuk segera memulai lingkungan |
Untuk segera menyiapkan lingkungan pengembangan mandiri atau mereplikasi konfigurasi yang sama di berbagai mesin, gunakan image Docker. |
|
Metode 2: Gunakan plugin sparkmagic untuk memulai lingkungan |
Plugin sparkmagic untuk Jupyter Notebook berinteraksi dengan Spark melalui REST API. Saat ini, sparkmagic mendukung protokol Livy, Livy Lighter, dan Ilum. Konfigurasikan plugin sparkmagic di Jupyter Notebook dan gunakan Livy API dari EMR Serverless Spark untuk membuat lingkungan pengembangan yang efisien guna berinteraksi dengan kluster Spark remote. |
Prasyarat
-
Lengkapi prasyarat untuk metode yang Anda pilih:
-
Metode 1: Gunakan image Docker untuk segera memulai lingkungan: Docker telah diinstal. Untuk informasi selengkapnya, lihat dokumentasi resmi Docker.
-
Metode 2: Gunakan plugin sparkmagic untuk memulai lingkungan: Jupyter Notebook telah diinstal dan sedang berjalan. Untuk informasi selengkapnya, lihat Project Jupyter | Installing Jupyter.
Contoh dalam topik ini menggunakan Jupyter Notebook dengan Python 3.8.
-
-
Ruang kerja telah dibuat. Untuk informasi selengkapnya, lihat Buat ruang kerja.
Metode 1: Gunakan image Docker
Langkah 1: Buat gateway dan token akses
-
Buat dan mulai gateway.
-
Buka halaman gateway.
-
Masuk ke Konsol EMR.
-
Pada panel navigasi kiri, pilih EMR Serverless > Spark.
-
Pada halaman Spark, klik nama ruang kerja target Anda.
-
Pada halaman EMR Serverless Spark, klik pada panel navigasi kiri.
-
-
Klik tab Livy Gateway.
-
Pada halaman Livy Gateway, klik Create Livy Gateway.
-
Pada halaman Create Gateway, masukkan Name, misalnya
Livy-gateway, lalu klik create.Anda dapat menyesuaikan parameter lain sesuai kebutuhan. Untuk informasi selengkapnya, lihat Manage Gateways.
-
Pada halaman Livy Gateway, temukan gateway yang telah Anda buat lalu klik START pada kolom Actions.
-
-
Buat token.
-
Pada halaman Gateway, temukan
Livy-gatewaylalu klik Token Management pada kolom Actions. -
Klik Create Token.
-
Pada kotak dialog Create Token, masukkan Name, misalnya
Livy-token, lalu klik OK. -
Salin informasi token.
PentingSetelah token dibuat, Anda harus segera menyalinnya. Informasi token tidak dapat dilihat kembali nanti. Jika token kedaluwarsa atau hilang, buat token baru atau reset token tersebut.
-
Langkah 2: Tarik dan jalankan image Docker
-
Jalankan perintah berikut untuk menarik image Docker:
docker pull emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest -
Jalankan perintah berikut untuk menjalankan image:
docker run -p <host_port>:8888 emr-registry-registry.cn-hangzhou.cr.aliyuncs.com/serverless-spark-public/emr-spark-jupyter:latest <endpoint> <token>Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
<host_port>Ganti placeholder ini dengan port host Anda.
<endpoint>Ganti placeholder ini dengan endpoint Livy Gateway.
Pada halaman Livy Gateway, klik nama Livy Gateway yang telah Anda buat. Anda dapat menemukan endpoint pada tab Overview.
<token>Ganti placeholder ini dengan token yang telah Anda salin pada langkah sebelumnya.
Setelah image dijalankan, Anda akan melihat output yang mirip dengan berikut:
[I 2024-09-23 05:38:14.429 ServerApp] jupyter_lsp | extension was successfully linked. [I 2024-09-23 05:38:14.432 ServerApp] jupyter_server_terminals | extension was successfully linked. [I 2024-09-23 05:38:14.436 ServerApp] jupyterlab | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] notebook | extension was successfully linked. [I 2024-09-23 05:38:14.439 ServerApp] Writing Jupyter server cookie secret to /root/.local/share/jupyter/runtime/jupyter_cookie_secret [I 2024-09-23 05:38:14.596 ServerApp] notebook_shim | extension was successfully linked. [I 2024-09-23 05:38:14.624 ServerApp] notebook_shim | extension was successfully loaded. [I 2024-09-23 05:38:14.625 ServerApp] jupyter_lsp | extension was successfully loaded. [I 2024-09-23 05:38:14.626 ServerApp] jupyter_server_terminals | extension was successfully loaded. [I 2024-09-23 05:38:14.627 LabApp] JupyterLab extension loaded from /root/miniforge3/envs/livy/lib/python3.8/site-packages/jupyterlab [I 2024-09-23 05:38:14.627 LabApp] JupyterLab application directory is /root/miniforge3/envs/livy/share/jupyter/lab [I 2024-09-23 05:38:14.628 LabApp] Extension Manager is 'pypi'. [I 2024-09-23 05:38:14.637 ServerApp] jupyterlab | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] notebook | extension was successfully loaded. [I 2024-09-23 05:38:14.640 ServerApp] Serving notebooks from local directory: /root [I 2024-09-23 05:38:14.640 ServerApp] Jupyter Server 2.14.2 is running at: [I 2024-09-23 05:38:14.640 ServerApp] http://6eca53b95ca2:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** [I 2024-09-23 05:38:14.640 ServerApp] http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b****** -
Akses UI Jupyter.
Salin URL
http://127.0.0.1:8888/lab?token=258c0dd75e22a10fb6e2c87ac738c2a7ba6a314c6b******dari output tersebut dan buka di browser Anda. Anda kini dapat menggunakan layanan Jupyter untuk terhubung ke EMR Serverless Spark.Catatan-
Jika Anda terhubung melalui server remote, ganti alamat IP
127.0.0.1dengan alamat IP aktual server tersebut. -
Jika
host_portbukan8888saat Anda menjalankan image, ganti nomor port tersebut dengan nomor port yang sebenarnya.
-
Langkah 3: Uji konektivitas
-
Pada halaman JupyterLab, klik PySpark.
-
Jalankan kode berikut untuk mengkueri semua database yang dapat diakses:
spark.sql("show databases").show()Output berikut ditampilkan:
%%spark spark.sql("show databases").show() Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 1 livy-pxxx pyspark idle Link None ✔ SparkSession available as 'spark'. +--------------------+ | namespace| +--------------------+ | default| | xxx db| | xxx dome| | hive test| +--------------------+
Metode 2: Gunakan plugin sparkmagic
Langkah 1: Buat gateway dan token akses
-
Buat dan mulai gateway.
-
Buka halaman gateway.
-
Masuk ke Konsol EMR.
-
Pada panel navigasi kiri, pilih EMR Serverless > Spark.
-
Pada halaman Spark, klik nama ruang kerja target Anda.
-
Pada halaman EMR Serverless Spark, klik pada panel navigasi kiri.
-
-
Klik tab Livy Gateway.
-
Pada halaman Livy Gateway, klik Create Livy Gateway.
-
Pada halaman Create Gateway, masukkan Name, misalnya
Livy-gateway, lalu klik create.Anda dapat menyesuaikan parameter lain sesuai kebutuhan. Untuk informasi selengkapnya, lihat Manage Gateways.
-
Pada halaman Livy Gateway, temukan gateway yang telah Anda buat lalu klik START pada kolom Actions.
-
-
Buat token.
-
Pada halaman Gateway, temukan
Livy-gatewaylalu klik Token Management pada kolom Actions. -
Klik Create Token.
-
Pada kotak dialog Create Token, masukkan Name, misalnya
Livy-token, lalu klik OK. -
Salin informasi token.
PentingSetelah token dibuat, Anda harus segera menyalinnya. Informasi token tidak dapat dilihat kembali nanti. Jika token kedaluwarsa atau hilang, buat token baru atau reset token tersebut.
-
Langkah 2: Instal dan aktifkan plugin sparkmagic
-
Jalankan perintah berikut untuk menginstal plugin sparkmagic:
pip install sparkmagic -
Aktifkan ekstensi untuk lingkungan Jupyter Anda (Jupyter Notebook atau JupyterLab).
-
Untuk pengguna Jupyter Notebook:
jupyter nbextension enable --py --sys-prefix widgetsnbextension -
Untuk pengguna JupyterLab:
jupyter labextension install "@jupyter-widgets/jupyterlab-manager"
-
Untuk detail lebih lanjut dan opsi konfigurasi lanjutan plugin sparkmagic, lihat dokumentasi sparkmagic.
Langkah 3: Konfigurasikan dan mulai sesi Spark interaktif
-
Akses UI Jupyter. Untuk informasi selengkapnya, lihat JupyterLab.
-
Muat ekstensi sparkmagic.
%load_ext sparkmagic.magics -
Ubah konfigurasi startup sesi.
-
Tingkatkan timeout startup untuk mencegah kegagalan akibat penundaan penjadwalan sumber daya.
import sparkmagic.utils.configuration as conf conf.override("livy_session_startup_timeout_seconds", 1000) -
(Opsional) Sesuaikan konfigurasi sumber daya Spark.
Anda dapat menambahkan parameter seperti
ttldanconf. Untuk informasi selengkapnya, lihat Livy Docs - REST API.Sebagai contoh, konfigurasi berikut mengubah pengaturan sumber daya untuk driver.
%% spark config { "conf": { "spark.driver.cores": "1", "spark.driver.memory": "7g" } }
-
-
Buat sesi.
Buat sesi Spark di Jupyter Notebook menggunakan Python atau Scala, dengan menyediakan konfigurasi yang diperlukan.
%spark add -s <session_name> -l python -u https://<endpoint> -a username -p <token>%spark add -s <session_name> -l scala -u https://<endpoint> -a username -p <token>Ganti placeholder berikut dengan nilai aktual Anda.
Parameter
Deskripsi
<session_name>Nama sesi Spark. Anda dapat menentukan nama kustom.
<endpoint>Endpoint(Public) atau Endpoint(Private) dari tab Overview.
Jika Anda menggunakan private endpoint, pastikan mesin yang menjalankan Jupyter dideploy di wilayah yang sama dengan Livy Gateway dan awalan
https://pada endpoint diubah menjadihttp://.<token>Ganti placeholder ini dengan token yang telah Anda salin pada Langkah 1.
Contoh berikut menggunakan Python.
%spark add -s test -l python -u https://emr-spark-livy-gateway-cn-hangzhou.data.aliyun.com/api/v1/workspace/w-0aaxxx livycompute/lc-76c4pcxxx -a username -p t6k2zy Starting Spark application ID YARN Application ID Kind State Spark UI Driver log User Current session? 0 livy-idqxxx pyspark idle Link None ✓ SparkSession available as 'spark'.Mohon tunggu selama 1 hingga 5 menit hingga status Session berubah menjadi
idle. Hal ini menunjukkan bahwa Session telah berhasil dibuat dan siap digunakan. Pada titik ini, UI menampilkan detail Session yang baru dibuat, dan Anda dapat memulai pengembangan PySpark interaktif. Anda juga dapat melihat informasi Session pada tab Sessions untuk Livy Gateway target di Konsol Serverless Spark. -
Verifikasi sesi.
Setelah sesi berhasil dibuat, Anda dapat menjalankan kode menggunakan
%%spark. Sebagai contoh, gunakan kode berikut untuk melihat semua database di lingkungan Spark saat ini.%%spark spark.sql("show databases").show()Output berikut ditampilkan:
%%spark spark.sql("show databases").show() +---------+ |namespace| +---------+ | default| | testdb| +---------+
(Opsional) Langkah 4: Lepaskan sumber daya sesi
-
Pelepasan otomatis
Sesi secara otomatis dihentikan setelah dua jam tidak aktif.
-
Pelepasan manual
-
Dilepas melalui plugin
sparkmagic.%spark delete -s <session_name> -
Dilepas dari Konsol EMR Serverless Spark:
Pada tab Sessions Livy Gateway target, temukan sesi yang ingin Anda lepas lalu klik Off pada kolom Actions.
-