HDFS簡介一

HDFS概念:

HDFS,它是一個文件系統,用於存儲文件,通過目錄樹來定位文件;其次,它是分佈式的,由很多服務器聯合起來實現其功能,集羣中的服務器有各自的角色。
HDFS的設計適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,並不適合用來做網盤應用。

優缺點

優點:

1)高容錯性
    (1)數據自動保存多個副本。它通過增加副本的形式,提高容錯性。
    (2)某一個副本丟失以後,它可以自動恢復。
2)適合大數據處理
     (1)數據規模:能夠處理數據規模達到 GB、TB、甚至PB級別的數據。
     (2)文件規模:能夠處理百萬規模以上的文件數量,數量相當之大。
3)流式數據訪問
     (1)一次寫入,多次讀取,不能修改,只能追加。
     (2)它能保證數據的一致性。
4)可構建在廉價機器上,通過多副本機制,提高可靠性。

缺點:

1)不適合低延時數據訪問,比如毫秒級的存儲數據,是做不到的。
2)無法高效的對大量小文件進行存儲
     (1)存儲大量小文件的話,它會佔用 NameNode大量的內存來存儲文件、目錄和塊信息。這樣是不可取的,因爲NameNode的內存總是有限的。
     (2)小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設計目標。   
3)併發寫入、文件隨機修改
     (1)一個文件只能有一個寫,不允許多個線程同時寫。
     (2)僅支持數據 append(追加),不支持文件的隨機修改。

HDFS框架:

在這裏插入圖片描述
1)Client:就是客戶端。
(1)文件切分。文件上傳 HDFS 的時候,Client 將文件切分成一個一個的Block,然後進行存儲。
(2)與NameNode交互,獲取文件的位置信息。
(3)與DataNode交互,讀取或者寫入數據。
(4)Client提供一些命令來管理HDFS,比如啓動或者關閉HDFS。
(5)Client可以通過一些命令來訪問HDFS。
2)NameNode:就是master,它是一個主管、管理者。
(1)管理HDFS的名稱空間。
(2)管理數據塊(Block)映射信息
(3)配置副本策略
(4)處理客戶端讀寫請求。
3)DataNode:就是Slave。NameNode下達命令,DataNode執行實際的操作
(1)存儲實際的數據塊。
(2)執行數據塊的讀/寫操作。
4) **Secondary NameNode:並非NameNode的熱備。當NameNode掛掉的時候,**它並不能馬上替換NameNode並提供服務。
(1)輔助NameNode,分擔其工作量。
(2)定期合併Fsimage和Edits,並推送給NameNode。
(3)在緊急情況下,可輔助恢復NameNode。

HDFS 文件塊大小

   HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在hadoop2.x版本中是128M,老版本64M
   HDFS的塊比磁盤的塊大,其目的是爲了最小化尋址開銷。如果塊設置得足夠大,從磁盤傳輸數據的時間會明顯大於定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的文件的時間取決於磁盤傳輸速率。
   如果尋址時間約爲10ms,而傳輸速率爲100MB/s,爲了使尋址時間僅佔傳輸時間的1%,我們要將塊大小設置約爲100MB。默認的塊大小128M
   塊的大小:10ms*100*100M/s = 100M

HDFS 寫數據流程

在這裏插入圖片描述

HDFS 讀數據流程

在這裏插入圖片描述

NameNode的工作機制

在這裏插入圖片描述

chkpoint檢查時間參數

hdfs-default.xml

SecondaryNameNode每隔一小時執行一次在這裏插入圖片描述
一分鐘檢查一次操作次數,當操作次數達到1百萬時,SecondaryNameNode執行一次。在這裏插入圖片描述

NameNode 故障處理方法:兩種

  1. 將SecondaryNameNode中的數據拷貝到NameNode存儲數據的目錄上

  2. 使用 -importCheckpoint選項啓動NameNode守護進程。從而將SecondaryNameNode中的數據拷貝到NameNode存儲數據的目錄上。

手動拷貝SecondaryNameNode數據的流程:

1. kill -9 namenode進程
2. 刪除namenode存儲的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
   rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
3. 拷貝SecondaryNameNode中的數據到原NameNode存儲目錄
   scp lichao@hadoop124:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/*  ./name/
4. 重啓NameNode
   sbin/hadoop-daemon.sh start namenode

採用importCheckpoint命令拷貝SecondaryNameNode數據:

1. 修改hdfs-site.xml中的
2. kill -9 namenode進程
3. 刪除namenode存儲的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
   rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
4. 如果SecondNameNode 不和NameNode在一各節點上,需要將SecondaryNameNode存儲數據的目錄拷貝到NameNode存儲數據的平級目錄上,並刪除in_use.lock文件。
   scp -r lichao@hadoop124:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary  ./
   rm -rf namesecondary/in_use.lock
5. 導入檢查點數據
   bin/hdfs namenode -importCheckpoint
6. 啓動NameNode
   sbin/hadoop-daemon.sh start namenode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章