Anpassen von Cluster- und Anwendungskonfiguration mit früheren AMI-Versionen von Amazon EMR - Amazon EMR

Anpassen von Cluster- und Anwendungskonfiguration mit früheren AMI-Versionen von Amazon EMR

Mit Amazon-EMR-Version 4.0.0 wurde eine vereinfachte Methode zur Konfiguration von Anwendungen mithilfe von Konfigurationsklassifizierungen eingeführt. Weitere Informationen finden Sie unter Anwendungen konfigurieren. Wenn Sie eine AMI-Version verwenden, konfigurieren Sie Anwendungen mit Bootstrap-Aktionen und Argumenten, die Sie übergeben. Beispielsweise legen die configure-hadoop- und configure-daemons-Bootstrap-Aktionen Hadoop- und YARN-spezifische Umgebungseigenschaften wie --namenode-heap-size fest. In neueren Versionen werden diese mit den Konfigurationsklassifizierungen hadoop-env und yarn-env konfiguriert. Informationen zu Bootstrap-Aktionen für allgemeine Konfigurationen finden Sie im emr-bootstrap-actions-Repository auf Github.

Die folgenden Tabellen zeigen die Zuordnung von Bootstrap-Aktionen zu Konfigurationsklassifizierungen in neueren Amazon-EMR-Versionen.

Hadoop
Dateiname der betroffenen Anwendung Bootstrap-Aktion für AMI-Version Konfigurationsklassifizierung
core-site.xml configure-hadoop -c core-site
log4j.properties configure-hadoop -l hadoop-log4j
hdfs-site.xml configure-hadoop -s hdfs-site
hdfs-encryption-zones
mapred-site.xml configure-hadoop -m mapred-site
yarn-site.xml configure-hadoop -y yarn-site
httpfs-site.xml configure-hadoop -t httpfs-site
capacity-scheduler.xml configure-hadoop -z capacity-scheduler
yarn-env.sh configure-daemons --resourcemanager-opts yarn-env
Hive
Dateiname der betroffenen Anwendung Bootstrap-Aktion für AMI-Version Konfigurationsklassifizierung
hive-env.sh hive-env
hive-site.xml hive-script --install-hive-site ${MY_HIVE_SITE_FILE} hive-site
hive-exec-log4j.properties hive-exec-log4j
hive-log4j.properties hive-log4j
EMRFS
Dateiname der betroffenen Anwendung Bootstrap-Aktion für AMI-Version Konfigurationsklassifizierung
emrfs-site.xml configure-hadoop -e emrfs-site
s3get -s s3://custom-provider.jar -d /usr/share/aws/emr/auxlib/ emrfs-site (mit neuer Einstellung fs.s3.cse.encryptionMaterialsProvider.uri)

Eine Liste aller Klassifizierungen finden Sie unter Anwendungen konfigurieren.

Variablen für die Anwendungsumgebung

Bei Verwendung einer AMI-Version wird ein hadoop-user-env.sh-Skript zusammen mit der Bootstrap-Aktion configure-daemons zur Konfiguration der Hadoop-Umgebung eingesetzt. Das Skript umfasst die folgenden Aktionen:

#!/bin/bash export HADOOP_USER_CLASSPATH_FIRST=true; echo "HADOOP_CLASSPATH=/path/to/my.jar" >> /home/hadoop/conf/hadoop-user-env.sh

In Amazon-EMR-Version 4.x gehen Sie genauso vor und verwenden die Konfigurationsklassifizierung hadoop-env, wie im folgenden Beispiel gezeigt:

[       {          "Classification":"hadoop-env",          "Properties":{          },          "Configurations":[             {                "Classification":"export",                "Properties":{                   "HADOOP_USER_CLASSPATH_FIRST":"true",                   "HADOOP_CLASSPATH":"/path/to/my.jar"                }             }          ]       }    ]

Ein weiteres Beispiel verdeutlicht, dass die Verwendung von configure-daemons und die Übergabe von --namenode-heap-size=2048 und --namenode-opts=-XX:GCTimeRatio=19 den folgenden Konfigurationsklassifizierungen entspricht.

[       {          "Classification":"hadoop-env",          "Properties":{          },          "Configurations":[             {                "Classification":"export",                "Properties":{                   "HADOOP_DATANODE_HEAPSIZE": "2048", "HADOOP_NAMENODE_OPTS": "-XX:GCTimeRatio=19"                }             }          ]       }    ]

Andere Umgebungsvariablen der Anwendung werden nicht länger in /home/hadoop/.bashrc definiert. Stattdessen werden sie hauptsächlich in /etc/default-Dateien nach Komponente oder Anwendung eingerichtet, z. B. /etc/default/hadoop. Wrapper-Skripts in /usr/bin/, die entsprechend der Anwendungs-RPMs installiert sind, können auch zusätzliche Umgebungsvariablen festlegen, ohne dass das tatsächliche Bin-Skript beteiligt werden muss.

Service-Ports

Bei Verwendung einer AMI-Version nutzen einige Services benutzerdefinierte Ports.

Änderungen der Port-Einstellungen
Einstellung AMI-Version 3.x Open-Source-Standard
fs.default.name hdfs://emrDeterminedIP:9000 Standard (hdfs://emrDeterminedIP:8020)
dfs.datanode.address 0.0.0.0:9200 Standard (0.0.0.0:50010)
dfs.datanode.http.address 0.0.0.0:9102 Standard (0.0.0.0:50075)
dfs.datanode.https.address 0.0.0.0:9402 Standard (0.0.0.0:50475)
dfs.datanode.ipc.address 0.0.0.0:9201 Standard (0.0.0.0:50020)
dfs.http.address 0.0.0.0:9101 Standard (0.0.0.0:50070)
dfs.https.address 0.0.0.0:9202 Standard (0.0.0.0:50470)
dfs.secondary.http.address 0.0.0.0:9104 Standard (0.0.0.0:50090)
yarn.nodemanager.address 0.0.0.0:9103 Standard (${yarn.nodemanager.hostname}:0)
yarn.nodemanager.localizer.address 0.0.0.0:9033 Standard (${yarn.nodemanager.hostname}:8040)
yarn.nodemanager.webapp.address 0.0.0.0:9035 Standard (${yarn.nodemanager.hostname}:8042)
yarn.resourcemanager.address emrDeterminedIP:9022 Standard (${yarn.resourcemanager.hostname}:8032)
yarn.resourcemanager.admin.address emrDeterminedIP:9025 Standard (${yarn.resourcemanager.hostname}:8033)
yarn.resourcemanager.resource-tracker.address emrDeterminedIP:9023 Standard (${yarn.resourcemanager.hostname}:8031)
yarn.resourcemanager.scheduler.address emrDeterminedIP:9024 Standard (${yarn.resourcemanager.hostname}:8030)
yarn.resourcemanager.webapp.address 0.0.0.0:9026 Standard (${yarn.resourcemanager.hostname}:8088)
yarn.web-proxy.address emrDeterminedIP:9046 Standard (no-value)
yarn.resourcemanager.hostname 0.0.0.0 (Standard) emrDeterminedIP
Anmerkung

Bei emrDeterminedIP handelt es sich um eine IP-Adresse, die von Amazon EMR generiert wird.

Benutzer

Bei Verwendung einer AMI-Version führt der Benutzer hadoop alle Prozesse aus. Zudem gehören ihm alle Dateien. Ab Amazon-EMR-Version 4.0.0 und höher sind Benutzer auf Anwendungs- und Komponentenebene vorhanden.

Installationssequenz, installierte Artefakte und Speicherorte für die Protokolldatei

Bei Verwendung einer AMI-Version werden Anwendungs-Artefakte und deren Konfigurationsverzeichnisse im Verzeichnis /home/hadoop/application installiert. Wenn Sie beispielsweise das Verzeichnis Hive installiert hatten, lautete das Verzeichnis /home/hadoop/hive. Ab Amazon-EMR-Version 4.0.0 und höher werden Anwendungs-Artefakte im Verzeichnis /usr/lib/application installiert. Bei Verwendung einer AMI-Version werden Protokolldateien an unterschiedlichen Speicherorten gespeichert. In der folgenden Tabelle sind diese Speicherorte aufgeführt.

Änderungen der Protokollspeicherorte in Amazon S3
Daemon oder Anwendung Speicherort des Verzeichnisses
instance-state node/instance-id/instance-state/
hadoop-hdfs-namenode daemons/instance-id/hadoop-hadoop-namenode.log
hadoop-hdfs-datanode daemons/instance-id/hadoop-hadoop-datanode.log
hadoop-yarn (ResourceManager) daemons/instance-id/yarn-hadoop-resourcemanager
hadoop-yarn (Proxy-Server) daemons/instance-id/yarn-hadoop-proxyserver
mapred-historyserver daemons/instance-id/
httpfs daemons/instance-id/httpfs.log
hive-server node/instance-id/hive-server/hive-server.log
hive-metastore node/instance-id/apps/hive.log
Hive CLI node/instance-id/apps/hive.log
Benutzer- und Container-Protokolle der YARN Anwendungen task-attempts/
Mahout
Pig
spark-historyserver
Verlaufsdateien des MapReduce-Auftrags jobs/

Command Runner

Bei Verwendung einer AMI-Version werden viele Skripts oder Programme wie /home/hadoop/contrib/streaming/hadoop-streaming.jar nicht in der Shell-Anmeldepfadumgebung abgelegt. Deshalb müssen Sie den vollständigen Pfad angeben, wenn Sie eine JAR-Datei wie command-runner.jar oder script-runner.jar zur Skriptausführung einsetzen. command-runner.jar befindet sich im AMI. Sie müssen also anders als bei script-runner.jar nicht die vollständige URI kennen.

Replikationsfaktor

Mit dem Replikationsfaktor können Sie konfigurieren, wann eine Hadoop-JVM gestartet werden soll. Sie können eine neue Hadoop-JVM für jede Aufgabe starten, die eine bessere Isolierung bietet, oder Sie können JVMs mit Aufgaben teilen, um einen niedrigeren Framework-Overhead zu erzielen. Wenn Sie viele kleine Dateien verarbeiten, ist es durchaus sinnvoll, die JVM oft wieder zu verwenden, damit sich die Kosten für den Start amortisieren. Wenn jedoch die einzelnen Aufgaben viel Zeit in Anspruch nehmen oder Prozesse eine große Datenmenge verwenden, können Sie entscheiden, die JVM nicht erneut zu verwenden, um sicherzustellen, dass der gesamte JVM-Speicher für nachfolgende Aufgaben freigegeben wird. Bei Verwendung einer AMI-Version können Sie den Replikationsfaktor mit der Bootstrap-Aktion configure-hadoop anpassen, um die mapred.job.reuse.jvm.num.tasks-Eigenschaft festzulegen.

Das folgende Beispiel zeigt die Einrichtung eines JVM-Wiederverwendungsfaktors für die unbegrenzte Wiederverwendung einer JVM.

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