天天看點

大資料之Hadoop中HDFS的故障排除

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

繼續閱讀