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, 感谢原作者分享。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Samsung S24 Ultra 携帯電話を使用しているときに、問題が発生したり、デバイスをリセットする必要が生じることがあります。この場合、電話機を再起動するのが一般的な解決策です。ただし、手順をよく知らないと混乱する可能性があります。ただし、心配しないでください。Samsung S24 Ultra 携帯電話を適切に再起動する方法を説明します。 Samsung s24 Ultra を再起動する方法 1. コントロール メニューを表示してシャットダウンします。Samsung 画面の上部から下にスライドしてショートカット ツール メニューを表示し、電源アイコン (円弧と垂直線の組み合わせ) をクリックして表示します。シャットダウンと再起動の選択インターフェイスを表示し、[再起動] をクリックします。 2. キーの組み合わせを使用してシャットダウンします。音量キーと電源キーを長押しして、シャットダウンと再起動の選択メニューを表示し、クリックしてシャットダウンを選択します。長押しすると

Windows 11/10 PC では F5 キーが正しく機能しませんか? F5 キーは通常、デスクトップまたはエクスプローラーを更新したり、Web ページをリロードしたりするために使用されます。ただし、読者の中には、F5 キーがコンピュータを更新していて、正しく動作しないと報告している人もいます。 Windows 11 で F5 更新を有効にする方法は? Windows PC を更新するには、F5 キーを押すだけです。一部のラップトップまたはデスクトップでは、更新操作を完了するために Fn+F5 キーの組み合わせを押す必要がある場合があります。 F5 キーを押して更新しても機能しないのはなぜですか? F5 キーを押してもコンピューターを更新できない場合、または Windows 11/10 で問題が発生している場合は、ファンクション キーがロックされていることが原因である可能性があります。その他の考えられる原因には、キーボードまたは F5 キーが含まれます

システムの再インストールは確実な解決策ではないかもしれませんが、再インストール後、コンピュータの電源を入れると、黒の背景に白のテキストが表示され、次のプロンプトが表示されることがわかりました。「rebootandselectproperbootdevice、何が起こっていますか?」このようなプロンプトは通常、ブート エラーによって発生します。皆さんを助けるために、編集者が解決策を提案しました。コンピュータの使用がますます一般的になり、コンピュータの故障がますます一般的になってきています。いいえ、最近、一部のユーザーがコンピュータの電源を入れるときに黒い画面に遭遇し、再起動と適切なブート デバイスの選択を求められ、コンピュータ システムが起動できなくなりました。通常は。どうしたの?どうやって解決すればいいでしょうか?ユーザーは混乱しています。次に編集者がフォローします

nginx を再起動する方法: 1. Linux で Nginx を再起動し、systemd を使用して Nginx サービスを管理します。2. Windows で Nginx を再起動すると、構成の変更がすべて適用されます。サーバーを完全に停止して起動する必要はありません。 3. Mac で Nginx を再起動します。これにより、Nginx が再起動され、新しい設定の変更などが適用されます。

コンピューターの再起動は、問題のトラブルシューティング、更新プログラムのインストール、システム変更の適用などのために頻繁に実行される一般的なタスクです。コンピューターを再起動する方法はたくさんありますが、Python スクリプトを使用すると自動化され便利です。この記事では、簡単な実行でコンピュータを再起動できる Python スクリプトの作成方法を説明します。まず、コンピュータを再起動することの重要性と、それがもたらす利点について説明します。次に、Python スクリプトの実装の詳細を詳しく調べ、必要なモジュールと関連する機能について説明します。この記事では、明確な理解を確実にするために、詳細な説明とコード スニペットを提供します。コンピュータを再起動することの重要性 コンピュータを再起動することは、次のことを可能にする基本的なトラブルシューティング手順です。

Java エラー: Hadoop エラー、対処方法と回避方法 Hadoop を使用してビッグ データを処理する場合、タスクの実行に影響を与え、データ処理の失敗を引き起こす可能性のある Java 例外エラーが頻繁に発生します。この記事では、一般的な Hadoop エラーをいくつか紹介し、それらに対処および回避する方法を示します。 Java.lang.OutOfMemoryErrorOutOfMemoryError は、Java 仮想マシンのメモリ不足によって発生するエラーです。 Hadoop の場合

Linux でサービスを再起動する正しい方法は何ですか? Linux システムを使用していると、特定のサービスを再起動する必要がある状況がよく発生しますが、サービスの再起動時に実際にサービスが停止しない、または開始しないなどの問題が発生することがあります。したがって、サービスを再起動する正しい方法を習得することが非常に重要です。 Linux では、通常、systemctl コマンドを使用してシステム サービスを管理できます。 systemctl コマンドは systemd システム マネージャーの一部です

誤って間違った操作を行ったり、システム自体に特定のエラーが発生したりすると、パスワードを入力してもデスクトップに入ることができず、再起動が繰り返されることがあります。現時点ではセーフモードで修復することができますので、以下で具体的な方法を見ていきましょう。 Win10 でパスワードを入力してもデスクトップに入ることができず、再起動が繰り返されます。解決策 1. まず、キーボードの「Shift」を押したまま右下隅にある電源ボタンをクリックし、修復インターフェイスが表示されるまでコンピューターを再起動することを選択します。次に「shift」キーを放します。 2. 右下隅に電源ボタンがない場合は、コンピュータ ホストの電源ボタンを使用することもできますが、連続 3 回以上再起動する必要があります。 3. 修復インターフェイスが表示されたら、[詳細な修復オプションを表示] をクリックします。 4. 「トラブルシューティング」を選択します。 5
