Wie kann ich Python-Bibliotheken auf meinen EMR-Clustern installieren?

Lesedauer: 3 Minute
0

Ich möchte externe Python-Bibliotheken auf meinen Amazon EMR-Clustern installieren

Kurzbeschreibung

Sie können Python-Bibliotheken mithilfe einer Bootstrap-Aktion installieren.

EMR verwendet Puppet, den von Apache BigTop verwendeten Bereitstellungsmechanismus, um Anwendungen auf Instances zu konfigurieren und zu initialisieren. Instance-Controller ist die Softwarekomponente von EMR, die auf jeder Instance des Clusters ausgeführt wird. Instance-Controller initialisiert Instances und stellt sie dann basierend auf der Instancekonfiguration bereit.

Der Instancecontroller führt das Provision-Node-Skript unter /usr/share/aws/emr/node-provisioner/bin/provision-node aus, um NodeProvisioner beim Cluster-Start zu starten. NodeProvisioner stellt alle Anwendungen der EMR-Distribution für die Knoten- und Clusterkonfiguration bereit. NodeProvisioner wird als letzte Bootstrap-Aktion behandelt, die ausgeführt wird, nachdem alle anderen Bootstrap-Aktionen auf jedem Knoten des Clusters ausgeführt wurden.

Lösung

In den neuesten EMR-Clustern werden Bootstrap-Aktionen ausgeführt, bevor Amazon EMR die bei der Clustererstellung angegebenen Anwendungen installiert. Die Bootstrap-Aktion wird ausgeführt, bevor Clusterknoten mit der Verarbeitung von Daten beginnen. Wenn Sie einem laufenden Cluster Knoten hinzufügen, werden Bootstrap-Aktionen auch auf diesen Knoten auf die gleiche Weise ausgeführt. Sie können benutzerdefinierte Bootstrap-Aktionen erstellen und Anwendungen angeben, die installiert werden sollen, wenn Sie Ihren Cluster erstellen. Weitere Informationen finden Sie unter Erstellen von Bootstrap-Aktionen, um zusätzliche Software zu installieren.

Beheben Sie Probleme mit Bibliotheken, die durch Bootstrap-Aktionen installiert wurden und die durch Standardbibliotheken überschrieben werden

Bibliotheken, die mithilfe von Bootstrap-Aktionen installiert wurden, können durch Amazon EMR-Standardbibliotheken überschrieben werden. Das Bootstrap-Skript wird vor der Clustererstellung und vor der Knotenbereitstellung ausgeführt. Bibliotheken könnten also durch die Standardversion überschrieben werden.

Um dieses Problem zu vermeiden, erstellen Sie eine verzögerte Bootstrap-Aktion oder eine Bootstrap-Aktion der zweiten Stufe als laufenden Code. Oder installieren Sie Pakete, nachdem Sie die Meldung NODEPROVISIONSTATE ERFOLGREICH erhalten haben.

Das folgende Bootstrap-Skript aktualisiert die Bibliothek nach der Phase der Anwendungsbereitstellung. Sie können dieses Skript als Bootstrap-Skript hinzufügen, das im Hintergrund ausgeführt und erfolgreich beendet wird, sodass die Cluster-Bereitstellung fortgesetzt wird. Dieses Skript überwacht weiterhin die Knotenbereitstellung und aktualisiert die Bibliothek nach der Bereitstellung.

Das folgende Beispielskript aktualisiert die NumPy-Version:

#!/bin/bash
while true; do
NODEPROVISIONSTATE=\` sed -n '/localInstance [{]/,/[}]/{
/nodeProvisionCheckinRecord [{]/,/[}]/ {
   /status: / { p }
    /[}]/a
   }
  /[}]/a
}'  /emr/instance-controller/lib/info/job-flow-state.txt | awk ' { print \$2 }'\`
        if [ "\$NODEPROVISIONSTATE" == "SUCCESSFUL" ]; then
                     sleep 10;
                echo "Running my post provision bootstrap"
                #your code here
                #Below example lines
                #sudo python3 -m pip uninstall numpy==1.16.5 (this is default version of numpy)
                #sudo python3 -m pip install --upgrade numpy==1.20.1 (new version of numpy)
                exit;
        fi
sleep 10;
done

Hinweis: In einigen Fällen verwenden YARN-Container, auf denen ein Python-Paket ausgeführt wird, möglicherweise kein aktualisiertes Paket, das mit der vorherigen Auflösung installiert werden kann. Wenn auf dem Container kein aktualisiertes Paket ausgeführt wird, werden beim Installationsversuch die Fehler Modul nicht gefunden angezeigt. Dies liegt daran, dass der YARN NodeManager-Prozess für das Starten von Containern verantwortlich ist. Die Container des Knotenmanagers werden möglicherweise bereits ausgeführt oder zugewiesen, bevor der NODEPROVISIONSTATE erfolgreich ist. Dieses Problem tritt häufig bei Clustern mit mehreren Mandanten auf, die häufig automatisch skalieren.

Sie können Fehler, die das Modul nicht gefunden haben, vermeiden, indem Sie den Status des Knotenmanagerdienstes abfragen. Führen Sie dann die gewünschte Bootstrap-Aktion aus, sobald der Knotenmanger gestartet wird.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr