Intinya
AWS EMR API (Elastic MapReduce) digunakan untuk mengelola klaster big data berbasis Hadoop, Spark, Hive, dan Presto. Anda dapat membuat klaster, mengirimkan pekerjaan sebagai langkah, mengaktifkan auto-scaling sesuai beban kerja, dan menghentikan klaster setelah selesai. Autentikasi menggunakan AWS IAM. Untuk validasi, gunakan Apidog untuk menguji konfigurasi klaster, simulasi pengiriman pekerjaan via struktur API, serta dokumentasi pipeline data Anda.
Pengantar
AWS EMR adalah layanan Hadoop/Spark terkelola di AWS untuk proses analitik, machine learning, dan pipeline ETL skala besar. Alih-alih mengelola Hadoop klaster sendiri, AWS menangani infrastruktur di balik layar.
EMR berjalan pada instans EC2 dalam satu klaster. Anda harus menentukan:
- Tipe instans (master, core, task)
- Aplikasi yang diinstal (Spark, Hadoop, Hive, Presto, HBase)
- Bootstrap actions (skrip penyiapan awal)
- Langkah-langkah eksekusi pekerjaan
API EMR memungkinkan otomatisasi penuh: membuat klaster, kirim pekerjaan, pantau progres, dan integrasi dengan layanan AWS lain.
💡 Tips: Untuk membangun pipeline data, Apidog sangat membantu dalam pengujian konfigurasi klaster, validasi job definition, serta dokumentasi workflow EMR sebelum menjalankan data pipeline produksi.
Uji API AWS dengan Apidog - gratis
Setelah mengikuti panduan ini, Anda bisa:
- Membuat & mengonfigurasi klaster EMR via API
- Mengirimkan pekerjaan lewat langkah
- Mengelola auto-scaling
- Memantau kesehatan klaster & progres job
- Optimasi biaya melalui instance fleet & spot instance
Autentikasi dengan AWS
EMR menggunakan autentikasi standar AWS via IAM.
Pendekatan AWS SDK (Direkomendasikan)
import { EMRClient, RunJobFlowCommand } from '@aws-sdk/client-emr'
const client = new EMRClient({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
}
})
API Langsung dengan SigV4
Gunakan AWS Signature Versi 4. Disarankan memakai SDK (boto3, AWS CLI) atau buat signature manual.
aws emr list-clusters --region us-east-1
Izin IAM
Kebijakan minimum untuk manajemen EMR:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticmapreduce:*",
"ec2:Describe*",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": "*"
}
]
}
Membuat Klaster
Pembuatan Klaster Dasar
aws emr create-cluster \
--name "My Spark Cluster" \
--release-label emr-7.0.0 \
--applications Name=Spark Name=Hadoop \
--instance-type m5.xlarge \
--instance-count 3 \
--service-role EMR_DefaultRole \
--job-flow-role EMR_EC2_DefaultRole
Melalui API (RunJobFlow)
{
"Name": "Data Processing Cluster",
"ReleaseLabel": "emr-7.0.0",
"Applications": [
{ "Name": "Spark" },
{ "Name": "Hadoop" },
{ "Name": "Hive" }
],
"Instances": {
"MasterInstanceType": "m5.xlarge",
"SlaveInstanceType": "m5.xlarge",
"InstanceCount": 3,
"KeepJobFlowAliveWhenNoSteps": true,
"TerminationProtected": false
},
"Steps": [],
"ServiceRole": "EMR_DefaultRole",
"JobFlowRole": "EMR_EC2_DefaultRole",
"LogUri": "s3://my-bucket/emr-logs/",
"Tags": [
{ "Key": "Environment", "Value": "Production" }
]
}
Respons:
{
"JobFlowId": "j-ABC123DEF456"
}
Grup Instans vs. Instans Fleet
Grup instans: Setiap grup (master/core/task) menggunakan satu tipe instans tetap.
Instans fleet: Bisa beberapa tipe instans per grup. EMR otomatis memilih tipe berdasarkan harga & ketersediaan.
{
"Instances": {
"InstanceFleets": [
{
"Name": "MasterFleet",
"InstanceFleetType": "MASTER",
"TargetOnDemandCapacity": 1,
"InstanceTypeConfigs": [
{ "InstanceType": "m5.xlarge" },
{ "InstanceType": "m4.xlarge" }
]
},
{
"Name": "CoreFleet",
"InstanceFleetType": "CORE",
"TargetOnDemandCapacity": 2,
"TargetSpotCapacity": 4,
"InstanceTypeConfigs": [
{ "InstanceType": "m5.2xlarge" },
{ "InstanceType": "m4.2xlarge" }
],
"LaunchSpecifications": {
"SpotSpecification": {
"TimeoutDurationMinutes": 60,
"TimeoutAction": "SWITCH_TO_ON_DEMAND"
}
}
}
]
}
}
Mengirimkan Pekerjaan sebagai Langkah-langkah
EMR mengeksekusi job sebagai "langkah" (steps) berurutan.
Menambahkan Langkah Spark
aws emr add-steps \
--cluster-id j-ABC123DEF456 \
--steps '[
{
"Name": "Process Data",
"ActionOnFailure": "CONTINUE",
"HadoopJarStep": {
"Jar": "command-runner.jar",
"Args": [
"spark-submit",
"--deploy-mode",
"cluster",
"--class",
"com.example.DataProcessor",
"s3://my-bucket/jars/processor.jar",
"s3://my-bucket/input/",
"s3://my-bucket/output/"
]
}
}
]'
Melalui API (AddJobFlowSteps)
{
"JobFlowId": "j-ABC123DEF456",
"Steps": [
{
"Name": "Spark ETL Job",
"ActionOnFailure": "CONTINUE",
"HadoopJarStep": {
"Jar": "command-runner.jar",
"Args": [
"spark-submit",
"--executor-memory",
"4g",
"--executor-cores",
"2",
"s3://my-bucket/scripts/process.py",
"--input",
"s3://my-bucket/input/",
"--output",
"s3://my-bucket/output/"
]
}
}
]
}
Opsi ActionOnFailure
-
TERMINATE_CLUSTER: Klaster dihentikan jika step gagal -
CANCEL_AND_WAIT: Step berikutnya dibatalkan, klaster tetap aktif -
CONTINUE: Lanjut ke step berikutnya
Langkah Hive
{
"Name": "Hive Query",
"HadoopJarStep": {
"Jar": "command-runner.jar",
"Args": [
"hive-script",
"--run-hive-script",
"--args",
"-f",
"s3://my-bucket/scripts/transform.q"
]
}
}
Auto-scaling
EMR dapat secara otomatis menambah/mengurangi node tugas sesuai beban.
Membuat Kebijakan Auto-scaling
aws emr put-auto-scaling-policy \
--cluster-id j-ABC123DEF456 \
--instance-group-id ig-ABC123 \
--auto-scaling-policy '{
"Constraints": {
"MinCapacity": 2,
"MaxCapacity": 10
},
"Rules": [
{
"Name": "ScaleOut",
"Description": "Add nodes when memory is high",
"Action": {
"SimpleScalingPolicyConfiguration": {
"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": 2,
"CoolDown": 300
}
},
"Trigger": {
"CloudWatchAlarmDefinition": {
"ComparisonOperator": "GREATER_THAN",
"EvaluationPeriods": 3,
"MetricName": "MemoryAvailableMB",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Threshold": 2000,
"Statistic": "AVERAGE"
}
}
}
]
}'
Metrik untuk Scaling
-
MemoryAvailableMB: Memori bebas -
MemoryTotalMB: Total memori -
HDFSUtilization: Penggunaan disk HDFS -
AppsRunning: Jumlah aplikasi YARN berjalan -
AppsPending: Jumlah aplikasi YARN menunggu
Pemantauan dan Logging
Daftar Klaster
aws emr list-clusters --states RUNNING
Deskripsi Klaster
aws emr describe-cluster --cluster-id j-ABC123DEF456
Contoh respons:
{
"Cluster": {
"Id": "j-ABC123DEF456",
"Name": "My Cluster",
"Status": {
"State": "RUNNING",
"StateChangeReason": {},
"Timeline": {
"CreationDateTime": "2026-03-24T10:00:00.000Z"
}
},
"Applications": [
{ "Name": "Spark", "Version": "3.5.0" }
],
"InstanceCollectionType": "INSTANCE_GROUP",
"LogUri": "s3://my-bucket/emr-logs/",
"MasterPublicDnsName": "ec2-12-34-56-78.compute-1.amazonaws.com"
}
}
Daftar Langkah
aws emr list-steps --cluster-id j-ABC123DEF456
Status Langkah
{
"Id": "s-ABC123",
"Name": "Process Data",
"Status": {
"State": "COMPLETED",
"Timeline": {
"StartDateTime": "2026-03-24T10:05:00.000Z",
"EndDateTime": "2026-03-24T11:30:00.000Z"
}
}
}
Integrasi CloudWatch
Metrik EMR di CloudWatch:
JobsFailedJobsRunningMemoryAvailableMBMemoryTotalMBHDFSUtilization
Optimasi Biaya
Menggunakan Spot Instance
Node task cocok untuk spot instance. Jika spot node dihentikan, job tetap berjalan di node lain.
{
"Name": "TaskGroup",
"InstanceRole": "TASK",
"InstanceType": "m5.2xlarge",
"InstanceCount": 4,
"Market": "SPOT",
"BidPrice": "0.10"
}
Klaster Sementara (Transient)
Buat klaster, jalankan job, lalu otomatis dihentikan:
{
"KeepJobFlowAliveWhenNoSteps": false,
"Steps": [
{ ... step 1 ... },
{ ... step 2 ... }
]
}
Instance Fleet dengan Multiple Opsi
Serahkan kepada EMR untuk memilih tipe dan harga termurah yang tersedia:
{
"InstanceTypeConfigs": [
{
"InstanceType": "m5.2xlarge",
"BidPrice": "0.15"
},
{
"InstanceType": "m4.2xlarge",
"BidPrice": "0.12"
},
{
"InstanceType": "c5.2xlarge",
"BidPrice": "0.10"
}
]
}
Pengujian dengan Apidog
Klaster EMR mahal. Lakukan pengujian konfigurasi sebelum deploy.
1. Validasi Konfigurasi Klaster
Simpan template klaster di Apidog untuk validasi otomatis:
pm.test('Cluster has required applications', () => {
const config = pm.request.body.toJSON()
const apps = config.Applications.map(a => a.Name)
pm.expect(apps).to.include('Spark')
})
pm.test('Instance types are valid', () => {
const config = pm.request.body.toJSON()
const types = ['m5.xlarge', 'm5.2xlarge', 'm4.xlarge']
pm.expect(types).to.include(config.Instances.MasterInstanceType)
})
2. Uji Definisi Step
pm.test('Spark step has valid args', () => {
const step = pm.request.body.toJSON().Steps[0]
const args = step.HadoopJarStep.Args
pm.expect(args[0]).to.eql('spark-submit')
pm.expect(args).to.include('--deploy-mode')
})
3. Variabel Lingkungan
AWS_REGION: us-east-1
EMR_SERVICE_ROLE: EMR_DefaultRole
EMR_EC2_ROLE: EMR_EC2_DefaultRole
S3_LOG_BUCKET: my-emr-logs
S3_SCRIPTS_BUCKET: my-emr-scripts
Uji API AWS dengan Apidog - gratis
Kesalahan Umum dan Perbaikan
ValidationError: ServiceRole tidak valid
Penyebab: IAM role tidak ada atau belum dikonfigurasi untuk EMR.
Perbaikan: Buat peran layanan di IAM console atau gunakan default AWS: EMR_DefaultRole_V2.
Gagal Menyediakan Instans EC2
Penyebab: Tipe instans tidak tersedia di Availability Zone, atau sudah mencapai service limit.
Perbaikan:
- Gunakan instance fleet dengan beberapa tipe instans
- Minta upgrade limit
- Coba tipe instans berbeda
Langkah Gagal dengan Exit Code 1
Penyebab: Pekerjaan Spark/Hadoop gagal.
Perbaikan: Periksa log di S3 (LogUri). Lihat stderr dan stdout untuk step terkait.
Klaster Terjebak pada Status STARTING
Penyebab: Bootstrap action gagal atau masalah izin.
Perbaikan: Cek output konsol EC2 instance. Pastikan skrip bootstrap punya akses ke S3.
Alternatif dan Perbandingan
| Fitur | AWS EMR | Google Dataproc | Azure HDInsight | Databricks |
|---|---|---|---|---|
| Hadoop/Spark Terkelola | ✓ | ✓ | ✓ | Spark saja |
| Integrasi AWS | Sangat Baik | Terbatas | Terbatas | Baik |
| Opsi Serverless | EMR Serverless | Dataproc Serverless | Terbatas | ✓ |
| Biaya | Spot Support | Preemptible VMs | Spot instance | Baik |
| Dukungan ML | EMR Studio | Vertex AI | Synapse | MLflow built-in |
EMR = integrasi AWS terdalam. Databricks unggul di tooling Spark. Dataproc cocok pengguna GCP.
Studi Kasus Dunia Nyata
ETL Data Lake: Perusahaan ritel proses data penjualan harian. EMR serap CSV dari S3, transformasi dengan Spark, hasil Parquet ditulis ke data lake. Klaster jalan 2 jam/hari lalu dihentikan.
Analisis Log: Perusahaan SaaS proses log aplikasi. Spark baca log dari S3, agregasi metrik, tulis ke data warehouse. Auto-scaling aktif saat traffic tinggi.
Pipeline Machine Learning: Tim data science latih model di EMR. Spark baca fitur dari S3, training dengan MLlib, ekspor ke SageMaker.
Penutup
Ringkasan yang dipelajari:
- Membuat klaster via API RunJobFlow
- Mengirim pekerjaan sebagai langkah
- Mengoptimalkan biaya dengan auto-scaling
- Monitoring via CloudWatch
- Optimasi biaya dengan spot instance & klaster sementara
Langkah berikutnya:
- Siapkan IAM role untuk EMR
- Buat klaster uji
- Kirimkan job Spark sederhana
- Review log di S3
- Terapkan strategi efisiensi biaya
Uji API AWS dengan Apidog - gratis
FAQ
Apa perbedaan node master, core, dan task?
- Master: Menjalankan pengelola klaster (YARN ResourceManager, HDFS NameNode)
- Core: Proses data & simpan HDFS
- Task: Hanya proses data, tanpa HDFS (ideal untuk spot)
Bagaimana SSH ke node master?
aws emr ssh --cluster-id j-ABC123DEF456 --key-pair-file my-key.pem
Bisakah menjalankan Jupyter notebook di EMR?
Bisa. Gunakan EMR Studio, aktifkan JupyterHub, atau EMR Notebooks (Jupyter terkelola).
Apa itu EMR Serverless?
Opsi serverless, submit pekerjaan Spark/Hive tanpa klaster. Bayar per job. Cocok untuk workload sporadis.
Bagaimana membaca dari DynamoDB?
Gunakan connector DynamoDB:
spark-submit --conf spark.hadoop.dynamodb.servicename=dynamodb \
--conf spark.hadoop.dynamodb.input.tableName=MyTable \
--conf spark.hadoop.dynamodb.output.tableName=MyTable \
--conf spark.hadoop.dynamodb.region=us-east-1 \
my-job.jar
Label rilis mana yang digunakan?
Gunakan versi stabil terbaru (misal emr-7.x untuk Spark 3.x). Pastikan konsistensi antar lingkungan & cek kompatibilitas di catatan rilis.
Bagaimana mengatasi step yang gagal?
- Cek status langkah:
aws emr describe-step - Lihat log di S3:
s3://your-log-bucket/logs/j-ABC123/steps/s-DEF123/ - SSH ke master, cek di
/mnt/var/log/

Top comments (0)