hadoop重启Namenode时,appTokens报FileNotFoundException
现象 报错如下 Application application_1405852606905_0014 failed 3 times due to AM Container for appattempt_1405852606905_0014_000003 exited with exitCode: -1000 due to: RemoteTrace: java.io.FileNotFoundException: File does not exist: hdfs:
现象
报错如下
Application application_1405852606905_0014 failed 3 times due to AM Container for appattempt_1405852606905_0014_000003 exited with exitCode: -1000 due to: RemoteTrace: java.io.FileNotFoundException: File does not exist: hdfs://mycluster:8020/user/kpi/.staging/job_1405852606905_0014/appTokens at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:809)
同时注意到是因为每次重启nodemanager才发生。
首先用关键词“apptokens FileNotFoundException”在google和issue搜索没找到相关的问题。
猜测原因
可能找不到的原因:1.客户端没上传成功 2.上传成功了,但后面不知道给谁删了
重现
既然在网上找不到,尝试在测试环境重现这个问题,运行一个sleep job
cd /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce; hadoop jar hadoop-mapreduce-client-*-tests.jar sleep -Dmapred.job.queue.name=sleep -m5 -r5 -mt 60000 -rt 30000 -recordt 1000
重启nodemanage后会发现报错。
分析日志
但发现找不到AM的日志,哪里去了?我们的hadoop环境都配置了“日志聚集”(yarn.log-aggregation-enable),失败的任务就把日志删了(可能是bug),尝试关掉后,从crontainer日志找到AM日志。
同时还可以看ResourceManager,NameNode,HDFS审计日志(hdfs-audit.log)
从AM日志可以看到第一次尝试好像是成功的,从HDFS审计日志发现了删除staging的目录
cmd=delete src="http://fatkun.com/user/kpi/.staging/job_1405852606905_0013
到此可以确认目录是被删除了,导致后面的job失败,但谁删了这个目录?
继续搜索
代码很多,需要定位一下那里操作.staging这个目录,确定谁删了这个目录。在issue搜索“staging delete”,看有没有相关的操作代码。 同时阅读代码发现了org.apache.hadoop.mapreduce.v2.app.MRAppMaster.cleanupStagingDir()方法,对照日志,可以确定是这个方法删除了staging目录。
public synchronized void stop() { ... //这里判断了是不是AM的最后一次尝试,如果是才清理 if(isLastAMRetry) { cleanupStagingDir(); } ... }
这个逻辑还算正常, 继续找isLastAMRetry是怎么来的
public void shutDownJob() { ... //We are finishing cleanly so this is the last retry isLastAMRetry = true; // Stop all services // This will also send the final report to the ResourceManager LOG.info("Calling stop for all the services"); MRAppMaster.this.stop(); ... }
发现调用了shutDownJob,会把isLastAMRetry设置为true,调用shutDownJob是因为接收到JobFinishEvent事件。
我们多了一些信息,偷懒在issue继续搜索一下,看有没有人解决了。
这次找到issue了,https://issues.apache.org/jira/browse/MAPREDUCE-5086
阅读patch,发现之前忽略了RM报的一个错误。
org.apache.hadoop.yarn.exceptions.impl.pb.YarnRemoteExceptionPBImpl: Application doesn't exist in cache appattempt_1405852606905_0014_000001
结果
重启nodemanager导致RM的appattempt cache数组删除,JobImpl返回了InternalError,AM认为出错了就没必要重试了,直接置isLastRetry=true。
修改方式是加了一个状态,表明这是“RM重启”了(注意这里不是nodemanager重启,有一些关联),还可以继续重试。具体修改阅读patch https://issues.apache.org/jira/browse/MAPREDUCE-5086
最后,由于patch修改的版本和我们用的版本不一致,还得需要用我们使用的版本依照它的思路改一遍。
原文地址:hadoop重启Namenode时,appTokens报FileNotFoundException, 感谢原作者分享。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Bei der Verwendung des Mobiltelefons Samsung S24 Ultra kann es gelegentlich zu Problemen kommen oder Sie müssen das Gerät zurücksetzen. In diesem Fall ist ein Neustart des Telefons eine gängige Lösung. Es kann jedoch verwirrend sein, wenn Sie nicht viel über die Schritte wissen. Aber keine Sorge, ich zeige Ihnen, wie Sie Ihr Samsung S24 Ultra-Telefon richtig neu starten. So starten Sie das Samsung s24 Ultra neu: 1. Rufen Sie das Steuerungsmenü auf, um es herunterzufahren: Wischen Sie vom oberen Rand des Samsung-Bildschirms nach unten, um das Shortcut-Tools-Menü aufzurufen, und klicken Sie zum Aufrufen auf das Energiesymbol (eine Kombination aus Bogen und vertikaler Linie). Öffnen Sie die Auswahloberfläche zum Herunterfahren und Neustarten und klicken Sie auf „Einfach neu starten“. 2. Verwenden Sie die Tastenkombination zum Herunterfahren: Drücken Sie lange die Lautstärketaste und die Ein-/Aus-Taste, um das Auswahlmenü zum Herunterfahren und Neustarten aufzurufen. Klicken Sie, um „Herunterfahren“ auszuwählen. Durch Drücken und Halten

Funktioniert die F5-Taste auf Ihrem Windows 11/10-PC nicht richtig? Die F5-Taste wird normalerweise verwendet, um den Desktop oder Explorer zu aktualisieren oder eine Webseite neu zu laden. Einige unserer Leser haben jedoch berichtet, dass die F5-Taste ihre Computer aktualisiert und nicht richtig funktioniert. Wie aktiviere ich die F5-Aktualisierung in Windows 11? Um Ihren Windows-PC zu aktualisieren, drücken Sie einfach die Taste F5. Auf einigen Laptops oder Desktops müssen Sie möglicherweise die Tastenkombination Fn+F5 drücken, um den Aktualisierungsvorgang abzuschließen. Warum funktioniert die F5-Aktualisierung nicht? Wenn das Drücken der F5-Taste Ihren Computer nicht aktualisiert oder Probleme unter Windows 11/10 auftreten, kann dies daran liegen, dass die Funktionstasten gesperrt sind. Weitere mögliche Ursachen sind die Tastatur oder die F5-Taste

Eine Neuinstallation des Systems ist vielleicht keine narrensichere Lösung, aber nach der Neuinstallation habe ich festgestellt, dass beim Einschalten des Computers weißer Text auf schwarzem Hintergrund angezeigt wird und dann eine Eingabeaufforderung angezeigt wird: rebootandselectproperbootdevice, was ist los? Eine solche Eingabeaufforderung wird normalerweise durch einen Startfehler verursacht. Um allen zu helfen, hat der Herausgeber eine Lösung für Sie zusammengestellt. Die Verwendung von Computern wird immer beliebter und Computerausfälle treten immer häufiger auf. Nein, in letzter Zeit stellten einige Benutzer beim Einschalten des Computers einen schwarzen Bildschirm fest und forderten einen Neustart und die Auswahl des richtigen Startgeräts auf, und das Computersystem konnte nicht gestartet werden normalerweise. Was ist los? Wie man es löst? Der Benutzer ist verwirrt. Als nächstes wird der Herausgeber folgen

So starten Sie Nginx neu: 1. Starten Sie Nginx unter Linux neu und verwalten Sie den Nginx-Dienst. Es startet Nginx neu und liest alle neuen Konfigurationsänderungen. 2. Starten Sie Nginx neu und alle Konfigurationsänderungen werden übernommen. , ohne den Server vollständig stoppen und starten zu müssen; 3. Starten Sie Nginx auf Ihrem Mac neu, wodurch Nginx neu gestartet wird und alle neuen Konfigurationsänderungen usw. übernommen werden.

Das Neustarten Ihres Computers ist eine häufige Aufgabe, die wir häufig durchführen, um Probleme zu beheben, Updates zu installieren oder Systemänderungen vorzunehmen. Obwohl es viele Möglichkeiten gibt, Ihren Computer neu zu starten, bietet die Verwendung eines Python-Skripts Automatisierung und Komfort. In diesem Artikel erfahren Sie, wie Sie ein Python-Skript erstellen, das Ihren Computer durch eine einfache Ausführung neu starten kann. Wir besprechen zunächst, wie wichtig ein Neustart Ihres Computers ist und welche Vorteile er mit sich bringt. Anschließend werden wir uns mit den Implementierungsdetails des Python-Skripts befassen und die erforderlichen Module und Funktionen erläutern. In diesem Artikel stellen wir ausführliche Erklärungen und Codeausschnitte bereit, um ein klares Verständnis zu gewährleisten. Die Bedeutung eines Neustarts Ihres Computers Der Neustart Ihres Computers ist ein grundlegender Schritt zur Fehlerbehebung

Java-Fehler: Hadoop-Fehler, wie man damit umgeht und sie vermeidet Wenn Sie Hadoop zur Verarbeitung großer Datenmengen verwenden, stoßen Sie häufig auf einige Java-Ausnahmefehler, die sich auf die Ausführung von Aufgaben auswirken und zum Scheitern der Datenverarbeitung führen können. In diesem Artikel werden einige häufige Hadoop-Fehler vorgestellt und Möglichkeiten aufgezeigt, mit ihnen umzugehen und sie zu vermeiden. Java.lang.OutOfMemoryErrorOutOfMemoryError ist ein Fehler, der durch unzureichenden Speicher der Java Virtual Machine verursacht wird. Wenn Hadoop ist

Was ist der richtige Weg, einen Dienst unter Linux neu zu starten? Wenn wir ein Linux-System verwenden, stoßen wir häufig auf Situationen, in denen wir einen bestimmten Dienst neu starten müssen, aber manchmal können beim Neustart des Dienstes Probleme auftreten, z. B. wenn der Dienst nicht tatsächlich gestoppt oder gestartet wird. Daher ist es sehr wichtig, die richtige Methode zum Neustarten von Diensten zu beherrschen. Unter Linux können Sie normalerweise den Befehl systemctl verwenden, um Systemdienste zu verwalten. Der Befehl systemctl ist Teil des systemd-Systemmanagers

Wenn wir versehentlich einige falsche Vorgänge ausführen oder bestimmte Fehler im System selbst auftreten, können wir nach Eingabe des Kennworts möglicherweise nicht auf den Desktop zugreifen und den Neustart fortsetzen. Zu diesem Zeitpunkt können wir es im abgesicherten Modus reparieren. Schauen wir uns die folgenden spezifischen Methoden an. Win10 kann nach Eingabe eines Passworts nicht auf den Desktop zugreifen und startet immer wieder neu. Lösung 1. Halten Sie zunächst die Umschalttaste auf der Tastatur gedrückt und klicken Sie auf den Netzschalter in der unteren rechten Ecke. Starten Sie dann den Computer neu, bis die Reparaturoberfläche angezeigt wird Lassen Sie dann die Umschalttaste los. 2. Wenn sich in der unteren rechten Ecke kein Netzschalter befindet, können Sie auch den Netzschalter des Computerhosts verwenden, müssen ihn jedoch mindestens dreimal hintereinander neu starten. 3. Nachdem die Reparaturoberfläche erscheint, klicken wir auf „Erweiterte Reparaturoptionen anzeigen“. 4. Wählen Sie „Fehlerbehebung“. 5
