Der Cluster bricht die Ausführung des python-Befehls aufgrund eines Bibliotheks Konflikts ab. Cluster cancels Python command execution due to library conflict

ProblemProblem

Der Cluster wird Cancelled in einem python-Notebook zurückgegeben.The cluster returns Cancelled in a Python notebook. Notebooks in allen anderen Sprachen werden erfolgreich auf demselben Cluster ausgeführt.Notebooks in all other languages execute successfully on the same cluster.

UrsacheCause

Wenn Sie eine in Konflikt stehende Version einer Bibliothek installieren, z. b. ipython , ipywidgets , numpy , scipy oder, pandas PYTHONPATH kann die python-repl unterbrechen, sodass alle Befehle Cancelled nach 30 Sekunden zurückgegeben werden.When you install a conflicting version of a library, such as ipython, ipywidgets, numpy, scipy, or pandas to the PYTHONPATH, then the Python REPL can break, causing all commands to return Cancelled after 30 seconds. Dies unterbricht auch% sh, das Notebook-Makro, mit dem Sie Shellskripts in python-Notebook-Zellen eingeben können.This also breaks %sh, the notebook macro that lets you enter shell scripts in Python notebook cells.

Hinweis

LösungSolution

Gehen Sie folgendermaßen vor, um dieses Problem zu beheben:To solve this problem, do the following:

  1. Identifizieren Sie die widersprüchliche Bibliothek, und deinstallieren Sie Sie.Identify the conflicting library and uninstall it.
  2. Installieren Sie die korrekte Version der Bibliothek in einem Notebook oder mit einem Init-Skript im Cluster Bereich.Install the correct version of the library in a notebook or with a cluster-scoped init script.

Identifizieren der in Konflikt stehenden BibliothekIdentify the conflicting library

  1. Deinstallieren Sie jede Bibliothek nacheinander, und überprüfen Sie, ob die python-repl weiterhin unterbrochen wird.Uninstall each library one at a time, and check if the Python REPL still breaks.
  2. Wenn die repl weiterhin unterbrochen wird, installieren Sie die entfernte Bibliothek neu, und entfernen Sie die nächste.If the REPL still breaks, reinstall the library you removed and remove the next one.
  3. Wenn Sie die Bibliothek finden, die bewirkt, dass die repl unterbricht, installieren Sie die richtige Version dieser Bibliothek mithilfe einer der beiden folgenden Methoden.When you find the library that causes the REPL to break, install the correct version of that library using one of the two methods below.

Sie können auch das Treiber Protokoll ( std.err ) auf den Cluster (auf der Seite Cluster Konfiguration) überprüfen, um eine Stapel Überwachung und eine Fehlermeldung zu erhalten, anhand derer der Bibliotheks Konflikt identifiziert werden kann.You can also inspect the driver log (std.err) for the cluster (on the Cluster Configuration page) for a stack trace and error message that can help identify the library conflict.

Installieren der richtigen BibliothekInstall the correct library

Führen Sie einen der folgenden Schritte aus:Do one of the following.

Option 1: Installieren in einem Notebook mithilfe von PIP3Option 1: Install in a notebook using pip3

%sh sudo apt-get -y install python3-pip
  pip3 install <library-name>

Option 2: Installieren mithilfe eines Init-Skripts im Cluster BereichOption 2: Install using a cluster-scoped init script

Führen Sie die folgenden Schritte aus, um ein mit einem Cluster definiertes init-Skript zu erstellen, mit dem die richtige Version der Bibliothek installiert wird.Follow the steps below to create a cluster-scoped init script that installs the correct version of the library. Ersetzen <library-name> Sie in den Beispielen durch den Dateinamen der zu installierenden Bibliothek.Replace <library-name> in the examples with the filename of the library to install.

  1. Wenn das Init-Skript nicht bereits vorhanden ist, erstellen Sie ein Basisverzeichnis, in dem es gespeichert wird:If the init script does not already exist, create a base directory to store it:

    dbutils.fs.mkdirs("dbfs:/databricks/<directory>/")
    
  2. Erstellen Sie das folgende Skript:Create the following script:

    dbutils.fs.put("/databricks/init/cluster-name/<library-name>.sh","""
     #!/bin/bash
     sudo apt-get -y install python3-pip
     sudo pip3 install <library-name>
     """, True)
    
  3. Vergewissern Sie sich, dass das Skript vorhanden ist:Confirm that the script exists:

    display(dbutils.fs.ls("dbfs:/databricks/<directory>/<library-name>.sh"))
    
  4. Wechseln Sie zur Seite Cluster Konfiguration , und klicken Sie auf die UMSCHALT Fläche Erweiterte Optionen .Go to the cluster configuration page and click the Advanced Options toggle.

  5. Klicken Sie am unteren Rand der Seite auf die Registerkarte Init Scripts :At the bottom of the page, click the Init Scripts tab:

    no-alternative-textno-alternative-text

  6. Wählen Sie in der Dropdown-Dropdown-Dropdown-Dropdown-Dropdown-Datei dBFSaus, Geben Sie denDateipfad zum SkriptIn the Destination drop-down, select DBFS, provide the file path to the script, and click Add.

  7. Starten Sie den Cluster neu.Restart the cluster.