DEV Community

Cover image for Cara Menggunakan API EMR: Panduan Lengkap
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menggunakan API EMR: Panduan Lengkap

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.

Coba Apidog hari ini

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
  }
})
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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": "*"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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" }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Respons:

{
  "JobFlowId": "j-ABC123DEF456"
}
Enter fullscreen mode Exit fullscreen mode

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"
          }
        }
      }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

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/"
        ]
      }
    }
  ]'
Enter fullscreen mode Exit fullscreen mode

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/"
        ]
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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"
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

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"
          }
        }
      }
    ]
  }'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Deskripsi Klaster

aws emr describe-cluster --cluster-id j-ABC123DEF456
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

Daftar Langkah

aws emr list-steps --cluster-id j-ABC123DEF456
Enter fullscreen mode Exit fullscreen mode

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"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Integrasi CloudWatch

Metrik EMR di CloudWatch:

  • JobsFailed
  • JobsRunning
  • MemoryAvailableMB
  • MemoryTotalMB
  • HDFSUtilization

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"
}
Enter fullscreen mode Exit fullscreen mode

Klaster Sementara (Transient)

Buat klaster, jalankan job, lalu otomatis dihentikan:

{
  "KeepJobFlowAliveWhenNoSteps": false,
  "Steps": [
    { ... step 1 ... },
    { ... step 2 ... }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Pengujian dengan Apidog

Klaster EMR mahal. Lakukan pengujian konfigurasi sebelum deploy.

Testing EMR API with Apidog

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)
})
Enter fullscreen mode Exit fullscreen mode

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')
})
Enter fullscreen mode Exit fullscreen 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
Enter fullscreen mode Exit fullscreen mode

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:

  1. Siapkan IAM role untuk EMR
  2. Buat klaster uji
  3. Kirimkan job Spark sederhana
  4. Review log di S3
  5. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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?

  1. Cek status langkah: aws emr describe-step
  2. Lihat log di S3: s3://your-log-bucket/logs/j-ABC123/steps/s-DEF123/
  3. SSH ke master, cek di /mnt/var/log/

Top comments (0)