Freigeben über


Bekannte Probleme bei Apache Spark-Clustern unter HDInsight

In diesem Dokument werden sämtliche bekannte Probleme für die öffentliche Vorschauversion von HDInsight Spark erfasst.

Verlust einer interaktiven Sitzung durch Apache Livy

Wenn Apache Livy neu gestartet wird (von Apache Ambari oder aufgrund des Neustarts eines virtuellen Computers mit Hauptknoten 0), solange eine interaktive Sitzung aktiv ist, geht eine interaktive Auftragssitzung verloren. Daher können neue Aufträge im Status „Akzeptiert“ hängen bleiben.

Lösung:

Gehen Sie wie folgt vor, um das Problem zu umgehen:

  1. Greifen Sie per SSH auf den Stammknoten zu. Informationen hierzu finden Sie unter Verwenden von SSH mit Linux-basiertem Hadoop in HDInsight unter Linux, Unix oder OS X.

  2. Führen Sie den folgenden Befehl aus, um die Anwendungs-IDs der interaktiven Aufträge zu ermitteln, die über Livy gestartet wurden.

    yarn application –list
    

    Die Standardauftragsnamen entsprechen Livy, wenn die Aufträge mit einer interaktiven Livy-Sitzung ohne ausdrücklich angegebene Namen gestartet wurden. Für die Livy-Sitzung, die durch Jupyter Notebook gestartet wurde, beginnt der Name des Auftrags mit remotesparkmagics_*.

  3. Führen Sie den folgenden Befehl aus, um die Beendigung dieser Aufträge zu erzwingen.

    yarn application –kill <Application ID>
    

Neue Aufträge werden gestartet.

Spark-Verlaufsserver startet nicht

Der Spark-Verlaufsserver wird nach der Clustererstellung nicht automatisch gestartet.

Lösung:

Starten Sie den Verlaufsserver in Ambari manuell.

Berechtigungsproblem im Spark-Protokollverzeichnis

„hdiuser“ erhält beim Senden eines Auftrags mit „spark-submit“ den folgenden Fehler:

java.io.FileNotFoundException: /var/log/spark/sparkdriver_hdiuser.log (Permission denied)

Und es wird kein Treiberprotokoll geschrieben.

Lösung:

  1. Fügen Sie „hdiuser“ der Hadoop-Gruppe hinzu.
  2. Erteilen Sie nach der Clustererstellung 777-Berechtigungen für „/var/log/spark“.
  3. Aktualisieren Sie den Spark-Protokollspeicherort mit Ambari auf ein Verzeichnis mit 777-Berechtigungen.
  4. Führen Sie „spark-submit“ als sudo aus.

Keine Unterstützung für den Spark-Phoenix-Connector

HDInsight Spark-Cluster unterstützen den Spark-Phoenix-Connector nicht.

Lösung:

Sie müssen stattdessen den Spark-HBase-Connector verwenden. Anweisungen finden Sie unter How to use Spark-HBase connector (Verwenden des Spark-HBase-Connectors).

Im Folgenden werden einige Probleme im Zusammenhang mit Jupyter Notebooks genannt.

Notebooks mit Nicht-ASCII-Zeichen in Dateinamen

Verwenden Sie in Jupyter Notebook-Dateinamen keine ASCII-fremden Zeichen. Wenn Sie versuchen, eine Datei über die Jupyter-Benutzeroberfläche hochzuladen, deren Dateiname ASCII-fremde Zeichen enthält, schlägt der Upload ohne Fehlermeldung fehl. Jupyter erlaubt den Upload der Datei nicht, gibt aber auch keinen sichtbaren Fehler aus.

Fehler beim Laden von größeren Notebooks

Möglicherweise wird beim Laden von größeren Notebooks der Fehler Error loading notebook angezeigt.

Lösung:

Wenn Sie diesen Fehler erhalten, bedeutet dies nicht, dass Ihre Daten beschädigt oder verloren sind. Ihre Notebooks befinden sich weiterhin auf der Festplatte in /var/lib/jupyter, und Sie können über SSH eine Verbindung mit dem Cluster herstellen, um darauf zuzugreifen. Informationen hierzu finden Sie unter Verwenden von SSH mit Linux-basiertem Hadoop in HDInsight unter Linux, Unix oder OS X.

Sobald Sie mithilfe von SSH eine Verbindung mit dem Cluster hergestellt haben, können Sie Ihre Notebooks zur Sicherung aus Ihrem Cluster auf den lokalen Computer kopieren (mit SCP oder WinSCP), um den Verlust wichtiger Daten im Notebook zu vermeiden. Anschließend können Sie über einen SSH-Tunnel an Port 8001 eine Verbindung mit Ihrem Hauptknoten herstellen, um ohne Umweg über das Gateway auf Jupyter zuzugreifen. Dort können Sie die Ausgabe Ihres Notebooks löschen und es erneut speichern, um die Größe des Notebooks zu minimieren.

Um zu verhindern, dass dieser Fehler in Zukunft auftritt, müssen Sie einige bewährten Methoden befolgen:

  • Es ist wichtig, die Größe von Notebooks niedrig zu halten. Alle Ausgaben Ihrer Spark-Aufträge, die an Jupyter zurückgesendet werden, werden beständig im Notebook gespeichert. Für Jupyter wird allgemein empfohlen, das Ausführen von .collect() auf großen RDDs (Resilient Distributed Datasets) oder Datenrahmen zu vermeiden. Wenn Sie einen Blick auf den Inhalt eines RDD werfen möchten, führen Sie stattdessen .take() oder .sample() aus, damit die Ausgabe nicht zu groß wird.
  • Löschen Sie außerdem beim Speichern eines Notebooks alle Ausgabezellen, um die Größe zu verringern.

Erster Notebook-Start dauert länger als erwartet

Die Verarbeitung der ersten Codeanweisung in Jupyter Notebook mit Spark Magic kann über eine Minute dauern.

Erklärung:

Dies geschieht, wenn die erste Codezelle ausgeführt wird. Im Hintergrund werden dadurch die Sitzungskonfiguration initiiert und Spark-, SQL- sowie Hive-Kontexte festgelegt. Nachdem diese Kontexte festgelegt wurden, wird die erste Anweisung ausgeführt, die den Eindruck entstehen lässt, dass sie lange Zeit in Anspruch nimmt.

Jupyter Notebook-Timeout bei der Sitzungserstellung

Wenn dem Spark-Cluster nicht genügend Ressourcen zur Verfügung stehen, tritt bei der Sitzungserstellung für die Spark- und PySpark-Kernel im Jupyter Notebook ein Timeout auf.

Lösung:

  1. Führen Sie folgende Schritte aus, um Ressourcen in Ihrem Spark-Cluster freizugeben:

    • Beenden Sie andere Spark-Notebooks über das entsprechende Menü, oder klicken Sie im Notebook-Explorer auf „Herunterfahren“.
    • Beenden Sie andere Spark-Anwendungen über YARN.
  2. Starten Sie das Notebook, das Sie starten wollten, neu. Nun sollten genügend Ressourcen für die Sitzungserstellung verfügbar sein.

Weitere Informationen

Szenarien

Erstellen und Ausführen von Anwendungen

Tools und Erweiterungen

Ressourcen verwalten