Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memasang kernel dan pustaka tambahan
Saat Anda membuat cluster dengan JupyterHub di AmazonEMR, kernel Python 3 default untuk Jupyter bersama dengan kernel PySpark dan Spark untuk Sparkmagic diinstal pada wadah Docker. Anda bisa memasang kernel tambahan. Anda juga dapat menginstal pustaka tambahan dan paket lalu mengimpornya untuk shell yang sesuai.
Menginstal sebuah kernel
Kernel dipasang di dalam kontainer Docker. Cara termudah untuk mencapai ini adalah untuk membuat skrip bash dengan instalasi perintah, simpan ke simpul utama, dan kemudian gunakan perintah sudo docker exec jupyterhub
untuk menjalankan skrip dalam script_name
jupyterhub
kontainer. Contoh skrip berikut menginstal kernel, dan kemudian menginstal beberapa pustaka tersebut untuk kernel di simpul utama sehingga nantinya Anda dapat mengimpor pustaka menggunakan kernel di Jupyter.
#!/bin/bash # Install Python 2 kernel conda create -n py27 python=2.7 anaconda source /opt/conda/envs/py27/bin/activate apt-get update apt-get install -y gcc /opt/conda/envs/py27/bin/python -m pip install --upgrade ipykernel /opt/conda/envs/py27/bin/python -m ipykernel install # Install libraries for Python 2 /opt/conda/envs/py27/bin/pip install paramiko nltk scipy numpy scikit-learn pandas
Untuk menginstal kernel dan pustaka dalam kontainer, buka koneksi terminal ke simpul utama, simpan script ke /etc/jupyter/install_kernels.sh
, dan jalankan perintah berikut pada baris perintah simpul utama:
sudo docker exec jupyterhub bash /etc/jupyter/install_kernels.sh
Menggunakan pustaka dan memasang pustaka tambahan
Satu set inti pembelajaran mesin dan perpustakaan ilmu data untuk Python 3 sudah diinstal sebelumnya di Amazon JupyterHub . EMR Anda dapat menggunakan sudo docker exec jupyterhub bash -c "conda list"
dan sudo docker exec jupyterhub bash -c "pip freeze"
.
Jika tugas Spark membutuhkan pustaka pada simpul pekerja, kami sarankan Anda menggunakan tindakan bootstrap untuk menjalankan skrip untuk menginstal pustaka ketika Anda membuat klaster. Tindakan bootstrap berjalan pada semua simpul utama selama proses pembuatan klaster, yang menyederhanakan instalasi. Jika Anda menginstal pustaka pada simpul inti/pekerja setelah klaster berjalan, operasi lebih kompleks. Kami menyediakan contoh program Python di bagian ini yang menunjukkan cara menginstal pustaka ini.
Tindakan bootstrap dan contoh program Python yang ditampilkan di bagian ini menggunakan skrip bash yang disimpan ke Amazon S3 untuk menginstal pustaka pada semua simpul.
Skrip direferensikan dalam contoh berikut menggunakan pip
untuk menginstal paramiko, nltk, scipy, scikit-learn, dan for the Python 3 kernel:
#!/bin/bash sudo python3 -m pip install boto3 paramiko nltk scipy scikit-learn pandas
Setelah Anda membuat skrip, unggah ke lokasi di Amazon S3, misalnya, s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
. Untuk informasi selengkapnya, lihat Mengunggah objek di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon sehingga Anda dapat menggunakannya dalam tindakan bootstrap atau dalam program Python Anda.
Untuk menentukan tindakan bootstrap yang menginstal pustaka di semua node saat Anda membuat klaster menggunakan AWS CLI
Buat skrip yang mirip dengan contoh sebelumnya dan simpan ke lokasi di Amazon S3. Kami menggunakan contoh
s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
.Buat cluster dengan JupyterHub dan gunakan
Path
argumen--bootstrap-actions
opsi untuk menentukan lokasi skrip seperti yang ditunjukkan pada contoh berikut:catatan
Karakter lanjutan baris Linux (\) disertakan agar mudah dibaca Karakter ini bisa dihapus atau digunakan dalam perintah Linux. Untuk Windows, hapus atau ganti dengan tanda sisipan (^).
aws emr create-cluster --name="
MyJupyterHubCluster
" --release-label emr-5.36.2 \ --applications Name=JupyterHub --log-uris3://amzn-s3-demo-bucket/MyJupyterClusterLogs
\ --use-default-roles --instance-type m5.xlarge --instance-count2
--ec2-attributes KeyName=MyKeyPair
\ --bootstrap-actions Path=s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
,Name=InstallJupyterLibs
Untuk menentukan tindakan bootstrap yang menginstal pustaka pada semua simpul ketika Anda membuat sebuah klaster menggunakan konsol
Arahkan ke EMR konsol Amazon baru dan pilih Beralih ke konsol lama dari navigasi samping. Untuk informasi selengkapnya tentang apa yang diharapkan saat beralih ke konsol lama, lihat Menggunakan konsol lama.
-
Pilih Buat klaster, Buka opsi lanjutan.
Tentukan pengaturan untuk Perangkat Lunak dan Langkah dan Perangkat Keras yang sesuai untuk aplikasi Anda.
Pada Pengaturan Klaster Umum layar, perluas Tindakan Bootstrap.
Untuk Menambahkan tindakan bootstrap, pilih Tindakan kustom, Konfigurasikan dan tambahkan.
Untuk Nama, masukkan nama yang ramah. Untuk lokasi Script, masukkan lokasi di Amazon S3 skrip Anda (contoh yang kami gunakan adalah s3://amzn-s3-demo-bucket/ install-my-jupyter-libraries .sh). Biarkan Pendapat opsional kosong, dan pilih Tambahkan.
Tentukan pengaturan lain untuk klaster Anda, dan pilih Selanjutnya.
Tentukan pengaturan keamanan, dan pilih Buat Klaster.
contoh Menginstal pustaka pada simpul inti dari sebuah klaster berjalan
Setelah Anda menginstal pustaka pada simpul utama dari dalam Jupyter, Anda dapat menginstal pustaka pada simpul utama yang sedang dalam berbagai cara. Contoh berikut menunjukkan program Python yang ditulis untuk berjalan pada mesin lokal. Ketika Anda menjalankan program Python secara lokal, ia menggunakan AWS-RunShellScript
dari AWS Systems Manager untuk menjalankan skrip contoh, yang ditunjukkan sebelumnya di bagian ini, yang menginstal pustaka pada node inti cluster.
import argparse import time import boto3 def install_libraries_on_core_nodes(cluster_id, script_path, emr_client, ssm_client): """ Copies and runs a shell script on the core nodes in the cluster. :param cluster_id: The ID of the cluster. :param script_path: The path to the script, typically an Amazon S3 object URL. :param emr_client: The Boto3 Amazon EMR client. :param ssm_client: The Boto3 AWS Systems Manager client. """ core_nodes = emr_client.list_instances( ClusterId=cluster_id, InstanceGroupTypes=["CORE"] )["Instances"] core_instance_ids = [node["Ec2InstanceId"] for node in core_nodes] print(f"Found core instances: {core_instance_ids}.") commands = [ # Copy the shell script from Amazon S3 to each node instance. f"aws s3 cp {script_path} /home/hadoop", # Run the shell script to install libraries on each node instance. "bash /home/hadoop/install_libraries.sh", ] for command in commands: print(f"Sending '{command}' to core instances...") command_id = ssm_client.send_command( InstanceIds=core_instance_ids, DocumentName="AWS-RunShellScript", Parameters={"commands": [command]}, TimeoutSeconds=3600, )["Command"]["CommandId"] while True: # Verify the previous step succeeded before running the next step. cmd_result = ssm_client.list_commands(CommandId=command_id)["Commands"][0] if cmd_result["StatusDetails"] == "Success": print(f"Command succeeded.") break elif cmd_result["StatusDetails"] in ["Pending", "InProgress"]: print(f"Command status is {cmd_result['StatusDetails']}, waiting...") time.sleep(10) else: print(f"Command status is {cmd_result['StatusDetails']}, quitting.") raise RuntimeError( f"Command {command} failed to run. " f"Details: {cmd_result['StatusDetails']}" ) def main(): parser = argparse.ArgumentParser() parser.add_argument("cluster_id", help="The ID of the cluster.") parser.add_argument("script_path", help="The path to the script in Amazon S3.") args = parser.parse_args() emr_client = boto3.client("emr") ssm_client = boto3.client("ssm") install_libraries_on_core_nodes( args.cluster_id, args.script_path, emr_client, ssm_client ) if __name__ == "__main__": main()