Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Amazon EMR 6.x unterstützt Hadoop 3, wodurch YARN NodeManager Container entweder direkt auf dem Amazon EMR-Cluster oder in einem Docker-Container starten kann. Docker-Container bieten benutzerdefinierte Ausführungsumgebungen, in denen Anwendungscode ausgeführt wird. Die benutzerdefinierte Ausführungsumgebung ist von der Ausführungsumgebung von YARN und anderen Anwendungen isoliert. NodeManager
Docker-Container können spezielle Bibliotheken enthalten, die von der Anwendung verwendet werden, und sie können verschiedene Versionen von systemeigenen Tools und Bibliotheken wie R und Python bereitstellen. Sie können die vertrauten Docker-Tools verwenden, um Bibliotheken und Laufzeitabhängigkeiten für Ihre Anwendungen zu definieren.
Amazon-EMR-6.x-Cluster sind standardmäßig so konfiguriert, dass YARN Anwendungen wie Spark mit Docker-Containern ausführen kann. Um die Containerkonfiguration anzupassen, bearbeiten Sie die Docker-Unterstützungsoptionen, die in den im /etc/hadoop/conf
-Verzeichnis verfügbaren Dateien „yarn-site.xml
“ und „container-executor.cfg
“ definiert sind. Weitere Informationen zu den einzelnen Konfigurationsoptionen und deren Verwendung finden Sie unter Starten von Anwendungen mithilfe von Docker-Containern
Sie können Docker verwenden, wenn Sie eine Aufgabe absenden. Verwenden Sie die folgenden Variablen, um die Docker-Laufzeit und das Docker-Image anzugeben.
YARN_CONTAINER_RUNTIME_TYPE=docker
YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={
DOCKER_IMAGE_NAME
}
Wenn Sie Docker-Container verwenden, um Ihre YARN-Anwendungen auszuführen, lädt YARN das Docker-Image herunter, das Sie beim Absenden der Aufgabe angeben. Damit YARN dieses Docker-Image auflösen kann, muss es mit einer Docker-Registrierung konfiguriert werden. Die Konfigurationsoptionen für eine Docker-Registrierung hängen davon ab, ob Sie den Cluster über ein öffentliches oder privates Subnetz bereitstellen.
Docker-Registrierungen
Eine Docker-Registrierung ist ein Speicher- und Verteilungssystem für Docker-Images. Für Amazon EMR empfehlen wir die Verwendung von Amazon ECR, einer vollständig verwalteten Docker-Container-Registrierung, mit der Sie Ihre eigenen benutzerdefinierten Images erstellen und diese in einer hochverfügbaren und skalierbaren Architektur hosten können.
Überlegungen zur Bereitstellung
Für Docker-Registrierungen ist Netzwerkzugriff von jedem Host im Cluster erforderlich. Dies liegt daran, dass jeder Host Images aus der Docker-Registrierung herunterlädt, wenn Ihre YARN-Anwendung auf dem Cluster ausgeführt wird. Diese Anforderungen an die Netzwerkkonnektivität können die Auswahl der Docker-Registrierung einschränken, je nachdem, ob Sie Ihren Amazon-EMR-Cluster in einem öffentlichen oder privaten Subnetz bereitstellen.
Public subnet (Öffentliches Subnetz)
Wenn EMR-Cluster in einem öffentlichen Subnetz bereitgestellt werden, NodeManager können die Knoten, auf denen YARN ausgeführt wird, direkt auf jede Registrierung zugreifen, die über das Internet verfügbar ist.
Privates Subnetz
Wenn EMR-Cluster in einem privaten Subnetz bereitgestellt werden, haben die Knoten, auf denen YARN ausgeführt wird, NodeManager keinen direkten Zugriff auf das Internet. Docker-Images können in Amazon ECR gehostet und über abgerufen werden. AWS PrivateLink
Weitere Informationen dazu, wie Sie AWS PrivateLink den Zugriff auf Amazon ECR in einem privaten Subnetzszenario zulassen, finden Sie unter Einrichtung AWS PrivateLink für Amazon ECS und Amazon ECR
Konfigurieren von Docker-Registrierungen
Um Docker-Registrierungen mit Amazon EMR verwenden zu können, müssen Sie Docker so konfigurieren, dass sie der spezifischen Registrierung vertrauen, die Sie zum Auflösen von Docker-Images verwenden möchten. Die Standardvertrauensregistrierungen sind „local“ (privat) und „centos“. Wenn Sie andere öffentliche Repositorys oder Amazon ECR verwenden möchten, können Sie docker.trusted.registries
-Einstellungen in /etc/hadoop/conf/container-executor.cfg
außer Kraft setzen, indem Sie die EMR-Klassifikations-API mit dem container-executor
-Klassifizierungsschlüssel verwenden.
Das folgende Beispiel zeigt, wie Sie den Cluster so konfigurieren, dass er sowohl einem öffentlichen Repository mit dem Namen „your-public-repo
“, als auch einem ECR-Registrierungsendpunkt vertraut, 123456789123.dkr.ecr.us-east-1.amazonaws.com
. Wenn Sie ECR verwenden, ersetzen Sie diesen Endpunkt durch Ihren spezifischen ECR-Endpunkt.
[ { "Classification": "container-executor", "Configurations": [ { "Classification": "docker", "Properties": { "docker.trusted.registries": "local,centos,
your-public-repo
,123456789123.dkr.ecr.us-east-1.amazonaws.com", "docker.privileged-containers.registries": "local,centos,your-public-repo,123456789123.dkr.ecr.us-east-1.amazonaws.com" } } ] } ]
Um einen Amazon EMR 6.0.0-Cluster mit dieser Konfiguration mithilfe von AWS Command Line Interface (AWS CLI) zu starten, erstellen Sie eine Datei container-executor.json
mit dem Namen des Inhalts der vorherigen Container-Executor-JSON-Konfiguration. Verwenden Sie dann die folgenden Befehle, um den Cluster zu starten.
export KEYPAIR=<
Name of your Amazon EC2 key-pair
> export SUBNET_ID=<ID of the subnet to which to deploy the cluster
> export INSTANCE_TYPE=<Name of the instance type to use
> export REGION=<Region to which to deploy the cluster
> aws emr create-cluster \ --name "EMR-6.0.0" \ --region $REGION \ --release-label emr-6.0.0 \ --applications Name=Hadoop Name=Spark \ --service-role EMR_DefaultRole \ --ec2-attributes KeyName=$KEYPAIR,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=$SUBNET_ID \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=$INSTANCE_TYPE InstanceGroupType=CORE,InstanceCount=2,InstanceType=$INSTANCE_TYPE \ --configuration file://container-executor.json
YARN für den Zugriff auf Amazon ECR auf EMR 6.0.0 und früher konfigurieren
Wenn Sie neu bei Amazon ECR sind, folgen Sie den Anweisungen unter Erste Schritte mit Amazon ECR und stellen Sie sicher, dass Sie von jeder Instance in Ihrem Amazon-EMR-Cluster Zugriff auf Amazon ECR haben.
Um unter EMR 6.0.0 und früher auf Amazon ECR mit dem Docker-Befehl zuzugreifen, müssen Sie zunächst Anmeldeinformationen generieren. Wenn Sie überprüfen möchten, ob YARN auf Images von Amazon ECR zugreifen kann, verwenden Sie die Container-Umgebungsvariable YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG
, um einen Verweis auf die von Ihnen generierten Anmeldeinformationen zu übergeben.
Führen Sie den folgenden Befehl auf einem der Core-Knoten aus, um die Anmeldezeile für Ihr ECR-Konto zu erhalten.
aws ecr get-login --region us-east-1 --no-include-email
Der get-login
-Befehl generiert den korrekten Docker-CLI-Befehl zum Erstellen von Anmeldeinformationen. Kopieren Sie die Ausgabe von get-login
und führen Sie sie aus.
sudo docker login -u AWS -p <
password
> https://<account-id
>.dkr.ecr.us-east-1.amazonaws.com
Mit diesem Befehl wird eine config.json
-Datei im /root/.docker
-Ordner generiert. Kopieren Sie diese Datei in HDFS, damit sie von den an den Cluster übermittelten Aufgaben zur Authentifizierung bei Amazon ECR verwendet werden kann.
Führen Sie die folgenden Befehle aus, um die config.json
-Datei in Ihr Startverzeichnis zu kopieren.
mkdir -p ~/.docker
sudo cp /root/.docker/config.json ~/.docker/config.json
sudo chmod 644 ~/.docker/config.json
Führen Sie die folgenden Befehle aus, um die config.json-Datei in HDFS festzulegen, damit sie von Aufgaben verwendet werden kann, die auf dem Cluster ausgeführt werden.
hadoop fs -put ~/.docker/config.json /user/hadoop/
YARN kann auf ECR als Docker-Image-Registrierung zugreifen und Container während der Aufgabenausführung abrufen.
Nachdem Sie Docker-Registrierungen und YARN konfiguriert haben, können Sie YARN-Anwendungen mit Docker-Containern ausführen. Weitere Informationen finden Sie unter Ausführen von Spark-Anwendungen mit Docker mithilfe von Amazon EMR 6.0.0.
In EMR 6.1.0 und höher müssen Sie die Authentifizierung für Amazon ECR nicht manuell einrichten. Wenn im container-executor
-Klassifikationsschlüssel eine Amazon-ECR-Registrierung erkannt wird, wird das automatische Amazon-ECR-Authentifizierungsfeature aktiviert, und YARN wickelt den Authentifizierungsprozess ab, wenn Sie einen Spark-Auftrag mit einem ECR-Image einreichen. Sie können überprüfen, ob die automatische Authentifizierung aktiviert ist, indem Sie in yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
der YARN-Seite einchecken. Die automatische Authentifizierung ist aktiviert und die YARN-Authentifizierungseinstellung ist auf true
gesetzt, wenn die eine ECR-Registrierungs-URL docker.trusted.registries
enthält.
Voraussetzungen für die Verwendung der automatischen Authentifizierung bei Amazon ECR
EMR Version 6.1.0 oder höher
Die in der Konfiguration enthaltene ECR-Registrierung befindet sich in derselben Region wie der Cluster
IAM-Rolle mit Berechtigungen zum Abrufen des Autorisierungstoken und zum Abrufen eines beliebigen Images
Weitere Informationen finden Sie unter Einrichten mit Amazon ECS.
Wie aktiviere ich die automatische Authentifizierung
Folgen Sie Konfigurieren von Docker-Registrierungen , um eine Amazon-ECR-Registrierung als vertrauenswürdige Registrierung festzulegen, und stellen Sie sicher, dass sich das Amazon-ECR-Repository und der Cluster in derselben Region befinden.
Um dieses Feature auch dann zu aktivieren, wenn die ECR-Registrierung nicht in der vertrauenswürdigen Registrierung festgelegt ist, verwenden Sie die Konfigurationsklassifizierung, um yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
auf true
festzulegen.
Wie deaktiviere ich die automatische Authentifizierung
Standardmäßig ist die automatische Authentifizierung deaktiviert, wenn in der vertrauenswürdigen Registrierung keine Amazon-ECR-Registrierung erkannt wird.
Um die automatische Authentifizierung zu deaktivieren, auch wenn die Amazon-ECR-Registrierung in der vertrauenswürdigen Registrierung festgelegt ist, verwenden Sie die Konfigurationsklassifizierung, um yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
auf false
festzulegen.
Wie überprüft man, ob die automatische Authentifizierung in einem Cluster aktiviert ist
Verwenden Sie einen Text-Editor wie vi
auf dem Hauptknoten, um den Inhalt der Datei vi /etc/hadoop/conf.empty/yarn-site.xml
anzuzeigen. Überprüfen Sie den Wert von yarn.nodemanager.runtime.linux.docker.ecr-auto-authentication.enabled
.