Wie installiere ich Python-Bibliotheken in Amazon EMR- und Amazon EMR Serverless-Clustern und behebe Fehler?
Ich möchte Python-Bibliotheken in Amazon EMR- und Amazon EMR Serverless-Clustern installieren und Fehler beheben.
Behebung
Installieren von Python-Bibliotheken in Amazon EMR-Clustern
Verwenden Sie eine Bootstrap-Aktion, um Python-Bibliotheken in Amazon EMR-Clustern zu installieren.
Amazon EMR verwendet Puppet, einen Apache BigTop-Bereitstellungsmechanismus, um Anwendungen auf Instances zu konfigurieren und zu initialisieren. Instance-Controller ist eine Amazon EMR-Softwarekomponente, die auf jeder Cluster-Instance ausgeführt wird. Instance-Controller initialisiert Instances und stellt sie dann basierend auf der Instance-Konfiguration bereit.
Um NodeProvisioner beim Cluster-Start zu starten, führt der Instance-Controller den Provision-Knoten-Skript /usr/share/aws/emr/node-provisioner/bin/provision-node aus. Anschließend stellt NodeProvisioner alle Amazon EMR-Vertriebsanwendungen für die Knoten- und Cluster-Konfiguration bereit. NodeProvisioner ist eine letzte Bootstrap-Aktion, die ausgeführt wird, nachdem alle anderen Bootstrap-Aktionen auf jedem Cluster-Knoten ausgeführt wurden.
Für die neuesten Amazon EMR-Cluster werden Bootstrap-Aktionen ausgeführt, bevor Amazon EMR Anwendungen installiert, die bei der Cluster-Erstellung angegeben wurden. Außerdem wird die Bootstrap-Aktion ausgeführt, bevor Cluster-Knoten Daten verarbeiten. Wenn Sie Knoten zu einem laufenden Cluster hinzufügen, werden Bootstrap-Aktionen auf diesen Knoten ausgeführt. Sie können benutzerdefinierte Bootstrap-Aktionen erstellen und Anwendungen angeben, die installiert werden sollen, wenn Sie Ihren Cluster erstellen.
Installieren von Python-Bibliotheken in Amazon EMR-Serverless-Clustern
Um Python-Bibliotheken zu installieren und ihre Funktionen in Ihren Spark-Jobs und Notebooks zu nutzen, verwenden Sie je nach Anwendungsfall eine der folgenden Methoden:
- Verwenden Sie native Python-Funktionen.
- Erstellen Sie eine virtuelle Python-Umgebung.
- Konfigurieren Sie Ihre PySpark-Jobs direkt für die Verwendung gängiger Python-Bibliotheken.
Problembehandlung bei Python-Bibliotheken
Python-Bibliotheken, die durch Bootstrap-Aktionen installiert werden, werden möglicherweise durch Amazon EMR-Standardbibliotheken überschrieben. Um dieses Problem zu beheben, erstellen Sie eine verzögerte Bootstrap-Aktion oder eine Bootstrap-Aktion der zweiten Phase als laufenden Code. Oder installieren Sie die Pakete, nachdem Sie die Nachricht NODEPROVISIONSTATE SUCCESSFUL erhalten haben.
Mit der folgenden Bootstrap-Aktion wird die Bibliothek nach der Anwendungsbereitstellungsphase aktualisiert. Fügen Sie dieses Skript als Bootstrap-Skript hinzu, das im Hintergrund ausgeführt und beendet wird, sodass die Cluster-Bereitstellung fortgesetzt wird. Dieses Skript überwacht weiterhin die Knotenbereitstellung und aktualisiert die Bibliothek nach der Bereitstellung.
Beispielskript, das die NumPy-Version aktualisiert:
#!/bin/bash set -x cat > /var/tmp/fix-bootstap.sh <<'EOF' #!/bin/bash set -x 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 echo "Running my post provision bootstrap" # your code here sudo /mnt/notebook-env/bin/pip install pandas==1.3.5 sudo /mnt/notebook-env/bin/pip install boto==2.49.0 sudo /mnt/notebook-env/bin/pip install boto3==1.25.0 exit else echo "Sleeping Till Node is Provisioned" sleep 10 fi done EOF chmod +x /var/tmp/fix-bootstap.sh nohup /var/tmp/fix-bootstap.sh 2>&1 &
Hinweis: YARN-Container, die ein Python-Paket ausführen, verwenden möglicherweise kein aktualisiertes Paket, das mit der vorherigen Auflösung installiert werden kann. Daher erhalten Sie die Fehlermeldung Modul nicht gefunden, wenn Sie versuchen, ein aktualisiertes Paket zu installieren. Um Module nicht gefunden-Fehler zu vermeiden, fragen Sie den Nodemanager-Dienststatus ab. Führen Sie dann die gewünschte Bootstrap-Aktion aus, wenn der Nodemanager gestartet wird.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor 3 Jahren