Erstellen eines Clusters mit früheren AMI-Versionen von Amazon EMR - Amazon EMR

Erstellen eines Clusters mit früheren AMI-Versionen von Amazon EMR

Die Versionen 2.x und 3.x von Amazon EMR werden als AMI-Versionen bezeichnet. Ab Amazon-EMR-Version 4.0.0 und höher wird auf Versionen mit der Versionsbezeichnung verwiesen, beispielsweise emr-5.11.0. Diese Änderung wird besonders deutlich, wenn Sie einen Cluster programmgesteuert oder mit der AWS CLI erstellen.

Wenn Sie die AWS CLI zum Erstellen eines Clusters mit einer AMI-Version verwenden, nutzen Sie die Option --ami-version, beispielsweise --ami-version 3.11.0. Viele Optionen, Features und Anwendungen, die mit Amazon EMR 4.0.0 und höher eingeführt wurden, sind nicht verfügbar, wenn Sie --ami-version angeben. Weitere Informationen finden Sie unter create-cluster in der AWS CLI-Befehlsreferenz.

Der folgende AWS CLI-Beispielbefehl startet einen Cluster mit einer AMI-Version.

Anmerkung

Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

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

Programmtechnisch verwenden alle Amazon-EMR-Versionen die Aktion RunJobFlowRequest in der EMR-API zum Erstellen von Clustern. Der folgende Java-Beispielcode erstellt einen Cluster mit der AMI-Version 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");

Der folgende RunJobFlowRequest-Aufruf verwendet stattdessen eine Versionsbezeichnung:

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");

Konfigurieren der Cluster-Größe

Wenn Ihr Cluster ausgeführt wird, bestimmt Hadoop die Anzahl der zum Verarbeiten der Daten erforderlichen Mapper- und Reducer-Tasks. Große Cluster sollten für eine bessere Ressourcennutzung und für kürzere Verarbeitungszeiten über mehr Tasks verfügen. In der Regel behält ein EMR-Cluster seine Größe während seiner gesamten Lebensdauer. Sie legen die Anzahl der Tasks beim Erstellen des Clusters fest. Wenn Sie die Größe eines laufenden Clusters ändern, können Sie die Verarbeitung während der Cluster-Ausführung anpassen. Statt mit einer festen Anzahl von Tasks zu arbeiten, können Sie die Anzahl der Tasks während der Nutzungsdauer des Clusters anpassen. Es gibt zwei Konfigurationsoptionen, mit denen die ideale Anzahl von Tasks festgelegt werden kann:

  • mapred.map.tasksperslot

  • mapred.reduce.tasksperslot

Sie können beide Optionen über die mapred-conf.xml-Datei festlegen. Wenn Sie einen Auftrag an den Cluster senden, überprüft der Auftrags-Client die Gesamtanzahl der aktuell im gesamten Cluster verfügbaren Map- und Reduce-Slots. Der Auftrags-Client verwendet die folgenden Gleichungen, um die Anzahl der Tasks festzulegen:

  • mapred.map.tasks = mapred.map.tasksperslot * Map-Slots im Cluster

  • mapred.reduce.tasks = mapred.reduce.tasksperslot * Reduce-Slots im Cluster

Wenn die Anzahl der Tasks nicht konfiguriert ist, liest der Auftrags-Client nur den tasksperslot-Parameter aus. Sie können die Anzahl der Tasks jederzeit überschreiben – entweder über eine Bootstrap-Aktion für alle Cluster, oder einzeln pro Auftrag durch das Hinzufügen eines Schritts zum Ändern der Konfiguration.

Amazon EMR kann mit Ausfällen von Aufgabenknoten umgehen und führt den Cluster auch dann weiter aus, wenn ein Aufgabenknoten nicht mehr verfügbar ist. Amazon EMR stellt automatisch zusätzliche Aufgabenknoten als Ersatz für ausgefallene Knoten bereit.

Sie können für jeden Cluster-Schritt eine andere Anzahl von Aufgabenknoten nutzen. Sie können außerdem in einem ausgeführten Cluster einen Schritt hinzufügen, um die Anzahl der Aufgabenknoten zu ändern. Da alle Schritte standardmäßig sequenziell ausgeführt werden, können Sie die Anzahl der ausgeführten Aufgabenknoten für einen Schritt festlegen.