Hadoop異常總結

雲數學院發表於2017-08-28

版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處:http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667

Hadoop異常總結

hadoop啟動不正常,hadoop datanode節點超時時間設定,HDFS冗餘資料塊的自動刪除,namenode安全模式問題,ntp時間服務同步等問題。

hadoop的日誌目錄(/opt/sxt/hadoop-2.6.5/logs)

hadoop啟動不正常

用瀏覽器訪問namenode的50070埠,不正常,需要診斷問題出在哪裡:

第一步:在伺服器的終端命令列使用jps檢視相關程式

(namenode1個節點   datanode3個節點   secondary namenode1個節點)

第二步:如果已經知道了啟動失敗的服務程式,進入到相關程式的日誌目錄下,檢視日誌,分析異常的原因

1) 配置檔案出錯,saxparser  exception; ——找到錯誤提示中所指出的配置檔案檢查修改即可

2) unknown host——主機名不認識,配置/etc/hosts檔案即可,或者是配置檔案中所用主機名跟實際不一致

             (注:在配置檔案中,建議使用主機名,而不要用ip地址)

3)directory 訪問異常—— 檢查namenode的工作目錄,看許可權是否正常

start-dfs.sh啟動後,發現有datanode啟動不正常

第一步:檢視datanode的日誌,看是否有異常,如果沒有異常,手動將datanode啟動起來sbin/hadoop-daemon.sh start datanode

第二步:很有可能是slaves檔案中就沒有列出需要啟動的datanode

第三步:排除上述兩種情況後,基本上,能在日誌中看到異常資訊:

    1、配置檔案

  2、ssh免密登陸沒有配置好

       3、datanode的身份標識跟namenode的叢集身份標識不一致

(刪掉datanode的工作目錄)

 

hadoop datanode節點超時時間設定

datanode程式死亡或者網路故障造成datanode無法與namenode通訊,namenode不會立即把該節點判定為死亡,要經過一段時間,這段時間暫稱作超時時長。HDFS預設的超時時長為10分鐘+30秒。如果定義超時時間為timeout,則超時時長的計算公式為:

timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。

而預設的heartbeat.recheck.interval 大小為5分鐘,dfs.heartbeat.interval預設為3秒。

需要注意的是hdfs-site.xml 配置檔案中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為。所以,舉個例子,如果heartbeat.recheck.interval設定為5000(毫秒),dfs.heartbeat.interval設定為3(秒,預設),則總的超時時間為40秒。

hdfs-site.xml中的引數設定格式:

<property>

        <name>heartbeat.recheck.interval</name>

        <value>2000</value>

</property>

<property>

        <name>dfs.heartbeat.interval</name>

        <value>1</value>

</property>

  

HDFS冗餘資料塊的自動刪除

在日常維護hadoop叢集的過程中發現這樣一種情況:

某個節點由於網路故障或者DataNode程式死亡,被NameNode判定為死亡,HDFS馬上自動開始資料塊的容錯拷貝;當該節點重新新增到叢集中時,由於該節點上的資料其實並沒有損壞,所以造成了HDFS上某些block的備份數超過了設定的備份數。通過觀察發現,這些多餘的資料塊經過很長的一段時間才會被完全刪除掉,那麼這個時間取決於什麼呢?

該時間的長短跟資料塊報告的間隔時間有關。Datanode會定期將當前該結點上所有的BLOCK資訊報告給Namenode,引數dfs.blockreport.intervalMsec就是控制這個報告間隔的引數。

hdfs-site.xml檔案中有一個引數:

<property>

<name>dfs.blockreport.intervalMsec</name>

<value>3600000</value>

<description>Determines block reporting interval in milliseconds.</description>

</property>

  

其中3600000為預設設定,3600000毫秒,即1個小時,也就是說,塊報告的時間間隔為1個小時,所以經過了很長時間這些多餘的塊才被刪除掉。通過實際測試發現,當把該引數調整的稍小一點的時候(60秒),多餘的資料塊確實很快就被刪除了。

 

 

namenode安全模式問題

當namenode發現叢集中的block丟失數量達到一個閥值時,namenode就進入安全模式狀態,不再接受客戶端的資料更新請求

在正常情況下,namenode也有可能進入安全模式:

叢集啟動時(namenode啟動時)必定會進入安全模式,然後過一段時間會自動退出安全模式(原因是datanode彙報的過程有一段持續時間)

也確實有異常情況下導致的安全模式

原因:block確實有缺失

措施:可以手動讓namenode退出安全模式,bin/hdfs dfsadmin -safemode leave

  或者:調整safemode門限值:  dfs.safemode.threshold.pct=0.999f

 

ntp時間服務同步問題

第一種方式:同步到網路時間伺服器

 

 # ntpdate time.windows.com

將硬體時間設定為當前系統時間。

#hwclock –w

加入crontab:    

30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w 每天的8:30將進行一次時間同步。

重啟crond服務:

service crond restart

 

 

第二種方式:同步到區域網內部的一臺時間同步伺服器

一、搭建時間同步伺服器

1、編譯安裝ntp server

rpm -qa | grep ntp

若沒有找到,則說明沒有安裝ntp包,從光碟上找到ntp包,使用

rpm -Uvh ntp***.rpm

進行安裝

2、修改ntp.conf配置檔案

vi /etc/ntp.conf

①、第一種配置:允許任何IP的客戶機都可以進行時間同步

將“restrict default nomodify notrap noquery”這行修改成:

restrict default nomodify notrap

配置檔案示例:/etc/ntp.conf

②、第二種配置:只允許192.168.23.***網段的客戶機進行時間同步

在restrict default nomodify notrap noquery(表示預設拒絕所有IP的時間同步)之後增加一行:

restrict 192.168.23.0 mask 255.255.255.0 nomodify notrap

3、啟動ntp服務

service ntpd start

開機啟動服務

chkconfig ntpd on

4、ntpd啟動後,客戶機要等幾分鐘再與其進行時間同步,否則會提示“no server suitable for synchronization found”錯誤。

 

二、配置時間同步客戶機

手工執行 ntpdate <ntp server> 來同步

或者利用crontab來執行

crontab -e

0 21 * * * ntpdate 192.168.23.22 >> /root/ntpdate.log 2>&1

每天晚上9點進行同步

版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處:http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667

相關文章