Luncurkan pekerjaan Spark di cluster EMR sementara menggunakan fungsi Lambda - AWS Prescriptive Guidance

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

Lambda ke Amazon EMR dan Spark ke Amazon S3

Otomatisasi dan skala

Untuk mengotomatiskan komputasi batch Spark-EMR, Anda dapat menggunakan salah satu dari opsi berikut.

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

TugasDeskripsiKeterampilan 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:

  • S3Bucket

  • LambdaExecutionRole

  • ServiceRole

  • JobFlowRole

  • Ec2SubnetId

Anda akan menggunakan nilai-nilai dari tombol-tombol ini saat Anda membuat fungsi Lambda.

Arsitek awan
TugasDeskripsiKeterampilan yang dibutuhkan

Unggah file Spark .jar.

Unggah file Spark .jar ke bucket S3 yang dibuat oleh CloudFormation AWS stack. Nama bucket sama dengan tombol outputS3Bucket.

AWS Umum
TugasDeskripsiKeterampilan 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 lambda_function.py file dengan kode dari bagian Informasi tambahan dari pola ini.

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
TugasDeskripsiKeterampilan 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 fake_sales_data.csv file terlampir ke bucket S3.

Insinyur data, insinyur Cloud

Tempel kode Lambda dan ubah parameternya.

Salin kode dari bagian Alat, dan tempel kode dalam fungsi Lambda, ganti file kodelambda_function.py. Ubah nilai parameter agar sesuai dengan akun Anda.

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