1. 程式人生 > >HDFS block丟失過多進入安全模式(safe mode)的解決方法

HDFS block丟失過多進入安全模式(safe mode)的解決方法

HDFS block丟失過多進入安全模式(Safe mode)的解決方法

背景及現象描述(Background and Symptom)

 因磁碟空間不足,記憶體不足,系統掉電等其他原因導致dataNode datablock丟失,出現如下類似日誌:

The number of live datanodes 3 has reached the minimum number 0.

Safe mode will be turned off automatically once the thresholds have been reached.

Caused by: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled.

 Name node is in safe mode.

The reported blocks 632758 needs additional 5114 blocks to reach the threshold 0.9990

of total blocks 638510.

The number of live datanodes 3 has reached the minimum number 0.

Safe mode will be turned off automatically once the thresholds have been reached.

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode

(FSNamesystem.java:1209)

    ... 12 more

原因分析(Cause Analysis)*

由於系統斷電,記憶體不足等原因導致dataNode丟失超過設定的丟失百分比,系統自動進入安全模式

解決辦法(Solution)*

安裝HDFS客戶端,並執行如下命令:

                                步驟 1     執行命令退出安全模式:hadoop dfsadmin -safemode leave

                                步驟 2     執行健康檢查,刪除損壞掉的block。  hdfs fsck  /  -delete

注意: 這種方式會出現資料丟失,損壞的block會被刪掉

叢集機器意外斷電重啟,導致hbase 無法正常啟動,丟擲reflect invocation異常,可能是正在執行的插入或合併等操作進行到一半時中斷,導致部分資料檔案不完整格式不正確或在hdfs上block塊不完整。

在網上查了一下相關資料,懷疑有可能是關閉前一些未提交的修改所存放的log檔案資料寫入一半檔案不完整,故把hbase.hlog.split.skip.errors改成true進行嘗試。

關於這個引數作用的解釋:

當伺服器奔潰,重啟的時候,會有個回放的過程,把/hbase/WAL/下面記錄的log都回放一遍,合併到每個region中,回放過程中如果有error發生,這個引數又是false,那麼exception就會向外層輸出,回放失敗。

但是很遺憾,將此引數修改後hbase叢集仍然無法正常啟動。

然後就琢磨其他原因,先觀察hbase啟動時的60010監控頁面,

發現部分region FAILED_OPEN錯誤,its007-meta表一共200個region,只啟動成功199個。

似乎想到了什麼,對了,很可能是這個region的資料檔案格式不正確,那就先檢查一下其在hdfs上的檔案是否正常。

果不其然,觀察hadoop的50070頁面,會提示hadoop檔案系統的具體路徑上有兩個資料塊出錯。

(關於hbase在hdfs上的目錄相關文章連結:HBase在HDFS上的目錄樹

解決方法:

1.      執行hadoop fsck / -files檢查hdfs檔案

2.      發現/hbase/oldWALs目錄下有一個檔案損壞,

執行hadoop fsck / -delete清除損壞的檔案

3.      執行hbase hbck -details檢視hbase概況,發現Table its007-meta有一個region載入失敗

4.      執行hbase hbck -fixMeta嘗試修復系統元資料表

5.      執行hbase hbck -fix嘗試修復region資料不一致問題。

6.      再次執行hbase hbck -details發現問題仍然未修復,那個region仍然載入失敗。

故直接將該region下出錯的檔案移走,暫時移至hdfs根目錄

hadoop fs -move /hbase/data/default/its007-meta/fe6463cba743a87e99f9d8577276bada/meta/9a853fdbe13046fca194051cb9f69f9b /

fe6463cba743a87e99f9d8577276bada是region的名字

9a853fdbe13046fca194051cb9f69f9b是region下出錯的HFile,有800k大小(注:一個region下可以有多HFile)

7.      執行hbase hbck -fix重新載入之前失敗的region,至此完成修復,丟棄了出錯的HFile


總結:

hbase在hdfs上一共兩個檔案損壞。(關於hdfs檔案寫入相關文章:hdfs檔案寫入相關概念

一個是oldWALs下的,這個是存放一些沒用的HLog檔案的,這裡有檔案損壞,說明從WALs中轉移沒用的HLog寫到oldWALs下時,寫了一半斷電導致hdfs上檔案資料塊出錯;

另一個是region下一個HFile檔案損壞,這個檔案800k比較小,應該是從Memstore flush到HFile時,寫了一半沒寫完導致其在hdfs上的檔案資料塊出錯。


相關推薦

HDFS block丟失過多進入安全模式safe mode解決方法

HDFS block丟失過多進入安全模式(Safe mode)的解決方法 背景及現象描述(Background and Symptom)  因磁碟空間不足,記憶體不足,系統掉電等其他原因導致dataNode datablock丟失,出現如下類似日誌: The n

如何讓藍芽模組進入AT模式避坑

首先我們要確保電腦能夠配對藍芽模組。之前一直覺得win10很坑爹的一點就是:明明配對成功卻連線不上藍芽模組!不能自動連線藍芽....當然,如果要進入AT模式,是不能在連線藍芽模組下進行的。也就是說我們必須要先配對成功,然後在電腦中開啟“設定—藍芽和其他裝置—更多藍芽選項”那裡

筆記本外接顯示器,顯示器頻繁進入省電模式save mode

1,首先看看設定的睡眠時間,比如你如果設定為1分鐘,那肯定容易睡眠。(我設定的不睡眠,但還是頻繁進入省電模式) 2,轉接線沒插緊導致的。我的就是這個問題,轉接線那裡有點鬆,導致顯示器頻繁識別不到訊號,識別不到訊號就會進入省電模式。我重新把轉接線插緊,就解決這個

設計模式十八---模板方法模式

strac string package style prim res 不同的 好的 clas 1、簡介   模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。   不同的子類可以以不同

設計模式十七——模板方法模式

ring next pri cut 限制 pack [] eat 模式 1.描述 定義一個操作中算法的骨架,而將一些步驟延伸到子類當中。模板方法使子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 2.模式的使用 ·抽象模板(Abstract Template):

BigDecimal 舍入模式Rounding mode介紹

BigDecimal 舍入模式(Rounding mode)介紹 什麼樣的經歷,才能領悟成為架構師? >>>    1 RoundingMode介紹 package java.math; publ

Linux kernel boot process——從真實模式real mode到保護模式protected mode,再到分頁paging

        本文簡要介紹X86-32架構下的Linux kernel被boot loader(如grub)載入到記憶體後,如何從最初的真實模式,切換到保護模式,並開啟分頁機制。本文不涉及boot loader如何將核心載入到記憶體,因為這是boot loader的事,跟

Linux kernel boot process——從真實模式real mode到保護模式protected mode,再到分頁paging .

       本文簡要介紹X86-32架構下的Linux kernel被boot loader(如grub)載入到記憶體後,如何從最初的真實模式,切換到保護模式,並開啟分頁機制。本文不涉及boot loader如何將核心載入到記憶體,因為這是boot loader的事,跟核

有關ie瀏覽器怪異模式Quirks Mode對 HTML 頁面的影響的解決辦法

一: 把 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 改為 <!DOCT

怪異模式Quirks Mode對 HTML 頁面的影響

轉載自:http://www.ibm.com/developerworks/cn/web/1310_shatao_quirks/#ibm-pcon 本文主要描述 Quirks Mode 和 Standards Mode 這兩種文件模式渲染頁面時的差異由來,並且給出一些詳細

STM32F103RC微控制器ADC中的間斷模式Discontinous mode的使用

對於規則通道組,間斷模式下每轉換一個通道,EOC就會置位一次。因此不必像SCAN模式那樣必須採用DMA來搬運資料。 當DISCEN=1時開啟間斷模式,DISCNUM指定每次轉換的通道個數,範圍為1~8。 在下面的程式中,DISCNUM=011,每次轉換4個通道。L=1001

用過濾器和裝飾者設計模式靜態代理解決getParameter亂碼問題

post的亂碼問題比較好解決,這裡主要是對get請求的亂碼做處理 解決思路:增強request物件的getParameter方法,使之 getParameter  直接獲取到的就是解決亂碼後的資料 有四種方式,   1、繼承 :(下下策)      ①明確知道全類名 

【設計模式】使用unity實現代理模式Proxy mode

閱讀《大話設計模式》後,自己根據unity的特性寫的一個簡單demo,如有不妥之處,歡迎評論糾正.... 先貼上書中的程式碼: using System; using System.Coll

Android開發——Activity的四種載入模式launch mode

  上一篇部落格我們說了Activity的生命週期,這次我們要說的是Activity的四種載入模式。我們可以在manifest.xml中每個activity的launch mode屬性上設定。   Activity的載入模式?什麼意思?Activity的載入模式,就負責管理

Android 觸控模式Touch Mode

什麼是焦點? 在非觸屏手機時代或電腦上,我們通常需要用鍵盤、 滑鼠、軌跡球(trackball)與介面進行互動,當互動的時候必須使目標控制元件獲得焦點(比如高亮起來),這樣使用者才會注意到是什麼控制元件接受輸入。而如果是在觸屏時代,使用者可以直接用手指點選控制

怪異模式Quirks Mode對 HTML 頁面的影響w

在看權威指南,偶然間看到這個的一點介紹,感覺不錯。特此分享 Quirks Mode 概述 定義 什麼是 Quirks Mode? 簡單來說,Quirks Mode 就是瀏覽器為了相容很早之前針對舊版本瀏覽器設計、並未嚴格遵循 W3C 標準的網頁而產生的一種頁面

強悍的 vim —— 可視模式visual mode

指定 大神 con ont vim clas 修改 .net targe 進入可視模式的最重要也最直接的目的即是選中區域(ctrl + v:指定列,shift + v:指定行)。 1. 進入可視模式的方法 (1)處理列,將光標移動到想要修改的列(的開始或終止區域

[UWP]用畫中畫模式CompactOverlay Mode讓用總在最前端顯示

1. 什麼是,以及怎麼用畫中畫 Windows 10 Creators Update以後UWP提供了一個新的檢視模式CompactOverlay,中文翻譯成 緊湊的覆蓋層?反正大部分時間我們都會稱它為畫中畫模式。 上圖中右上角即為進入畫中畫模式的微軟“電影和電視”應用。 可以呼叫ApplicationVi

zlib編譯不過Error A2070解決方法

endif api 位置 round instr a20 letter courier new 原文轉自 http://dearymz.blog.163.com/blog/static/2056574200871010027435/ 1、zlib是個很牛的東東,從htt

SQLServer2008R2使用者登入失敗錯誤18456解決方法

  SQL Server 2008 R2使用者'sa'登入失敗(錯誤18456),如下圖:     解決辦法:   1、首先用身份登入,有如下介面:   2、右鍵例項-- 屬性,選擇【安全性】,選擇身份驗證方式:   3、右鍵例項-- 【重新啟動】