NameNode故障處理
1)需求
NameNode
程序挂了并且存儲的資料也丢失了
2)故障模拟
(1)
kill -9 NameNode
程序
kill -9 19886
(2)删除
NameNode
儲存的資料
rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
3)問題解決 原文:sw-code
(1)拷貝
SecondaryNameNode
中的資料到原
NameNode
存儲資料目錄
[hadoop@hadoop102 dfs]$ scp -r hadoop@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
(2)重新啟動
NameNode
[hadoop@hadoop102 dfs]$ hdfs --daemon start namenode
(3)向叢集上傳一個檔案
注意:生産環境一般是
NameNode
的高可用,即配置多個
NameNode
來處理此類情況
叢集安全模式&磁盤修複
1)安全模式:檔案系統隻接受讀資料請求,而不接受删除、修改等變更請求
2)進入安全模式場景
-
在加載鏡像檔案和編輯日志期間處于安全模式。NameNode
-
在接收NameNode
注冊時,處于安全模式。DataNode
3)退出安全模式條件
dfs.namenode.safemode.min.datanodes
:最小可用的
datanode
數量大于0,預設0。
dfs.namenode.safemode.threshold-pct
:副本達到最小要求的
block
占系統總
block
的百分比,預設0.999f。(隻允許丢一個塊)
dfs.namenode.safemode.extension
:穩定時間,預設值3000ms,即30s。
4)基本文法
叢集處于安全模式,不能執行重要操作(寫操作),叢集啟動完成後,自動退出安全模式。
bin/hdfs dfsadmin -safemode get
bin/hdfs dfsadmin -safemode enter
bin/hdfs dfsadmin -safemode leave
bin/hdfs dfsadmin -safemode wait
慢磁盤監控
找出哪塊磁盤慢的方法如下
1)通過心跳未聯系時間
一般出現慢磁盤現象,會影響到
DataNode
與
NameNode
之間的心跳,正常情況下心跳時間間隔是3s。超過2s說明有異常。
2)fio指令,測試磁盤的讀寫性能
使用該指令安裝測試工具
sudo yum install -y fio
(1)順序讀測試
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/test.log -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
Run status group 0 (all jobs):
READ: bw=106MiB/s (111MB/s), 106MiB/s-106MiB/s (111MB/s-111MB/s), io=6334MiB (6642MB), run=60003-60003msec
注意更改路徑:
-filename=/home/your username/test.log
(2)順序寫測試
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/test.log -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
Run status group 0 (all jobs):
WRITE: bw=106MiB/s (111MB/s), 106MiB/s-106MiB/s (111MB/s-111MB/s), io=6351MiB (6660MB), run=60002-60002msec
(3)随機寫測試
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/test.log -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
Run status group 0 (all jobs):
WRITE: bw=93.1MiB/s (97.6MB/s), 93.1MiB/s-93.1MiB/s (97.6MB/s-97.6MB/s), io=5584MiB (5855MB), run=60004-60004msec
(3)混合随機讀寫測試
[hadoop@hadoop102 hadoop-3.1.3]$ sudo fio -filename=/home/hadoop/test.log -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop
Run status group 0 (all jobs):
READ: bw=44.9MiB/s (47.1MB/s), 44.9MiB/s-44.9MiB/s (47.1MB/s-47.1MB/s), io=2697MiB (2828MB), run=60002-60002msec
WRITE: bw=44.0MiB/s (47.2MB/s), 44.0MiB/s-44.0MiB/s (47.2MB/s-47.2MB/s), io=2700MiB (2831MB), run=60002-60002msec
小檔案歸檔
1)HDFS存儲小檔案弊端:100個1K檔案塊和100個128M的檔案塊,占用NN記憶體大小一樣
每個檔案按塊存儲,每個塊的中繼資料存儲在NameNode的記憶體中,是以HDFS存儲小檔案會非常低效。因為大量的小檔案會耗盡NameNode中的大部分記憶體。但注意,存儲小檔案所需的磁盤容量和資料塊大小無關。例如,一個1MB的檔案設定未128MB的塊存儲,實際使用的是1MB的磁盤空間,而不是128MB。
2)解決存儲小檔案辦法之一
HDFS存檔檔案或HAR檔案,是一個更高效的檔案存檔工具,它将檔案存入HDFS塊,在減少NameNode記憶體使用的同時,允許堆檔案進行透明通路。具體說來,HDFS存檔檔案對内還是一個獨立檔案,對NameNode而言卻是一個整體,減少了NameNode的記憶體。
3)實操案例
(1)需要啟動YARN程序
start-yarn.sh
(2)歸檔檔案
把
/input
目錄裡面的所有檔案歸檔成一個叫
input.har
的歸檔檔案,并把歸檔後的檔案存儲到
/output
目錄下
hadoop archive -archiveName input.har -p /input /output
(3)檢視歸檔
hadoop fs -ls har:///output/input.har
(4)拷貝檔案
hadoop fs -cp har:///output/input.har/test.txt /
本文來自部落格園,作者:sw-code,轉載請注明原文連結:https://www.cnblogs.com/sw-code/p/16395460.html