Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Luncurkan pekerjaan Spark di cluster EMR sementara menggunakan fungsi Lambda
Dhrubajyoti Mukherjeee, Amazon Web Services
Ringkasan
Pola ini menggunakan aksi Amazon EMR RunJobFlow API untuk meluncurkan klaster sementara untuk menjalankan pekerjaan Spark dari fungsi Lambda. Cluster EMR sementara dirancang untuk dihentikan segera setelah pekerjaan selesai atau jika terjadi kesalahan. Cluster transien memberikan penghematan biaya karena hanya berjalan selama waktu komputasi, dan memberikan skalabilitas dan fleksibilitas dalam lingkungan cloud.
Cluster EMR transien diluncurkan menggunakan API Boto3 dan bahasa pemrograman Python dalam fungsi Lambda. Fungsi Lambda, yang ditulis dengan Python, memberikan fleksibilitas tambahan untuk memulai cluster saat dibutuhkan.
Untuk mendemonstrasikan komputasi dan output batch sampel, pola ini akan meluncurkan pekerjaan Spark di cluster EMR dari fungsi Lambda dan menjalankan komputasi batch terhadap contoh data penjualan perusahaan fiksi. Output dari pekerjaan Spark akan menjadi file nilai yang dipisahkan koma (CSV) di Amazon Simple Storage Service (Amazon S3). File data input, file Spark .jar, cuplikan kode, dan CloudFormation template AWS untuk peran virtual private cloud (VPC) dan AWS Identity and Access Management (IAM) untuk menjalankan komputasi disediakan sebagai lampiran.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif
Batasan
Hanya satu pekerjaan Spark yang dapat dimulai dari kode sekaligus.
Versi produk
Diuji di Amazon EMR 6.0.0
Arsitektur
Tumpukan teknologi target
Amazon EMR
AWS Lambda
Amazon S3
Apache Spark
Arsitektur target

Otomatisasi dan skala
Untuk mengotomatiskan komputasi batch Spark-EMR, Anda dapat menggunakan salah satu dari opsi berikut.
Menerapkan EventBridge aturan Amazon yang dapat memulai fungsi Lambda dalam jadwal cron. Untuk informasi selengkapnya, lihat Tutorial: Menjadwalkan fungsi AWS Lambda menggunakan. EventBridge
Konfigurasikan pemberitahuan peristiwa Amazon S3 untuk memulai fungsi Lambda saat kedatangan file.
Teruskan parameter input ke fungsi AWS Lambda melalui badan peristiwa dan variabel lingkungan Lambda.
Alat
Layanan AWS
Amazon EMR adalah platform cluster terkelola yang menyederhanakan menjalankan kerangka kerja data besar di AWS untuk memproses dan menganalisis data dalam jumlah besar.
AWS Lambda adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
Alat lainnya
Apache Spark
adalah mesin analisis multi-bahasa untuk pemrosesan data skala besar.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat peran IAM dan VPC. | Jika Anda sudah memiliki peran AWS Lambda dan Amazon EMR IAM serta VPC, Anda dapat melewati langkah ini. Untuk menjalankan kode, baik cluster EMR dan fungsi Lambda memerlukan peran IAM. Cluster EMR juga membutuhkan VPC dengan subnet publik atau subnet pribadi dengan gateway NAT. Untuk membuat semua peran IAM dan VPC secara otomatis, gunakan templat CloudFormation AWS terlampir apa adanya, atau Anda dapat membuat peran dan VPC secara manual seperti yang ditentukan di bagian Informasi tambahan. | Arsitek awan |
Perhatikan kunci keluaran CloudFormation template AWS. | Setelah CloudFormation template berhasil diterapkan, navigasikan ke tab Output di konsol CloudFormation AWS. Perhatikan lima tombol output:
Anda akan menggunakan nilai-nilai dari tombol-tombol ini saat Anda membuat fungsi Lambda. | Arsitek awan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Unggah file Spark .jar. | Unggah file Spark .jar ke bucket S3 yang dibuat oleh CloudFormation AWS stack. Nama bucket sama dengan tombol output | AWS Umum |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat fungsi Lambda. | Di konsol Lambda, buat fungsi Lambda Python 3.9+ dengan peran eksekusi. Kebijakan peran eksekusi harus mengizinkan Lambda meluncurkan klaster EMR. (Lihat CloudFormation template AWS terlampir.) | Insinyur data, insinyur Cloud |
Salin dan tempel kode. | Ganti kode dalam | Insinyur data, insinyur Cloud |
Ubah parameter dalam kode. | Ikuti komentar dalam kode untuk mengubah nilai parameter agar sesuai dengan akun AWS Anda. | Insinyur data, insinyur Cloud |
Luncurkan fungsi untuk memulai cluster. | Luncurkan fungsi untuk memulai pembuatan cluster EMR sementara dengan file Spark .jar yang disediakan. Ini akan menjalankan pekerjaan Spark dan berakhir secara otomatis ketika pekerjaan selesai. | Insinyur data, insinyur Cloud |
Periksa status cluster EMR. | Setelah kluster EMR dimulai, ia muncul di konsol EMR Amazon di bawah tab Clusters. Kesalahan apa pun saat meluncurkan cluster atau menjalankan pekerjaan dapat diperiksa sesuai dengan itu. | Insinyur data, insinyur Cloud |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Unggah file Spark .jar. | Unduh file Spark .jar dari bagian Lampiran dan unggah ke bucket S3. | Insinyur data, insinyur Cloud |
Unggah dataset input. | Unggah | Insinyur data, insinyur Cloud |
Tempel kode Lambda dan ubah parameternya. | Salin kode dari bagian Alat, dan tempel kode dalam fungsi Lambda, ganti file kode | Insinyur data, insinyur Cloud |
Luncurkan fungsi dan verifikasi output. | Setelah fungsi Lambda memulai cluster dengan pekerjaan Spark yang disediakan, ia menghasilkan file.csv di bucket S3. | Insinyur data, insinyur Cloud |
Sumber daya terkait
Informasi tambahan
Kode
""" Copy paste the following code in your Lambda function. Make sure to change the following key parameters for the API as per your account -Name (Name of Spark cluster) -LogUri (S3 bucket to store EMR logs) -Ec2SubnetId (The subnet to launch the cluster into) -JobFlowRole (Service role for EC2) -ServiceRole (Service role for Amazon EMR) The following parameters are additional parameters for the Spark job itself. Change the bucket name and prefix for the Spark job (located at the bottom). -s3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar (Spark jar file) -s3://your-bucket-name/prefix/fake_sales_data.csv (Input data file in S3) -s3://your-bucket-name/prefix/outputs/report_1/ (Output location in S3) """ import boto3 client = boto3.client('emr') def lambda_handler(event, context): response = client.run_job_flow( Name='spark_job_cluster', LogUri='s3://your-bucket-name/prefix/logs', ReleaseLabel='emr-6.0.0', Instances={ 'MasterInstanceType': 'm5.xlarge', 'SlaveInstanceType': 'm5.large', 'InstanceCount': 1, 'KeepJobFlowAliveWhenNoSteps': False, 'TerminationProtected': False, 'Ec2SubnetId': 'subnet-XXXXXXXXXXXXXX' }, Applications=[{'Name': 'Spark'}], Configurations=[ {'Classification': 'spark-hive-site', 'Properties': { 'hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory'} } ], VisibleToAllUsers=True, JobFlowRole='EMRLambda-EMREC2InstanceProfile-XXXXXXXXX', ServiceRole='EMRLambda-EMRRole-XXXXXXXXX', Steps=[ { 'Name': 'flow-log-analysis', 'ActionOnFailure': 'TERMINATE_CLUSTER', 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', '--executor-memory', '6G', '--num-executors', '1', '--executor-cores', '2', '--class', 'com.aws.emr.ProfitCalc', 's3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar', 's3://your-bucket-name/prefix/fake_sales_data.csv', 's3://your-bucket-name/prefix/outputs/report_1/' ] } } ] )
Peran IAM dan pembuatan VPC
Untuk meluncurkan cluster EMR dalam fungsi Lambda, diperlukan peran VPC dan IAM. Anda dapat mengatur peran VPC dan IAM dengan menggunakan CloudFormation templat AWS di bagian Lampiran pola ini, atau Anda dapat membuatnya secara manual menggunakan tautan berikut.
Peran IAM berikut diperlukan untuk menjalankan Lambda dan Amazon EMR.
Peran eksekusi Lambda
Peran eksekusi fungsi Lambda memberinya izin untuk mengakses layanan dan sumber daya AWS.
Peran layanan untuk Amazon EMR
Peran Amazon EMR mendefinisikan tindakan yang diizinkan untuk Amazon EMR saat menyediakan sumber daya dan melakukan tugas tingkat layanan yang tidak dilakukan dalam konteks instans Amazon Elastic Compute Cloud (Amazon) yang berjalan dalam klaster. EC2 Misalnya, peran layanan digunakan untuk menyediakan EC2 instance saat klaster diluncurkan.
Peran layanan untuk EC2 instance
Peran layanan untuk EC2 instance klaster (juga disebut profil EC2 instans untuk Amazon EMR) adalah jenis peran layanan khusus yang ditetapkan ke EC2 setiap instance dalam klaster EMR Amazon saat instance diluncurkan. Proses aplikasi yang berjalan di atas Apache Hadoop mengambil peran ini sebagai izin untuk berinteraksi dengan layanan AWS lainnya.
VPC dan pembuatan subnet
Anda dapat membuat VPC dari konsol VPC.
Lampiran
Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip