

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
<a name="dev-endpoint-tutorial-local-jupyter"></a>

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](https://en.wikipedia.org/wiki/Port_forwarding) di Wikipedia.

## Langkah 1: Instal JupyterLab dan Sparkmagic
<a name="dev-endpoint-tutorial-local-jupyter-install"></a>

Anda dapat menginstal JupyterLab dengan menggunakan `conda` atau`pip`. `conda`adalah sistem manajemen paket open-source dan sistem manajemen lingkungan yang berjalan di Windows, macOS, dan Linux. `pip`adalah 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
   ```

1. Periksa direktori `sparkmagic` dari `Location`. 

   ```
   $ pip show sparkmagic | grep Location
   Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
   ```

1. Ubah direktori Anda ke direktori yang dikembalikan`Location`, 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
   ```

1. 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
<a name="dev-endpoint-tutorial-local-jupyter-start"></a>

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
<a name="dev-endpoint-tutorial-local-jupyter-port-forward"></a>

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](https://git-scm.com/downloads), atau Anda dapat menginstal [Cygwin](https://www.cygwin.com/).

1. 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. 

1. 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
<a name="dev-endpoint-tutorial-local-jupyter-list-schema"></a>

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()
   ```

1. Periksa apakah AWS Glue Data Catalog integrasi berfungsi. Perintah berikut mencantumkan tabel dalam Katalog Data.

   ```
   spark.sql("show tables").show()
   ```

1. 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
<a name="dev-endpoint-tutorial-local-jupyter-troubleshooting"></a>
+ 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](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html#installation-problems) 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.