Hasilkan data pengujian menggunakan pekerjaan AWS Glue dan Python - AWS Prescriptive Guidance

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

Hasilkan data pengujian menggunakan pekerjaan AWS Glue dan Python

Moinul Al-Mamun, Amazon Web Services

Ringkasan

Pola ini menunjukkan kepada Anda cara cepat dan mudah menghasilkan jutaan file sampel secara bersamaan dengan membuat pekerjaan AWS Glue yang ditulis dengan Python. File sampel disimpan dalam bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3). Kemampuan untuk menghasilkan sejumlah besar file sampel dengan cepat penting untuk menguji atau mengevaluasi layanan di AWS Cloud. Misalnya, Anda dapat menguji kinerja DataBrew pekerjaan AWS Glue Studio atau AWS Glue dengan melakukan analisis data pada jutaan file kecil dalam awalan Amazon S3.

Meskipun Anda dapat menggunakan layanan AWS lainnya untuk menghasilkan kumpulan data sampel, kami menyarankan Anda menggunakan AWS Glue. Anda tidak perlu mengelola infrastruktur apa pun karena AWS Glue adalah layanan pemrosesan data tanpa server. Anda bisa membawa kode Anda dan menjalankannya di klaster AWS Glue. Selain itu, AWS Glue menyediakan, mengonfigurasi, dan menskalakan sumber daya yang diperlukan untuk menjalankan pekerjaan Anda. Anda hanya membayar untuk sumber daya yang digunakan pekerjaan Anda saat menjalankan.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi untuk bekerja dengan akun AWS

Versi produk

  • Python 3.9

  • AWS CLI versi 2

Batasan

Jumlah maksimum pekerjaan AWS Glue per pemicu adalah 50. Untuk informasi selengkapnya, lihat titik akhir dan kuota AWS Glue.

Arsitektur

Diagram berikut menggambarkan contoh arsitektur yang berpusat di sekitar pekerjaan AWS Glue yang menulis outputnya (yaitu, file sampel) ke bucket S3.

Alur kerja menunjukkan AWS CLI memulai pekerjaan AWS Glue yang menulis output ke bucket S3.

Diagram mencakup alur kerja berikut:

  1. Anda menggunakan AWS CLI, AWS Management Console, atau API untuk memulai pekerjaan AWS Glue. AWS CLI atau API memungkinkan Anda mengotomatiskan paralelisasi pekerjaan yang dipanggil dan mengurangi runtime untuk menghasilkan file sampel.

  2. Pekerjaan AWS Glue menghasilkan konten file secara acak, mengonversi konten menjadi format CSV, dan kemudian menyimpan konten sebagai objek Amazon S3 di bawah awalan umum. Setiap file kurang dari satu kilobyte. Pekerjaan AWS Glue menerima dua parameter pekerjaan yang ditentukan pengguna: dan. START_RANGE END_RANGE Anda dapat menggunakan parameter ini untuk mengatur nama file dan jumlah file yang dihasilkan di Amazon S3 oleh setiap pekerjaan yang dijalankan. Anda dapat menjalankan beberapa instance pekerjaan ini secara paralel (misalnya, 100 instance).

Alat

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

  • AWS Glue adalah layanan ekstrak, transformasi, dan beban (ETL) yang dikelola sepenuhnya. Ini membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

Praktik terbaik

Pertimbangkan praktik terbaik AWS Glue berikut saat Anda menerapkan pola ini:

  • Gunakan jenis pekerja AWS Glue yang tepat untuk mengurangi biaya. Kami menyarankan Anda memahami properti yang berbeda dari jenis pekerja, dan kemudian memilih jenis pekerja yang tepat untuk beban kerja Anda berdasarkan persyaratan CPU dan memori. Untuk pola ini, kami menyarankan Anda menggunakan pekerjaan shell Python sebagai jenis pekerjaan Anda untuk meminimalkan DPU dan mengurangi biaya. Untuk informasi selengkapnya, lihat Menambahkan lowongan di AWS Glue di Panduan Pengembang AWS Glue.

  • Gunakan batas konkurensi yang tepat untuk skala pekerjaan Anda. Kami menyarankan Anda mendasarkan konkurensi maksimum pekerjaan AWS Glue Anda pada kebutuhan waktu Anda dan jumlah file yang diperlukan.

  • Mulailah membuat sejumlah kecil file pada awalnya. Untuk mengurangi biaya dan menghemat waktu saat Anda membangun pekerjaan AWS Glue, mulailah dengan sejumlah kecil file (seperti 1.000). Ini dapat membuat pemecahan masalah lebih mudah. Jika menghasilkan sejumlah kecil file berhasil, maka Anda dapat menskalakan ke jumlah file yang lebih besar.

  • Jalankan secara lokal terlebih dahulu. Untuk mengurangi biaya dan menghemat waktu saat Anda membangun pekerjaan AWS Glue, mulailah pengembangan secara lokal dan uji kode Anda. Untuk petunjuk tentang menyiapkan wadah Docker yang dapat membantu Anda menulis pekerjaan AWS Glue extract, transform, and load (ETL) baik di shell maupun di lingkungan pengembangan terintegrasi (IDE), lihat pekerjaan Mengembangkan AWS Glue ETL secara lokal menggunakan postingan kontainer di AWS Big Data Blog.

Untuk praktik terbaik AWS Glue lainnya, lihat Praktik terbaik dalam dokumentasi AWS Glue.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat bucket S3 untuk menyimpan file.

Buat bucket S3 dan awalan di dalamnya.

catatan

Pola ini menggunakan s3://{your-s3-bucket-name}/small-files/ lokasi untuk tujuan demonstrasi.

Pengembang aplikasi

Buat dan konfigurasikan peran IAM.

Anda harus membuat peran IAM yang dapat digunakan oleh pekerjaan AWS Glue Anda untuk menulis ke bucket S3 Anda.

  1. Buat peran IAM (misalnya, disebut"AWSGlueServiceRole-smallfiles").

  2. Pilih AWS Glue sebagai entitas tepercaya kebijakan.

  3. Lampirkan kebijakan terkelola AWS yang dipanggil "AWSGlueServiceRole" ke peran tersebut.

  4. Buat kebijakan inline atau kebijakan terkelola pelanggan yang dipanggil "s3-small-file-access" berdasarkan konfigurasi berikut. Ganti "{bucket}" dengan nama bucket Anda.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::{bucket}/small-files/input/*" ] } ] }
  5. Lampirkan "s3-small-file-access" kebijakan ke peran Anda.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Buat pekerjaan AWS Glue.

Anda harus membuat pekerjaan AWS Glue yang menghasilkan konten Anda dan menyimpannya di bucket S3.

Buat pekerjaan AWS Glue, lalu konfigurasikan pekerjaan Anda dengan menyelesaikan langkah-langkah berikut:

  1. Masuk ke AWS Management Console dan buka konsol AWS Glue.

  2. Di panel navigasi, di bawah Integrasi Data dan ETL, pilih Pekerjaan.

  3. Di bagian Buat pekerjaan, pilih editor skrip Python Shell.

  4. Di bagian Opsi, pilih Buat skrip baru dengan kode boilerplate, lalu pilih Buat.

  5. Pilih Detail Pekerjaan.

  6. Untuk Nama, masukkan create_small_files.

  7. Untuk Peran IAM, pilih peran IAM yang Anda buat sebelumnya.

  8. Di bagian Pekerjaan ini berjalan, pilih Skrip baru yang akan ditulis oleh Anda.

  9. Perluas Properti lanjutan.

  10. Untuk Konkurensi maksimum, masukkan 100 untuk tujuan demonstrasi. Catatan: Konkurensi maksimum mendefinisikan berapa banyak contoh pekerjaan yang dapat Anda jalankan secara paralel.

  11. Pilih Simpan.

Pengembang aplikasi

Perbarui kode pekerjaan.

  1. Buka konsol AWS Glue.

  2. Di panel navigasi, pilih Tugas.

  3. Di bagian Pekerjaan Anda, pilih pekerjaan yang Anda buat sebelumnya.

  4. Pilih tab Script, dan kemudian perbarui skrip berdasarkan kode berikut. PerbaruiBUCKET_NAME,PREFIX, dan text_str variabel dengan nilai Anda.

    from awsglue.utils import getResolvedOptions import sys import boto3 from random import randrange # Two arguments args = getResolvedOptions(sys.argv, ['START_RANGE', 'END_RANGE']) START_RANGE = int(args['START_RANGE']) END_RANGE = int(args['END_RANGE']) BUCKET_NAME = '{BUCKET_NAME}' PREFIX = 'small-files/input/' s3 = boto3.resource('s3') for x in range(START_RANGE, END_RANGE): # generate file name file_name = f"input_{x}.txt" # generate text text_str = str(randrange(100000))+","+str(randrange(100000))+", " + str(randrange(10000000)) + "," + str(randrange(10000)) # write in s3 s3.Object(BUCKET_NAME, PREFIX + file_name).put(Body=text_str)
  5. Pilih Simpan.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan pekerjaan AWS Glue dari baris perintah.

Untuk menjalankan tugas AWS Glue Anda dari AWS CLI, jalankan perintah berikut menggunakan nilai Anda:

cmd:~$ aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"1000000"}' cmd:~$ aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000000","--END_RANGE":"2000000"}'
catatan

Untuk petunjuk tentang menjalankan tugas AWS Glue dari AWS Management Console, lihat tugas Jalankan AWS Glue di cerita AWS Management Console dalam pola ini.

Tip

Sebaiknya gunakan AWS CLI untuk menjalankan pekerjaan AWS Glue jika Anda ingin menjalankan beberapa eksekusi sekaligus dengan parameter berbeda, seperti yang ditunjukkan pada contoh di atas.

Untuk menghasilkan semua perintah AWS CLI yang diperlukan untuk menghasilkan jumlah file yang ditentukan menggunakan faktor paralelisasi tertentu, jalankan kode bash berikut (menggunakan nilai Anda):

# define parameters NUMBER_OF_FILES=10000000; PARALLELIZATION=50; # initialize _SB=0; # generate commands for i in $(seq 1 $PARALLELIZATION); do echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) * (i-1) + _SB))'","--END_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) * (i)))'"}'"'"; _SB=1; done

Jika Anda menggunakan skrip di atas, pertimbangkan hal berikut:

  • Skrip menyederhanakan pemanggilan dan pembuatan file kecil dalam skala besar.

  • Perbarui NUMBER_OF_FILES dan PARALLELIZATION dengan nilai-nilai Anda.

  • Script di atas mencetak daftar perintah yang harus Anda jalankan. Salin perintah output tersebut, lalu jalankan di terminal Anda.

  • Jika Anda ingin menjalankan perintah langsung dari dalam skrip, hapus echo pernyataan di baris 11.

catatan

 Untuk melihat contoh output dari skrip di atas, lihat Output skrip Shell di bagian Informasi tambahan dari pola ini.

Pengembang aplikasi

Jalankan pekerjaan AWS Glue di AWS Management Console.

  1. Masuk ke AWS Management Console dan buka konsol AWS Glue.

  2. Di panel navigasi, di bawah Integrasi Data dan ETL, pilih Pekerjaan.

  3. Di bagian Pekerjaan Anda, pilih pekerjaan Anda.

  4. Di bagian Parameter (opsional), perbarui parameter Anda.

  5. Pilih Tindakan, lalu pilih Jalankan pekerjaan.

  6. Ulangi langkah 3-5 sebanyak yang Anda butuhkan. Misalnya, untuk membuat 10 juta file, ulangi proses ini 10 kali.

Pengembang aplikasi

Periksa status pekerjaan AWS Glue Anda.

  1. Buka konsol AWS Glue.

  2. Di panel navigasi, pilih Tugas.

  3. Di bagian Pekerjaan Anda, pilih pekerjaan yang Anda buat sebelumnya (yaitu,create_small_files).

  4. Untuk mengetahui kemajuan dan pembuatan file Anda, tinjau Run ID, Run Status, dan kolom lainnya.

Pengembang aplikasi

Sumber daya terkait

Referensi

Panduan dan pola

Informasi tambahan

Tes benchmarking

Pola ini digunakan untuk menghasilkan 10 juta file menggunakan parameter paralelisasi yang berbeda sebagai bagian dari uji benchmarking. Tabel berikut menunjukkan output dari tes:

Paralelisasi

Jumlah file yang dihasilkan oleh pekerjaan yang dijalankan

Durasi Job

Kecepatan

10

1.000.000

6 jam, 40 menit

Sangat lambat

50

200.000

80 menit

Sedang

100

100.000

40 menit

Cepat

Jika Anda ingin membuat proses lebih cepat, Anda dapat mengonfigurasi lebih banyak proses bersamaan dalam konfigurasi pekerjaan Anda. Anda dapat dengan mudah menyesuaikan konfigurasi pekerjaan berdasarkan kebutuhan Anda, tetapi perlu diingat bahwa ada batas kuota layanan AWS Glue. Untuk informasi selengkapnya, lihat titik akhir dan kuota AWS Glue.

Keluaran skrip shell

Contoh berikut menunjukkan output skrip shell dari pekerjaan Jalankan AWS Glue dari cerita baris perintah dalam pola ini.

user@MUC-1234567890 MINGW64 ~ $ # define parameters NUMBER_OF_FILES=10000000; PARALLELIZATION=50; # initialize _SB=0; # generate commands for i in $(seq 1 $PARALLELIZATION); do echo aws glue start-job-run --job-name create_small_files --arguments "'"'{"--START_RANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i-1) + SB))'","--ENDRANGE":"'$(((NUMBER_OF_FILES/PARALLELIZATION) (i)))'"}'"'"; _SB=1; done aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"0","--END_RANGE":"200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"200001","--END_RANGE":"400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"400001","--END_RANGE":"600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"600001","--END_RANGE":"800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"800001","--END_RANGE":"1000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1000001","--END_RANGE":"1200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1200001","--END_RANGE":"1400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1400001","--END_RANGE":"1600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1600001","--END_RANGE":"1800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"1800001","--END_RANGE":"2000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2000001","--END_RANGE":"2200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2200001","--END_RANGE":"2400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2400001","--END_RANGE":"2600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2600001","--END_RANGE":"2800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"2800001","--END_RANGE":"3000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3000001","--END_RANGE":"3200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3200001","--END_RANGE":"3400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3400001","--END_RANGE":"3600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3600001","--END_RANGE":"3800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"3800001","--END_RANGE":"4000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4000001","--END_RANGE":"4200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4200001","--END_RANGE":"4400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4400001","--END_RANGE":"4600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4600001","--END_RANGE":"4800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"4800001","--END_RANGE":"5000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5000001","--END_RANGE":"5200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5200001","--END_RANGE":"5400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5400001","--END_RANGE":"5600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5600001","--END_RANGE":"5800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"5800001","--END_RANGE":"6000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6000001","--END_RANGE":"6200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6200001","--END_RANGE":"6400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6400001","--END_RANGE":"6600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6600001","--END_RANGE":"6800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"6800001","--END_RANGE":"7000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7000001","--END_RANGE":"7200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7200001","--END_RANGE":"7400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7400001","--END_RANGE":"7600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7600001","--END_RANGE":"7800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"7800001","--END_RANGE":"8000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8000001","--END_RANGE":"8200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8200001","--END_RANGE":"8400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8400001","--END_RANGE":"8600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8600001","--END_RANGE":"8800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"8800001","--END_RANGE":"9000000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9000001","--END_RANGE":"9200000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9200001","--END_RANGE":"9400000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9400001","--END_RANGE":"9600000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9600001","--END_RANGE":"9800000"}' aws glue start-job-run --job-name create_small_files --arguments '{"--START_RANGE":"9800001","--END_RANGE":"10000000"}' user@MUC-1234567890 MINGW64 ~

FAQ

Berapa banyak pekerjaan yang berjalan bersamaan atau paralel yang harus saya gunakan?

Jumlah proses bersamaan dan pekerjaan paralel tergantung pada kebutuhan waktu Anda dan jumlah file pengujian yang diinginkan. Kami menyarankan Anda memeriksa ukuran file yang Anda buat. Pertama, periksa berapa lama waktu yang dibutuhkan pekerjaan AWS Glue untuk menghasilkan jumlah file yang Anda inginkan. Kemudian, gunakan jumlah lari bersamaan yang tepat untuk memenuhi tujuan Anda. Misalnya, jika Anda berasumsi bahwa 100.000 file membutuhkan waktu 40 menit untuk menyelesaikan proses tetapi waktu target Anda adalah 30 menit, maka Anda harus meningkatkan pengaturan konkurensi untuk pekerjaan AWS Glue Anda.

Jenis konten apa yang dapat saya buat menggunakan pola ini?

Anda dapat membuat semua jenis konten, seperti file teks dengan pembatas yang berbeda (misalnya, PIPE, JSON, atau CSV). Pola ini menggunakan Boto3 untuk menulis ke file dan kemudian menyimpan file dalam ember S3.

Tingkat izin IAM apa yang saya perlukan di bucket S3?

Anda harus memiliki kebijakan berbasis identitas yang memungkinkan Write akses ke objek di bucket S3 Anda. Untuk informasi selengkapnya, lihat Amazon S3: Mengizinkan akses baca dan tulis ke objek dalam bucket S3 dalam dokumentasi Amazon S3.