Cara Menggunakan API EMR: Panduan Lengkap

Ashley Innocent

Ashley Innocent

24 March 2026

Cara Menggunakan API EMR: Panduan Lengkap

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Intinya

API AWS EMR (Elastic MapReduce) mengelola klaster big data yang menjalankan Hadoop, Spark, Hive, dan Presto. Anda membuat klaster, mengirimkan pekerjaan sebagai langkah-langkah, melakukan auto-scaling berdasarkan beban kerja, dan menghentikan ketika selesai. Autentikasi menggunakan AWS IAM. Untuk pengujian, gunakan Apidog untuk memvalidasi konfigurasi klaster, menguji pengiriman pekerjaan terhadap struktur API, dan mendokumentasikan pipeline data Anda.

Pengantar

AWS EMR adalah layanan Hadoop/Spark terkelola di AWS. Ini memproses petabyte data untuk analitik, pembelajaran mesin, dan pipeline ETL. Alih-alih mengelola klaster Hadoop Anda sendiri, Anda membiarkan AWS menangani infrastrukturnya.

EMR berjalan di instans EC2 dalam sebuah klaster. Anda menentukan:

API EMR memungkinkan Anda mengotomatiskan semua ini. Anda dapat membuat klaster secara terprogram, mengirimkan pekerjaan, memantau kemajuan, dan berintegrasi dengan layanan AWS lainnya.

💡
Jika Anda membuat pipeline data, Apidog membantu Anda menguji konfigurasi klaster, memvalidasi definisi pekerjaan, dan mendokumentasikan alur kerja EMR Anda sebelum menjalankan pekerjaan pemrosesan data yang mahal.
button

Uji API AWS dengan Apidog - gratis

Di akhir panduan ini, Anda akan dapat:

Autentikasi dengan AWS

EMR menggunakan autentikasi AWS standar dengan 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

EMR memerlukan AWS Signature Versi 4. Gunakan SDK atau alat seperti boto3, AWS CLI, atau buat tanda tangan secara 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: Tipe instans tetap per grup (master, core, task).

Instans fleet: Beberapa tipe/opsi instans per grup. EMR memilih berdasarkan ketersediaan dan harga.

{
  "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 pekerjaan sebagai "langkah-langkah" secara 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

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 menambah/menghapus node tugas berdasarkan 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

Pemantauan dan pencatatan (logging)

Daftar klaster

aws emr list-clusters --states RUNNING

Deskripsi klaster

aws emr describe-cluster --cluster-id j-ABC123DEF456

Respons meliputi:

{
  "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

EMR mempublikasikan metrik ke CloudWatch:

Optimasi biaya

Menggunakan spot instance

Node tugas sangat cocok untuk spot instance. Jika dihentikan, pekerjaan akan berlanjut di node yang tersisa.

{
  "Name": "TaskGroup",
  "InstanceRole": "TASK",
  "InstanceType": "m5.2xlarge",
  "InstanceCount": 4,
  "Market": "SPOT",
  "BidPrice": "0.10"
}

Klaster sementara (transient)

Buat klaster, jalankan pekerjaan, hentikan secara otomatis:

{
  "KeepJobFlowAliveWhenNoSteps": false,
  "Steps": [
    { ... step 1 ... },
    { ... step 2 ... }
  ]
}

Klaster dihentikan setelah semua langkah selesai.

Instance fleet dengan beberapa opsi

Biarkan EMR memilih yang 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. Uji konfigurasi dengan cermat.

Testing EMR API with Apidog

1. Memvalidasi konfigurasi klaster

Simpan templat klaster di Apidog:

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. Menguji definisi langkah

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: Peran IAM tidak ada atau tidak dikonfigurasi untuk EMR.

Perbaikan: Buat peran layanan di konsol IAM atau gunakan default AWS: EMR_DefaultRole_V2.

Gagal menyediakan instans EC2

Penyebab: Tipe instans tidak tersedia di AZ Anda, atau batas layanan tercapai.

Perbaikan:

Langkah gagal dengan kode keluar Aplikasi 1

Penyebab: Pekerjaan Spark/Hadoop yang sebenarnya gagal.

Perbaikan: Periksa log di S3 (jalur LogUri). Lihat stderr dan stdout untuk langkah tersebut.

Klaster terjebak dalam status STARTING

Penyebab: Tindakan bootstrap gagal, atau masalah izin.

Perbaikan: Periksa output konsol instans EC2. Verifikasi akses S3 untuk skrip bootstrap.

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 Dukungan Spot VMs yang Dapat Didahului Spot instance Baik
Dukungan ML EMR Studio Vertex AI Synapse MLflow built-in

EMR memiliki integrasi AWS terdalam. Databricks memiliki perkakas Spark yang lebih baik. Dataproc lebih murah untuk pengguna GCP.

Studi kasus dunia nyata

ETL data lake. Sebuah perusahaan ritel memproses data penjualan harian. Klaster EMR menyerap file CSV dari S3, mengubahnya dengan Spark, dan menulis Parquet ke data lake. Klaster berjalan selama 2 jam setiap hari dan dihentikan.

Analisis log. Sebuah perusahaan SaaS memproses log aplikasi. Spark membaca log dari S3, mengagregasi metrik, dan menulis ke gudang data. Auto-scaling menambahkan node tugas selama volume log puncak.

Pipeline pembelajaran mesin. Tim ilmu data melatih model di EMR. Spark membaca fitur dari S3, melatih model dengan MLlib, dan mengekspor ke SageMaker untuk penyajian.

Penutup

Berikut adalah apa yang telah Anda pelajari:

Langkah selanjutnya:

  1. Siapkan peran IAM untuk EMR
  2. Buat klaster uji
  3. Kirimkan pekerjaan Spark sederhana
  4. Tinjau log di S3
  5. Terapkan strategi penghematan biaya

Uji API AWS dengan Apidog - gratis

button

FAQ

Apa perbedaan antara node master, core, dan task?

Bagaimana cara melakukan SSH ke node master?

aws emr ssh --cluster-id j-ABC123DEF456 --key-pair-file my-key.pem

Bisakah saya menjalankan Jupyter notebook di EMR?Ya. Gunakan EMR Studio atau aktifkan aplikasi JupyterHub. Atau gunakan EMR Notebooks (Jupyter terkelola).

Apa itu EMR Serverless?Opsi serverless di mana Anda mengirimkan pekerjaan Spark/Hive tanpa mengelola klaster. Bayar per jalankan pekerjaan. Baik untuk beban kerja sporadis.

Bagaimana cara membaca dari DynamoDB?Gunakan konektor 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 harus saya gunakan?Yang stabil terbaru (emr-7.x untuk Spark 3.x). Gunakan versi yang konsisten di seluruh lingkungan. Periksa kompatibilitas aplikasi di catatan rilis.

Bagaimana cara mengatasi langkah yang gagal?

  1. Periksa 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 dan periksa /mnt/var/log/

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.