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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使用三星S24Ultra手機時,偶爾會遇到一些問題或需要重置裝置的情況。在這種情況下,重啟手機是常見的解決方案。然而,如果你對操作步驟不太了解,你可能會感到困惑。不過,別擔心,我將向您介紹如何正確地重新啟動三星S24Ultra手機。三星s24Ultra怎麼重啟手機1、調出控制選單關機:從三星的螢幕上方下滑調出快捷工具選單,點擊電源圖示(圓弧和垂直線的組合形狀)即可調出關機及重啟的選擇介面,點擊重新啟動即可;2、利用組合鍵關機:長按音量-鍵加電源鍵也可調出關機重開選擇選單,點選選擇關機即可。透過按下並保

您的Windows11/10PC上的F5鍵是否無法正常運作? F5鍵通常用於刷新桌面或資源管理器或重新載入網頁。然而,我們的一些讀者報告說,F5鍵正在刷新他們的計算機,並且無法正常工作。如何在Windows11中啟用F5刷新?要刷新您的WindowsPC,只需按下F5鍵即可。在某些筆記型電腦或桌上型電腦上,您可能需要按下Fn+F5組合鍵才能完成刷新操作。為什麼F5刷新不起作用?如果按下F5鍵無法刷新您的電腦或在Windows11/10上遇到問題,可能是因為功能鍵被鎖定。其他潛在原因包括鍵盤或F5鍵

重裝系統也未必是個萬全之策,可是重裝後發現電腦開機會顯示黑底白字,然後給出提示:rebootandselectproperbootdevice,這是怎麼回事?出現這樣的提示一般是引導出錯所致。為了幫助到了大家,為此,小編就為大家帶來了解決的方法了。電腦使用是越來越普及了而遇到電腦的故障也越來越來多,這不,最近有用戶在電腦開機時遇到顯示黑屏,並提示RebootandSelectproperBootdevice,無法正常啟動電腦系統。這是怎麼回事呢?又該怎麼去解決呢?讓用戶一頭霧水,下面,小編就來跟

nginx重啟的方法:1、在Linux上重啟Nginx,使用systemd來管理Nginx服務,它將重啟Nginx並讀取任何新的配置更改;2、在Windows上重啟Nginx,將重新加載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
