すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:カスタム自動スケーリングポリシーの作成

最終更新日:Aug 21, 2026

ビジネスワークロードに変動があり、そのパターンを把握している場合は、スケーリングルールを設定することでオートスケーリングを有効にできます。E-MapReduce (EMR) は、ワークロードの変化に基づいてタスクノードを自動的に追加または削除することで、ジョブの完了を保証し、コストを削減します。このトピックでは、カスタムオートスケーリングポリシーの設定方法について説明します。

前提条件

  • DataLake、Dataflow、OLAP、DataServing、または Custom クラスターが作成済みであること。詳細については、「クラスターの作成」をご参照ください。

  • クラスター内に、従量課金またはプリエンプティブルインスタンスを使用するタスクノードグループが作成済みであること。詳細については、「ノードグループの作成」をご参照ください。

制限事項

  • ECS の在庫不足によるスケールアウトの失敗を減らすため、ノードグループの作成時に複数のインスタンスタイプを指定できます。代替として、最大 10 個の ECS インスタンスタイプを選択できます。システムは、リストの先頭にあるインスタンスタイプから順にインスタンスのプロビジョニングを試みます。インスタンスタイプが利用できない場合、リクエストが満たされるまで自動的に次のインスタンスタイプを試します。実際に購入されるインスタンスタイプは、在庫の変動により異なる場合があります。

  • 負荷ベースのスケーリングルールは、YARN サービスがデプロイされているクラスターでのみサポートされます。

注意事項

  • ルールがトリガーされると、ノードグループは事前定義されたポリシーに基づいて自動的にスケーリングします。ルールがない場合、オートスケーリングは行われません。

  • システムは、選択したインスタンスタイプに一致するインスタンスを自動的に検索し、候補としてリストアップします。これらのインスタンスタイプを使用してスケーリングを有効にするには、これらの候補から選択する必要があります。

説明

複数のスケーリングルールが同時にトリガーされた場合、システムは次の優先順位に基づいてルールを実行します。

  • スケールアウトルールは、スケールインルールに優先します。

  • 時間ベースのルールと負荷ベースのルールは、トリガーされた順序で実行されます。

  • 負荷ベースのスケーリングでは、ルールはメトリックのトリガー時刻順にソートされます。

  • 負荷ベースのスケーリングでは、同じメトリックに基づくルールは、作成された順序でトリガーされます。

手順

方法1:既存クラスターのルール設定

  1. Auto Scaling ページに移動します。

    1. EMR on ECS コンソールにログインします。

    2. 上部メニューで、要件に基づいてリージョンと リソースグループ を選択します。

    3. 対象クラスターの名前をクリックします。

    4. 表示されたページで、Auto Scaling タブをクリックします。

  2. スケーリングルールを設定します。

    1. Configure Auto Scaling タブの Auto Scaling ルールの設定 セクションで カスタム Auto Scaling ルール をクリックし、再設定 を選択してから、対象ノードグループの 操作 列にある 編集 をクリックします。

    2. Configure Auto Scaling パネルで、パラメーターを設定します。

      • Limits on Node Quantity of Current Node Group:グループ内のノード数を制御して、オートスケーリング中にノード数が過剰または過小になるのを防ぎます。この設定を変更するには、Modify Limit をクリックします。

        • Maximum Number of Instances:現在のノードグループの最大ノード数です。この上限に達すると、ノードグループはスケールアウトを停止します。

        • Minimum Number of Instances:現在のノードグループの最小ノード数です。この下限に達すると、ノードグループはスケールインを停止します。

      • Trigger Rule:現在のノードグループのスケーリングルールを表示および設定します。

        • 時間ベースのスケーリング

          クラスターのコンピューティングワークロードに予測可能なピークと谷がある場合、毎日、毎週、または毎月の決まった時間に特定数のタスクノードをスケールアウトするように設定できます。これにより、必要なときにコンピューティングリソースが追加され、ジョブの完了を保証しつつコストを節約できます。スケーリングルールは、スケールアウトルールとスケールインルールに分かれています。

          重要

          競合を防ぎ、円滑なスケーリングを確保するために、スケールアウトルールとスケールインルールの実行時間を同一に設定しないでください。

          このセクションでは、スケールアウトルールを例に説明します。

          パラメーター

          説明

          [Scale-out type]

          時間ベースのスケールアウト。

          ルール名

          スケーリングルール名は、クラスター内で一意である必要があります。

          [Frequency]

          • Execute Repeatedly:毎日、毎週、または毎月の特定の時間にスケーリングアクションが実行されます。

          • Execute Only Once:指定された時間に一度だけスケーリングアクションが実行されます。

          実行時間

          ルールが実行される時間。

          [Rule Expiration Time]

          Frequency を Execute Repeatedly に設定した場合、ルールの有効期限を設定できます。この時刻を過ぎると、ルールはスケーリングアクティビティをトリガーしなくなります。

          [Retry Time Range]

          スケーリングアクションは、さまざまな理由で予定時刻に実行されない場合があります。再試行時間範囲を設定すると、システムはこの範囲内で成功するまで 30 秒ごとにアクションを再試行します。値は 0〜3,600 秒の範囲で設定できます。

          たとえば、アクション A がスケジュールされているものの、別のアクション B が進行中またはクールダウン期間中であるために実行できない場合、システムは指定された再試行時間範囲内で 30 秒ごとにアクション A を再試行します。実行可能になり次第、アクションはすぐに実行されます。

          [Nodes for each scale-out]

          ルールがトリガーされたときに追加するノードの数。

          [ベストエフォート式デリバリー]

          この機能を有効にすることを推奨します。ベストエフォートデリバリーを有効にすると、システムは可能な限り多くのノードを提供し、円滑な業務運用を保証します。

          たとえば、毎日 00:00 に 100 ノードをスケールアウトするようにシステムを設定したとします。在庫が 90 ノードしかない場合、通常はプロセスが失敗します。この機能を有効にすると、利用可能な 90 ノードが提供されます。

        • 負荷ベースのスケーリング

          説明

          この機能は、クラスターに YARN サービスがデプロイされている場合にのみ利用できます。

          ビッグデータコンピューティングのワークロードのピークと谷を正確に予測できないが、ビジネスモデルに精通している場合は、負荷ベースのスケーリングを使用できます。スケーリングルールは、スケールアウトルールとスケールインルールに分かれています。このセクションでは、スケールアウトルールを例に説明します。

          パラメーター

          説明

          [Scale-out type]

          負荷ベースのスケールアウト。

          ルール名

          スケーリングルール名は、クラスター内で一意である必要があります。

          Load Metric-based Trigger Conditions

          負荷ベースのスケーリングルールをトリガーする条件です。システム定義の負荷メトリックを 1 つ以上選択する必要があります。複数のメトリックを選択するには、Add Metric をクリックします。次のパラメーターが含まれます:

          • 負荷メトリック:システムでサポートされている負荷メトリックの名前。E-MapReduce のオートスケーリングメトリックと YARN サービスメトリックのマッピングの詳細については、「E-MapReduce のオートスケーリングメトリックと YARN サービスメトリックのマッピング」をご参照ください。

            説明

            サポートされる負荷メトリックはクラスタータイプによって異なります。コンソールに実際に表示されるメトリックが優先されます。

          • 集計方法:統計期間における負荷メトリックを、しきい値と比較評価するための方法 (平均、最大、または最小) です。集計値がしきい値を満たすと、ルールがトリガーされます。

          Multi-metric Relationship

          All Metrics Meet the Conditions または Any Metric Meets the Condition を選択できます。

          [Statistical Period]

          メトリックの収集と集計のための時間枠です。期間が短いほど、ルールは負荷の変動に敏感になります。業務内容に合わせて、適切な統計期間を選択してください。

          [Condition Repetition Threshold]

          ルールがトリガーされる前に、メトリックがしきい値を超えなければならない連続した統計期間の数。これにより、一時的な急上昇によるスケーリングを防ぎます。

          [Nodes for each scale-out]

          ルールがトリガーされたときに追加するノードの数。

          [ベストエフォート式デリバリー]

          この機能を有効にすると、システムは可能な限り多くのノードを提供します。負荷ベースのスケーリングでこの機能を有効にするかどうかを評価してください。必要なキャパシティが判明している時間ベースのスケーリングとは異なり、負荷ベースのスケーリングはメトリックに応じて動作するため、一部のリソースのみが提供されることは望ましくない場合があります。

          [Cooldown Time]

          オートスケーリングアクティビティの開始から、次のアクティビティが開始できるまでの間隔です。この期間中、すべてのスケーリングトリガーは無視されます。クールダウンが終了すると、システムはスケーリング条件を満たす新しいトリガーにのみ応答します。

          このクールダウン期間は、次のスケーリングイベントが開始される前にシステム負荷が安定するための時間を確保します。

          [Effective Time Period]

          負荷ベースのスケーリングルールが有効な時間範囲を指定するオプションのパラメーターです。デフォルトでは、ルールは常時有効です。時間範囲を設定すると、スケーリングアクティビティはその範囲内でのみトリガーされます。

    3. 設定が完了したら、Save and Apply をクリックします。

      条件が満たされると、ノードグループでオートスケーリングアクティビティがトリガーされます。

方法2:クラスター作成時のルール設定

  1. EMR on ECS コンソールにログインします。

  2. 上部メニューで、要件に基づいてリージョンと リソースグループ を選択します。

  3. CREATE_CLUSTER をクリックします。パラメーターの詳細については、「クラスターの作成」をご参照ください。

    説明

    対応するルールを設定する前に、従量課金のタスクノードグループをクラスターに追加する必要があります。

  4. クラスターのスケーリング を設定します。

    1. カスタム Auto Scaling ルール を選択し、対象ノードグループの 操作 列にある 編集 をクリックします。

    2. Configure Auto Scaling パネルで、パラメーターを設定します。詳細については、「スケーリングルールの設定」をご参照ください。

    3. 設定が完了したら、Save and Apply をクリックします。

  5. 注文を確認し、クラスターを作成します。

    クラスターが作成された後、ルール条件が満たされるとノードグループでスケーリングアクティビティがトリガーされます。

方法3:SDK を使用したルール設定

クラスターまたはノードグループを作成する際に、ノードグループのカスタムスケーリングルールを設定して、ノードの作成と管理を自動化できます。詳細については、「クラスターの作成」および「ノードグループの作成」をご参照ください。既存のノードグループにカスタムスケーリングルールを設定することもできます。詳細については、「カスタム自動スケーリングポリシーの作成」をご参照ください。

次の Java コードは、負荷ベースのスケールアウトルールを設定する例です。

説明

より安全な STS 方式を使用してクライアントを初期化することを推奨します。認証方法の詳細については、「アクセス資格情報の管理」をご参照ください。

// このファイルは自動生成されたものです。編集しないでください。
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>AccessKey ペアを使用してクライアントを初期化します。</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.emr20210320.Client createClient() throws Exception {
        // ソースコードが漏洩すると、AccessKey ペアが漏洩し、すべてのリソースのセキュリティ上のリスクとなります。以下のコードは参照用です。
        // より安全なSTS方式による認証を推奨します。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必須: ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必須: ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // エンドポイントについては、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 {
            // API の戻り値はご自身で出力してください。
            client.putAutoScalingPolicyWithOptions(putAutoScalingPolicyRequest, runtime);
        } catch (TeaException error) {
            // 以下のコードはデモ用です。実際のプロジェクトでは、例外を無視せず慎重に処理することを推奨します。
            // エラーメッセージ
            System.out.println(error.getMessage());
            // 診断アドレス
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception exception) {
            TeaException error = new TeaException(exception.getMessage(), exception);
            // 以下のコードはデモ用です。実際のプロジェクトでは、例外を無視せず慎重に処理することを推奨します。
            // エラーメッセージ
            System.out.println(error.getMessage());
            // 診断アドレス
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

E-MapReduce (EMR) 自動スケーリングメトリックと YARN メトリックのマッピング

説明
  • キュー関連の自動スケーリングメトリックの場合、queue_name パラメーターを指定します。デフォルト値はルートです。カスタムキューも使用できます。

  • パーティション関連の自動スケーリングメトリックの場合、partition_name パラメーターを指定する必要があります。

E-MapReduce (EMR) メトリック

サービス

説明

yarn_resourcemanager_queue_AvailableVCores

YARN

指定されたキューで使用可能な仮想 CPU コアの数。

yarn_resourcemanager_queue_PendingVCores

YARN

指定されたキューで待機中の仮想 CPU コアの数。

yarn_resourcemanager_queue_AllocatedVCores

YARN

指定されたキューで割り当て済みの仮想 CPU コアの数。

yarn_resourcemanager_queue_ReservedVCores

YARN

指定されたキューで予約済みの仮想 CPU コアの数。

yarn_resourcemanager_queue_AvailableMB

YARN

指定されたキューで使用可能なメモリの量。

yarn_resourcemanager_queue_PendingMB

YARN

指定されたキューで待機中のメモリの量。

yarn_resourcemanager_queue_AllocatedMB

YARN

指定されたキューで割り当て済みのメモリの量。

yarn_resourcemanager_queue_ReservedMB

YARN

指定されたキューで予約済みのメモリの量。

yarn_resourcemanager_queue_AppsRunning

YARN

指定されたキューで実行中のアプリケーションの数。

yarn_resourcemanager_queue_AppsPending

YARN

指定されたキューで待機中のアプリケーションの数。

yarn_resourcemanager_queue_AppsKilled

YARN

指定されたキューで強制終了されたアプリケーションの数。

yarn_resourcemanager_queue_AppsFailed

YARN

指定されたキューで失敗したアプリケーションの数。

yarn_resourcemanager_queue_AppsCompleted

YARN

指定されたキューで完了したアプリケーションの数。

yarn_resourcemanager_queue_AppsSubmitted

YARN

指定されたキューで送信済みのアプリケーションの数。

yarn_resourcemanager_queue_AllocatedContainers

YARN

指定されたキューで割り当て済みのコンテナの数。

yarn_resourcemanager_queue_PendingContainers

YARN

指定されたキューで待機中のコンテナの数。

yarn_resourcemanager_queue_ReservedContainers

YARN

指定されたキューで予約済みのコンテナの数。

yarn_resourcemanager_queue_AvailableMBPercentage

YARN

指定されたキューで使用可能なメモリリソースのパーセンテージ: MemoryAvailablePercentage = AvailableMemory / TotalMemory

説明

このメトリックは、E-MapReduce (EMR)-3.43.0 以降のバージョンおよび E-MapReduce (EMR)-5.9.0 以降のバージョンで利用できます。

yarn_resourcemanager_queue_PendingContainersRatio

YARN

指定されたキューで待機中のコンテナ数と割り当て済みのコンテナ数の比率: ContainerPendingRatio = PendingContainers / AllocatedContainers

説明

このメトリックは、E-MapReduce (EMR)-3.43.0 以降のバージョンおよび E-MapReduce (EMR)-5.9.0 以降のバージョンで利用できます。

yarn_resourcemanager_queue_AvailableVCoresPercentage

YARN

指定されたキューで使用可能な仮想 CPU コアのパーセンテージ: AvailableVCoresPercentage = AvailableVCores / (ReservedVCores + AvailableVCores + AllocatedVCores) * 100

説明

このメトリックは、E-MapReduce (EMR)-3.43.0 以降のバージョンおよび E-MapReduce (EMR)-5.9.0 以降のバージョンで利用できます。

yarn_cluster_numContainersByPartition

YARN

指定されたパーティション内のコンテナの数。partition_name パラメーターにパーティション名を指定します。

説明

このメトリックは、E-MapReduce (EMR)-3.44.0 以降のバージョンおよび E-MapReduce (EMR)-5.10.0 以降のバージョンで利用できます。

yarn_cluster_usedMemoryMBByPartition

YARN

指定されたパーティションのメモリ使用量。partition_name パラメーターにパーティション名を指定します。

説明

このメトリックは、E-MapReduce (EMR)-3.44.0 以降のバージョンおよび E-MapReduce (EMR)-5.10.0 以降のバージョンで利用できます。

yarn_cluster_availMemoryMBByPartition

YARN

指定されたパーティションで使用可能なメモリ。partition_name パラメーターにパーティション名を指定します。

説明

このメトリックは、E-MapReduce (EMR)-3.44.0 以降のバージョンおよび E-MapReduce (EMR)-5.10.0 以降のバージョンで利用できます。

yarn_cluster_usedVirtualCoresByPartition

YARN

指定されたパーティションで使用中の仮想 CPU コアの数。partition_name パラメーターにパーティション名を指定します。

説明

このメトリックは、E-MapReduce (EMR)-3.44.0 以降のバージョンおよび E-MapReduce (EMR)-5.10.0 以降のバージョンで利用できます。

yarn_cluster_availableVirtualCoresByPartition

YARN

指定されたパーティションで使用可能な仮想 CPU コアの数。partition_name パラメーターにパーティション名を指定します。

説明

このメトリックは、E-MapReduce (EMR)-3.44.0 以降のバージョンおよび E-MapReduce (EMR)-5.10.0 以降のバージョンで利用できます。

よくある質問

EMR クラスターのスケールアウトが失敗するのはなぜですか?スケールアウトの成功率を向上させるにはどうすればよいですか?

根本原因

  1. ECS リソースの在庫不足:特定のインスタンスタイプの ECS インスタンスについて、要求された台数が現在のアベイラビリティーゾーンで利用可能な在庫を上回る場合、スケールアウトが失敗することがあります。基盤となる ECS リソースは動的で、需要が高い場合は一時的に在庫が不足することがあります。

  2. 単一インスタンスタイプの制限:オートスケーリング設定で ECS インスタンスタイプを 1 つのみ指定しており、そのタイプの在庫が不足している場合、スケールアウトは失敗します。

解決策

  • スケーリングルールを設定する際、[Best-effort Delivery] スイッチをオンにしてベストエフォートデリバリーを有効にすることを推奨します。これにより、一部のリソースが利用できない場合でも、システムはスケールアウト要求を完全に破棄するのではなく、可能な限り多くのリソースをプロビジョニングします。

  • 複数のインスタンスタイプを設定:成功率を高めるため、タスクノードグループに複数の ECS インスタンスタイプを設定することを推奨します。詳細については、「Create a node group」をご参照ください。スケールアウト時、システムはリストの先頭のインスタンスタイプから順にインスタンスのプロビジョニングを試みます。利用できない場合は自動的に次のインスタンスタイプを試し、リクエストが満たされるまで続行します。

これらの対策により、EMR クラスターのスケールアウト成功率を大幅に向上させることができます。