那里做直播網(wǎng)站搜索引擎優(yōu)化指的是
背景:flume數(shù)據(jù)落盤到hdfs上時(shí),正在寫入的文件一般是以.log.tmp結(jié)尾的文件,當(dāng)flume將文件關(guān)閉以后將變?yōu)?#xff1a;.log 結(jié)尾的文件。由于我們使用阿里云的服務(wù)器,經(jīng)常會(huì)有個(gè)別節(jié)點(diǎn)掛掉(進(jìn)程在,無法通信,需要在阿里云上強(qiáng)制重啟機(jī)器才行),導(dǎo)致一些文件寫入中斷,非正常關(guān)閉,造成快信息異常。導(dǎo)致spark報(bào)錯(cuò),流程異常。
解放方法:
-- 1.檢查hdfs目錄下打開的文件hdfs fsck /user/hive/external/ods/ods_xxxxx/dt=2024-07-07 -openforwrite-- 2.過濾出非正常關(guān)閉的文件 (.log.tmp:正在打開寫入數(shù)據(jù)的文件 .log 為關(guān)閉的文件,這里出現(xiàn)的.log文件即為異常文件)將文件復(fù)制出來 vcscode通過將OPENFORWRITE替換為 \n 換行將 .log.tmp的正常文件替換為空,過濾出異常文件 【正則: .*\.tmp.* 】-- 3.修復(fù) (將異常的文件進(jìn)行修復(fù))hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log -retries 3 hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290187773.log -retries 3 hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290379675.log -retries 3
命令解釋:
hdfs fsck /user/hive/external/ods/ods_xxxxx/dt=2024-07-07 -openforwrite使用 hdfs fsck 命令加上 -openforwrite 選項(xiàng)時(shí),它會(huì)檢查指定的目錄是否可以安全地打開以供寫入,并報(bào)告任何可能影響寫入操作的問題。這包括檢查是否有文件正被打開進(jìn)行寫入。-openforwrite 選項(xiàng)主要關(guān)注于以下幾個(gè)方面:檢查目錄下是否有文件正處于打開狀態(tài),即這些文件是否被某個(gè)客戶端持有寫入租約(lease)。
檢查是否有任何文件處于不完整的狀態(tài)(即尚未完成寫入)。
如果目錄中有文件正在被打開寫入,fsck 命令的輸出通常會(huì)顯示這些文件的信息。這些信息可以幫助您了解哪些文件可能會(huì)阻止您對目錄進(jìn)行進(jìn)一步的寫入操作。
hdfs debug recoverLease -path /user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log -retries 3?命令用于嘗試恢復(fù)在 HDFS 中被中斷的文件寫入操作。當(dāng)一個(gè)文件的寫入因?yàn)槟撤N原因(如客戶端意外斷開連接)而中斷時(shí),這個(gè)文件會(huì)被標(biāo)記為“未完成”狀態(tài),并且其租約(lease)將保持有效直到過期或者手動(dòng)釋放。hdfs debug recoverLease: 這個(gè)命令用于嘗試恢復(fù)一個(gè)文件的租約,使其可以從“未完成”的狀態(tài)中恢復(fù)過來。
-path: 指定要恢復(fù)租約的文件路徑。
/user/hive/external/ods/ods_xxxxx/dt=2024-07-07/flume_app.1720290198943.log: 這是具體的文件路徑。
-retries 3: 指定在嘗試恢復(fù)租約時(shí)的最大重試次數(shù)。
執(zhí)行這條命令后,HDFS 會(huì)嘗試恢復(fù)指定文件的租約。如果文件的租約可以成功恢復(fù),那么文件就可以繼續(xù)寫入或完成寫入過程。如果命令執(zhí)行失敗,它將根據(jù)指定的重試次數(shù)進(jìn)行重試。