Amazon EMR の以前の AMI バージョンでクラスターを作成する - Amazon EMR

Amazon EMR の以前の AMI バージョンでクラスターを作成する

Amazon EMR 2.x および 3.x リリースは AMI バージョンによって参照されます。Amazon EMR リリース 4.0.0 以降では、リリースは emr-5.11.0 などのリリースラベルを使用してリリースバージョンによって参照されます。この変更は、AWS CLI またはプログラムを使用してクラスターを作成するときに最も明らかになります。

AWS CLI を使用して AMI リリースバージョンでクラスターを作成する場合は、--ami-version 3.11.0 などの --ami-version オプションを使用します。Amazon EMR 4.0.0 以降で導入された多くのオプション、機能、およびアプリケーションは、--ami-version を指定すると利用できません。詳細については、「AWS CLI コマンドリファレンス」の「create-cluster」を参照してください。

次の AWS CLI コマンドの例では、AMI バージョンを使用してクラスターを起動します。

注記

読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,\ InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\ InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\ Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]

プログラムでは、すべての Amazon EMR リリースバージョンが EMR API でクラスターを作成する RunJobFlowRequest アクションを使用します。次の Java コード例では、AMI リリースバージョン 3.11.0 を使用してクラスターを作成します。

RunJobFlowRequest request = new RunJobFlowRequest() .withName("AmiVersion Cluster") .withAmiVersion("3.11.0") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

次の RunJobFlowRequest 呼び出しには、代わりにリリースラベルを使用します。

RunJobFlowRequest request = new RunJobFlowRequest() .withName("ReleaseLabel Cluster") .withReleaseLabel("emr-5.36.1") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

クラスターサイズの設定

クラスターの実行時、Hadoop は、データを処理するときに必要だったマッパータスクとリデューサータスクの数を確認します。クラスターが大きければ、リソースを効率的に使用し、処理時間を短縮するために、タスクの数は多くなるはずです。通常、EMR クラスターのサイズは、そのクラスターを通して変わりません。タスクの数はクラスターの作成時に設定します。実行中のクラスターのサイズを変更すると、クラスター実行中に処理を変更できます。つまり、タスクの数は固定されておらず、クラスターが存続している間は変更できます。最適な数のタスクを設定するのに役立つ設定オプションは 2 つあります:

  • mapred.map.tasksperslot

  • mapred.reduce.tasksperslot

これらのオプションは両方とも mapred-conf.xml ファイルで設定できます。ジョブをクラスターに送信するとき、クラスター全体で使用できるマップおよびリデューススロットの現在の合計数がジョブクライアントによって確認されます。その後、ジョブクライアントは次の方程式を使用して、タスクの数を設定します。

  • mapred.map.tasks = mapred.map.tasksperslot ×クラスターのマップスロット数

  • mapred.reduce.tasks =mapred.reduce.tasksperslot ×クラスターのリデューススロット数

ジョブクライアントは、タスク数が設定されていない場合にのみ tasksperslot パラメータを読み込みます。タスク数はいつでも無効にできます。この無効にする処理は、ブートストラップアクションを使用してすべてのクラスターに対してまとめて実行することも、設定を変更するステップを追加してジョブごとに個別に実行することも可能です。

Amazon EMR は、タスクノードエラーに対する耐性があり、タスクノードが使用できなくなってもクラスターの実行を継続できます。Amazon EMR は、追加のタスクノードを自動的にプロビジョニングし、エラーが発生したタスクノードの代わりに配置します。

クラスターステップごとに異なる数のタスクノードを設定できます。また、実行中のクラスターにステップを追加して、タスクノードの数を変更することもできます。デフォルトで、すべてのステップが確実に順次実行されるので、どのステップに対しても、実行中のタスクノードの数を指定できます。