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:
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.
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_*
.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:
- Fügen Sie „hdiuser“ der Hadoop-Gruppe hinzu.
- Erteilen Sie nach der Clustererstellung 777-Berechtigungen für „/var/log/spark“.
- Aktualisieren Sie den Spark-Protokollspeicherort mit Ambari auf ein Verzeichnis mit 777-Berechtigungen.
- 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).
Probleme im Zusammenhang mit Jupyter Notebooks
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:
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.
Starten Sie das Notebook, das Sie starten wollten, neu. Nun sollten genügend Ressourcen für die Sitzungserstellung verfügbar sein.
Weitere Informationen
Szenarien
- Apache Spark mit BI: Durchführen interaktiver Datenanalysen mithilfe von Spark in HDInsight mit BI-Tools
- Apache Spark mit Machine Learning: Analysieren von Gebäudetemperaturen mithilfe von Spark in HDInsight und HVAC-Daten
- Apache Spark mit Machine Learning: Vorhersage von Lebensmittelkontrollergebnissen mithilfe von Spark in HDInsight
- Websiteprotokollanalyse mithilfe von Apache Spark in HDInsight
Erstellen und Ausführen von Anwendungen
- Erstellen einer eigenständigen Anwendung mit Scala
- Ausführen von Remoteaufträgen in einem Apache Spark-Cluster mithilfe von Apache Livy
Tools und Erweiterungen
- Verwenden des HDInsight-Tools-Plug-Ins für IntelliJ IDEA zum Erstellen und Übermitteln von Spark Scala-Anwendungen
- Verwenden des HDInsight-Tools-Plug-Ins für IntelliJ IDEA zum Remotedebuggen von Apache Spark-Anwendungen
- Verwenden von Apache Zeppelin Notebooks mit einem Apache Spark-Cluster unter HDInsight
- Kernel für Jupyter Notebook in Apache Spark-Clustern für HDInsight
- Verwenden von externen Paketen mit Jupyter Notebooks
- Installieren von Jupyter Notebook auf Ihrem Computer und Herstellen einer Verbindung zum Apache Spark-Cluster in Azure HDInsight (Vorschau)