All Products
Search
Document Center

E-MapReduce:Buat kebijakan auto scaling kustom

Last Updated:Aug 21, 2026

Jika beban kerja bisnis Anda berfluktuasi dan Anda memahami pola beban kerjanya, Anda dapat mengaktifkan Auto Scaling dengan mengonfigurasi aturan penskalaan. E-MapReduce (EMR) secara otomatis menambah atau menghapus node tugas berdasarkan perubahan beban kerja untuk memastikan penyelesaian job dan mengurangi biaya. Topik ini menjelaskan cara mengonfigurasi kebijakan Auto Scaling kustom.

Prasyarat

  • Anda telah membuat kluster DataLake, Dataflow, OLAP, DataServing, atau Custom. Untuk informasi selengkapnya, lihat Buat kluster.

  • Anda telah membuat kelompok node tugas yang menggunakan instans pay-as-you-go atau preemptible dalam kluster tersebut. Untuk informasi selengkapnya, lihat Buat kelompok node.

Batasan

  • Untuk mengurangi kegagalan skala keluar akibat stok ECS yang tidak mencukupi, Anda dapat menentukan beberapa tipe instans saat membuat kelompok node. Anda dapat memilih hingga 10 tipe instans ECS sebagai alternatif. Sistem akan mencoba menyediakan instans mulai dari tipe instans pertama dalam daftar Anda. Jika suatu tipe instans tidak tersedia, sistem secara otomatis melanjutkan ke tipe berikutnya hingga permintaan terpenuhi. Tipe instans aktual yang dibeli dapat bervariasi tergantung pada perubahan stok.

  • Hanya kluster yang memiliki layanan YARN yang mendukung aturan penskalaan berbasis beban.

Catatan penggunaan

  • Saat suatu aturan dipicu, kelompok node secara otomatis melakukan penskalaan berdasarkan kebijakan yang telah ditentukan. Tanpa aturan, Auto Scaling tidak terjadi.

  • Sistem secara otomatis menemukan instans yang sesuai untuk tipe instans yang Anda pilih dan mencantumkannya sebagai kandidat. Anda harus memilih dari kandidat ini untuk mengaktifkan penskalaan menggunakan tipe instans tersebut.

Catatan

Jika beberapa aturan penskalaan dipicu secara bersamaan, sistem mengeksekusinya berdasarkan prioritas berikut:

  • Aturan skala keluar memiliki prioritas lebih tinggi daripada aturan skala-masuk.

  • Aturan berbasis waktu dan berbasis beban dieksekusi sesuai urutan waktu pemicunya.

  • Untuk penskalaan berbasis beban, aturan diurutkan berdasarkan waktu pemicu metrik.

  • Untuk penskalaan berbasis beban, aturan yang didasarkan pada metrik yang sama dipicu sesuai urutan pembuatannya.

Prosedur

Metode 1: Konfigurasikan aturan untuk kluster yang sudah ada

  1. Buka halaman Auto Scaling.

    1. Masuk ke konsol EMR on ECS.

    2. Di bilah navigasi atas, pilih wilayah dan resource group sesuai kebutuhan Anda.

    3. Klik nama kluster target.

    4. Pada halaman yang muncul, klik tab Auto Scaling.

  2. Konfigurasikan aturan penskalaan.

    1. Pada tab Configure Auto Scaling, di bagian Configure Auto Scaling Rule, klik Custom Auto Scaling Rule, pilih Reconfigure, lalu klik Edit di kolom Actions untuk kelompok node target.

    2. Pada panel Configure Auto Scaling, konfigurasikan parameter-parameter berikut.

      • Limits on Node Quantity of Current Node Group: Mengontrol jumlah node dalam kelompok untuk mencegah jumlah node menjadi terlalu besar atau terlalu kecil selama Auto Scaling. Untuk mengubah konfigurasi ini, klik Modify Limit.

        • Maximum Number of Instances: Jumlah maksimum node dalam kelompok node saat ini. Saat batas ini tercapai, kelompok node berhenti melakukan skala keluar.

        • Minimum Number of Instances: Jumlah minimum node dalam kelompok node saat ini. Saat batas ini tercapai, kelompok node berhenti melakukan skala-masuk.

      • Trigger Rule: Menampilkan dan memungkinkan Anda mengonfigurasi aturan penskalaan untuk kelompok node saat ini.

        • Penskalaan berbasis waktu

          Jika beban komputasi kluster Anda memiliki puncak dan lembah yang dapat diprediksi, Anda dapat menetapkan waktu tetap setiap hari, mingguan, atau bulanan untuk melakukan skala keluar sejumlah tertentu node tugas. Hal ini menambah sumber daya komputasi saat diperlukan, membantu memastikan penyelesaian job sekaligus menghemat biaya. Aturan penskalaan dibagi menjadi aturan skala keluar dan aturan skala-masuk.

          Penting

          Untuk mencegah konflik dan memastikan skalabilitas mulus, jangan menetapkan waktu eksekusi aturan skala keluar dan skala-masuk agar identik.

          Bagian ini menggunakan contoh aturan skala keluar.

          Parameter

          Deskripsi

          Scale-out type

          Skala keluar berdasarkan waktu.

          Rule Name

          Nama aturan penskalaan harus unik dalam satu kluster.

          Frequency

          • Execute Repeatedly: Aksi penskalaan dijalankan pada waktu tertentu setiap hari, mingguan, atau bulanan.

          • Execute Only Once: Aksi penskalaan dijalankan sekali pada waktu yang ditentukan.

          Execution Time

          Waktu eksekusi aturan.

          Rule Expiration Time

          Jika Anda menetapkan Frequency ke Execute Repeatedly, Anda dapat menetapkan waktu kedaluwarsa untuk aturan tersebut. Aturan berhenti memicu aktivitas penskalaan setelah waktu ini.

          Retry Time Range

          Aksi penskalaan mungkin tidak berjalan tepat pada waktunya karena berbagai alasan. Jika Anda menetapkan rentang waktu percobaan ulang, sistem akan mencoba kembali aksi tersebut setiap 30 detik dalam rentang ini hingga berhasil. Nilainya dapat berkisar antara 0 hingga 3.600 detik.

          Sebagai contoh, jika aksi A dijadwalkan tetapi tidak dapat dijalankan karena aksi B sedang berlangsung atau dalam periode cooldown, sistem akan mencoba kembali aksi A setiap 30 detik selama rentang waktu percobaan ulang yang ditentukan. Aksi tersebut akan dijalankan segera setelah kondisi memungkinkan.

          Nodes for each scale-out

          Jumlah node yang ditambahkan saat aturan dipicu.

          Best-effort Delivery

          Kami merekomendasikan Anda mengaktifkan fitur ini. Setelah Anda mengaktifkan best-effort delivery, sistem akan memberikan jumlah maksimum node yang memungkinkan untuk memastikan operasi bisnis berjalan lancar.

          Sebagai contoh, Anda mengonfigurasi sistem untuk melakukan skala keluar sebanyak 100 node setiap hari pukul 00:00. Jika hanya tersedia stok 90 node, proses biasanya akan gagal. Dengan fitur ini diaktifkan, 90 node yang tersedia akan disediakan.

        • Penskalaan berbasis beban

          Catatan

          Fitur ini hanya didukung ketika layanan YARN diterapkan dalam kluster.

          Jika Anda tidak dapat memprediksi secara akurat puncak dan lembah beban komputasi data besar Anda tetapi memahami model bisnis Anda dengan baik, Anda dapat menggunakan penskalaan berbasis beban. Aturan penskalaan dibagi menjadi aturan skala keluar dan skala-masuk. Bagian ini menggunakan contoh aturan skala keluar.

          Parameter

          Deskripsi

          Scale-out type

          Skala keluar berdasarkan beban.

          Rule Name

          Nama aturan penskalaan harus unik dalam satu kluster.

          Load Metric-based Trigger Conditions

          Kondisi yang memicu aturan penskalaan berbasis beban. Anda perlu memilih satu atau beberapa metrik beban yang telah ditentukan sistem. Untuk memilih beberapa metrik, klik Add Metric. Parameter berikut termasuk:

          • Load metric: Nama metrik beban yang didukung sistem. Untuk informasi selengkapnya tentang pemetaan antara metrik auto scaling E-MapReduce dan metrik layanan YARN, lihat Mapping between E-MapReduce auto scaling metrics and YARN service metrics.

            Catatan

            Metrik beban yang didukung bervariasi tergantung jenis kluster. Metrik aktual yang ditampilkan di konsol berlaku.

          • Aggregation method: Metode (rata-rata, maksimum, atau minimum) yang digunakan untuk mengevaluasi metrik beban terhadap ambang batas selama periode statistik. Aturan dipicu jika nilai agregasi memenuhi ambang batas.

          Multi-metric Relationship

          Anda dapat memilih All Metrics Meet the Conditions atau Any Metric Meets the Condition.

          Statistical Period

          Jendela waktu untuk pengumpulan dan agregasi metrik. Periode yang lebih pendek membuat aturan lebih sensitif terhadap perubahan beban. Pilih periode statistik yang masuk akal berdasarkan kebutuhan bisnis Anda.

          Condition Repetition Threshold

          Jumlah periode statistik berturut-turut di mana metrik harus melebihi ambang batas sebelum aturan dipicu. Ini mencegah penskalaan akibat lonjakan singkat.

          Nodes for each scale-out

          Jumlah node yang ditambahkan saat aturan dipicu.

          Best-effort Delivery

          Jika Anda mengaktifkan fitur ini, sistem akan memberikan jumlah maksimum node yang memungkinkan. Evaluasi apakah perlu mengaktifkan fitur ini untuk penskalaan berbasis beban. Berbeda dengan penskalaan berbasis waktu di mana kapasitas yang dibutuhkan diketahui, penskalaan berbasis beban bereaksi terhadap metrik, dan pemenuhan sebagian mungkin tidak diinginkan.

          Cooldown Time

          Interval antara awal aktivitas auto scaling dan waktu dimulainya aktivitas berikutnya. Selama periode ini, semua pemicu penskalaan diabaikan. Setelah cooldown berakhir, sistem hanya akan merespons pemicu baru yang memenuhi kondisi penskalaan.

          Periode cooldown ini memungkinkan beban sistem stabil setelah kejadian penskalaan sebelum kejadian lain dimulai.

          Effective Time Period

          Parameter opsional yang menentukan rentang waktu di mana aturan penskalaan berbasis beban aktif. Secara default, aturan aktif 24/7. Jika Anda menetapkan rentang waktu, aktivitas penskalaan hanya dipicu dalam rentang tersebut.

    3. Setelah menyelesaikan konfigurasi, klik Save and Apply.

      Saat kondisi terpenuhi, aktivitas Auto Scaling dipicu untuk kelompok node tersebut.

Metode 2: Konfigurasikan aturan saat pembuatan kluster

  1. Masuk ke konsol EMR on ECS.

  2. Di bilah navigasi atas, pilih wilayah dan resource group sesuai kebutuhan Anda.

  3. Klik CREATE_CLUSTER. Untuk informasi selengkapnya tentang parameter, lihat Buat kluster.

    Catatan

    Anda harus menambahkan kelompok node tugas pay-as-you-go ke kluster sebelum dapat mengonfigurasi aturan yang sesuai.

  4. Konfigurasikan Cluster Scaling.

    1. Pilih Custom Auto Scaling Rule dan klik Edit di kolom Actions kelompok node target.

    2. Pada panel Configure Auto Scaling, konfigurasikan parameter. Untuk informasi selengkapnya, lihat Configure scaling rules.

    3. Setelah menyelesaikan konfigurasi, klik Save and Apply.

  5. Konfirmasi pesanan dan buat kluster.

    Setelah kluster dibuat, aktivitas penskalaan dipicu untuk kelompok node saat kondisi aturan terpenuhi.

Metode 3: Konfigurasikan aturan dengan SDK

Saat membuat kluster atau kelompok node, Anda dapat mengonfigurasi aturan penskalaan kustom untuk kelompok node guna mengotomatiskan pembuatan dan manajemen node. Untuk informasi selengkapnya, lihat Buat kluster dan Buat kelompok node. Anda juga dapat mengonfigurasi aturan penskalaan kustom untuk kelompok node yang sudah ada. Untuk informasi selengkapnya, lihat Buat kebijakan auto scaling kustom.

Kode Java berikut memberikan contoh konfigurasi aturan skala keluar berbasis beban.

Catatan

Kami merekomendasikan Anda menggunakan metode STS yang lebih aman untuk menginisialisasi client. Untuk informasi selengkapnya tentang metode autentikasi, lihat Manage access credentials.

// File ini dibuat secara otomatis, jangan mengeditnya. Terima kasih.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * deskripsi :
     * <p>Gunakan pasangan AccessKey untuk menginisialisasi client.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.emr20210320.Client createClient() throws Exception {
        // Kebocoran kode sumber dapat menyebabkan kebocoran pasangan AccessKey, yang menimbulkan ancaman terhadap keamanan semua resource Anda. Kode berikut hanya untuk referensi.
        // Kami merekomendasikan Anda menggunakan metode STS yang lebih aman untuk autentikasi.
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah diatur.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Untuk endpoint, lihat https://api.alibabacloud.com/product/Emr.
        config.endpoint = "emr.eu-central-1.aliyuncs.com";
        return new com.aliyun.emr20210320.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.emr20210320.Client client = Sample.createClient();
        com.aliyun.emr20210320.models.ScalingConstraints scalingConstraints = new com.aliyun.emr20210320.models.ScalingConstraints()
                .setMaxCapacity(10)
                .setMinCapacity(0);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition0 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableVCoresPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.TriggerCondition scalingRule0MetricsTriggerTriggerCondition1 = new com.aliyun.emr20210320.models.TriggerCondition()
                .setMetricName("yarn_resourcemanager_queue_AvailableMBPercentage")
                .setStatistics("AVG")
                .setComparisonOperator("LE")
                .setThreshold(15D);
        com.aliyun.emr20210320.models.MetricsTrigger scalingRule0MetricsTrigger = new com.aliyun.emr20210320.models.MetricsTrigger()
                .setTimeWindow(300)
                .setEvaluationCount(1)
                .setCoolDownInterval(300)
                .setConditionLogicOperator("Or")
                .setConditions(java.util.Arrays.asList(
                    scalingRule0MetricsTriggerTriggerCondition0,
                    scalingRule0MetricsTriggerTriggerCondition1
                ));
        com.aliyun.emr20210320.models.ScalingRule scalingRule0 = new com.aliyun.emr20210320.models.ScalingRule()
                .setRuleName("default")
                .setTriggerType("METRICS_TRIGGER")
                .setActivityType("SCALE_OUT")
                .setAdjustmentValue(1)
                .setMetricsTrigger(scalingRule0MetricsTrigger);
        com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest putAutoScalingPolicyRequest = new com.aliyun.emr20210320.models.PutAutoScalingPolicyRequest()
                .setRegionId("cn-hangzhou")
                .setClusterId("c-xxxx")
                .setNodeGroupId("ng-xxx")
                .setScalingRules(java.util.Arrays.asList(
                    scalingRule0
                ))
                .setConstraints(scalingConstraints);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // Cetak nilai kembali API sendiri.
            client.putAutoScalingPolicyWithOptions(putAutoScalingPolicyRequest, runtime);
        } catch (TeaException error) {
            // Kode berikut hanya untuk tujuan demonstrasi. Kami merekomendasikan Anda menangani exception dengan hati-hati dan tidak mengabaikannya dalam proyek Anda.
            // Pesan error
            System.out.println(error.getMessage());
            // Alamat diagnosis
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception exception) {
            TeaException error = new TeaException(exception.getMessage(), exception);
            // Kode berikut hanya untuk tujuan demonstrasi. Kami merekomendasikan Anda menangani exception dengan hati-hati dan tidak mengabaikannya dalam proyek Anda.
            // Pesan error
            System.out.println(error.getMessage());
            // Alamat diagnosis
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

Pemetaan antara metrik auto scaling EMR dan YARN

Catatan
  • Untuk metrik Auto Scaling terkait antrian, tentukan parameter queue_name. Nilai default-nya adalah root. Antrian kustom didukung.

  • Untuk metrik Auto Scaling terkait partisi, Anda harus menentukan parameter partition_name.

Metrik EMR

Layanan

Deskripsi

yarn_resourcemanager_queue_AvailableVCores

YARN

Jumlah core CPU virtual yang tersedia dalam antrian tertentu.

yarn_resourcemanager_queue_PendingVCores

YARN

Jumlah core CPU virtual yang menunggu alokasi dalam antrian tertentu.

yarn_resourcemanager_queue_AllocatedVCores

YARN

Jumlah core CPU virtual yang dialokasikan dalam antrian tertentu.

yarn_resourcemanager_queue_ReservedVCores

YARN

Jumlah core CPU virtual yang dicadangkan dalam antrian tertentu.

yarn_resourcemanager_queue_AvailableMB

YARN

Jumlah memori yang tersedia dalam antrian tertentu.

yarn_resourcemanager_queue_PendingMB

YARN

Jumlah memori yang menunggu alokasi dalam antrian tertentu.

yarn_resourcemanager_queue_AllocatedMB

YARN

Jumlah memori yang dialokasikan dalam antrian tertentu.

yarn_resourcemanager_queue_ReservedMB

YARN

Jumlah memori yang dicadangkan dalam antrian tertentu.

yarn_resourcemanager_queue_AppsRunning

YARN

Jumlah aplikasi yang sedang berjalan dalam antrian tertentu.

yarn_resourcemanager_queue_AppsPending

YARN

Jumlah aplikasi yang menunggu dalam antrian tertentu.

yarn_resourcemanager_queue_AppsKilled

YARN

Jumlah aplikasi yang dihentikan dalam antrian tertentu.

yarn_resourcemanager_queue_AppsFailed

YARN

Jumlah aplikasi yang gagal dalam antrian tertentu.

yarn_resourcemanager_queue_AppsCompleted

YARN

Jumlah aplikasi yang selesai dalam antrian tertentu.

yarn_resourcemanager_queue_AppsSubmitted

YARN

Jumlah aplikasi yang diajukan dalam antrian tertentu.

yarn_resourcemanager_queue_AllocatedContainers

YARN

Jumlah kontainer yang dialokasikan dalam antrian tertentu.

yarn_resourcemanager_queue_PendingContainers

YARN

Jumlah kontainer yang menunggu alokasi dalam antrian tertentu.

yarn_resourcemanager_queue_ReservedContainers

YARN

Jumlah kontainer yang dicadangkan dalam antrian tertentu.

yarn_resourcemanager_queue_AvailableMBPercentage

YARN

Persentase sumber daya memori yang tersedia dalam antrian tertentu. MemoryAvailablePercentage = AvailableMemory / TotalMemory.

Catatan

Metrik ini didukung di EMR-3.43.0 dan versi setelahnya serta EMR-5.9.0 dan versi setelahnya.

yarn_resourcemanager_queue_PendingContainersRatio

YARN

Rasio jumlah kontainer yang menunggu terhadap jumlah kontainer yang dialokasikan dalam antrian tertentu. ContainerPendingRatio = PendingContainers / AllocatedContainers.

Catatan

Metrik ini didukung di EMR-3.43.0 dan versi setelahnya serta EMR-5.9.0 dan versi setelahnya.

yarn_resourcemanager_queue_AvailableVCoresPercentage

YARN

Persentase core CPU virtual yang tersedia dalam antrian tertentu. AvailableVCoresPercentage = AvailableVCores / (ReservedVCores + AvailableVCores + AllocatedVCores) * 100

Catatan

Metrik ini didukung di EMR-3.43.0 dan versi setelahnya serta EMR-5.9.0 dan versi setelahnya.

yarn_cluster_numContainersByPartition

YARN

Jumlah kontainer dalam partisi tertentu. Parameter partition_name menentukan nama partisi.

Catatan

Metrik ini didukung di EMR-3.44.0 dan versi setelahnya serta EMR-5.10.0 dan versi setelahnya.

yarn_cluster_usedMemoryMBByPartition

YARN

Penggunaan memori partisi tertentu. Parameter partition_name menentukan nama partisi.

Catatan

Metrik ini didukung di EMR-3.44.0 dan versi setelahnya serta EMR-5.10.0 dan versi setelahnya.

yarn_cluster_availMemoryMBByPartition

YARN

Memori yang tersedia pada partisi tertentu. Parameter partition_name menentukan nama partisi.

Catatan

Metrik ini didukung di EMR-3.44.0 dan versi setelahnya serta EMR-5.10.0 dan versi setelahnya.

yarn_cluster_usedVirtualCoresByPartition

YARN

Jumlah core CPU virtual yang digunakan dalam partisi tertentu. Parameter partition_name menentukan nama partisi.

Catatan

Metrik ini didukung di EMR-3.44.0 dan versi setelahnya serta EMR-5.10.0 dan versi setelahnya.

yarn_cluster_availableVirtualCoresByPartition

YARN

Jumlah core CPU virtual yang tersedia dalam partisi tertentu. Parameter partition_name menentukan nama partisi.

Catatan

Metrik ini didukung di EMR-3.44.0 dan versi setelahnya serta EMR-5.10.0 dan versi setelahnya.

FAQ

Mengapa operasi skala keluar kluster EMR gagal? Bagaimana cara meningkatkan tingkat keberhasilan skala keluar?

Akar penyebab

  1. Stok resource ECS tidak mencukupi: Operasi skala keluar dapat gagal jika jumlah instans ECS yang diminta melebihi stok yang tersedia di zona ketersediaan saat ini. Resource ECS dasar bersifat dinamis dan dapat mengalami kekurangan sementara akibat permintaan tinggi.

  2. Batasan tipe instans tunggal: Jika konfigurasi Auto Scaling Anda hanya menentukan satu tipe instans ECS, dan tipe tersebut kekurangan stok, proses skala keluar akan gagal.

Solusi

  • Kami merekomendasikan Anda mengaktifkan best-effort delivery dengan mengaktifkan sakelar Best-effort Delivery saat mengonfigurasi aturan penskalaan. Ini memastikan bahwa meskipun beberapa resource tidak tersedia, sistem menyediakan sebanyak mungkin resource alih-alih sepenuhnya membatalkan permintaan skala keluar.

  • Konfigurasikan beberapa tipe instans: Untuk meningkatkan tingkat keberhasilan, kami merekomendasikan Anda mengonfigurasi beberapa tipe instans ECS untuk kelompok node tugas. Untuk informasi selengkapnya, lihat Buat kelompok node. Selama skala keluar, sistem mencoba menyediakan instans dari tipe pertama dalam daftar Anda. Jika tidak tersedia, sistem secara otomatis mencoba tipe berikutnya, dan terus berlanjut hingga permintaan terpenuhi.

Langkah-langkah ini dapat secara signifikan meningkatkan tingkat keberhasilan skala keluar untuk kluster EMR Anda.