Hadoop-HDFS的核心總結


什麼是Hadoop?

Hadoop是apache旗下的一款開源的軟件平臺。
Hadoop提供的功能:利用服務器集羣,根據用戶的業務邏輯,對海量數據進行分佈式處理。
多個服務器進行並行計算,把最後的結果彙總。
在這裏插入圖片描述

  1. 集羣
    多臺服務器的方式,每臺服務器可以【獨自】完成工作。(可以自己完成工作,也可以分給別人一起做)
  2. 分佈式
    多臺服務器【共同】完成一個或多個工作。(必須多臺機器一起完成)

Hadoop的主要組成:

  1. common:基礎功能組件,提供基礎功能服務(通信)
  2. HDFS:分佈式文件系統
  3. YARN:資源調度系統
  4. MapReduce:分佈式離線計算框架
    yarn調度資源給mapreduce進行作業,通過從hdfs調用數據(hdfs提供底層的存儲數據)進行計算,都是需要common進行通信。
    在這裏插入圖片描述

什麼是HDFS?

HDFS是hadoop的分佈式文件系統,採用的是集羣的方式來存儲海量數據。
在這裏插入圖片描述

HDFS的核心思想

關鍵字:分而治之

  1. HDFS將大文件切分成多個塊(block)來存儲,默認是按照128M每個塊進行數據的存儲。
  2. 爲保證數據塊(block)的高可靠,不丟失。一般會對數據進行冗餘備份,即使一臺服務器宕機了,也不會導致數據的丟失。一般默認是備份3個副本到不同的服務器上。

HDFS的優缺點

  1. 支持超大文件的存儲,但是隻能把超大文件當作是一個整體,很難對其中的某一行進行操作。
  2. HDFS是一個超大的倉庫(數據倉庫),不管用戶放什麼文件,什麼格式的文件,多大的文件都能存儲下來。但是與mysql(數據庫)相比,mysql存儲數據非常嚴謹,必須符合規範才能存儲。而HDFS存儲的文件不能針對單條記錄進行增刪改查。
  3. 支持大規模併發讀取,大規模併發寫入比較差。
  4. HDFS不支持超多的小文件存儲。

HDFS的架構

  1. 主節點namenode:集羣的老大,管理文件系統的目錄樹,處理客戶端的讀寫請求。(nn可以理解爲是一本書的目錄)
  2. secondarynamenode:嚴格來說並不是namenode的備份節點,主要給namenode分擔內存壓力。但是實際工作中不會用2nn,而是再搭建一個nn(即使存在多個nn,也只能有一個nn處於active活躍狀態。)
  3. 從節點datanode:存儲整個集羣的所有數據塊,處理真正的數據讀寫。(dn可以理解爲是一本書的目錄對應的內容)

HDFS的核心設計

1. 心跳機制

1)datanode每個固定時間(默認3秒)向namenode彙報自身的狀況信息,這就稱之爲心跳。namenode也會發送指令給datanode。

2)HDFS默認時間超過10分鐘30秒,就說明datanode掛掉了。

3)計算公式:
timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval
默認的 heartbeat.recheck-interval 大小爲 5 分鐘,dfs.heartbeat.interval 默認的大小爲 3 秒。

4)根據key的值查看values:
hdfs getconf -confkey dfs.namenode.heartbeat.recheck-interval (300000毫秒)
在這裏插入圖片描述
hdfs getconf -confkey dfs.heartbeat.interval (3秒)
在這裏插入圖片描述

2. 安全模式

namenode的狀態:active(活躍的) / standby(預備) / safemode(安全模式)

safemode其實可以認爲是hdfs集羣的一種自我保護狀態,在該狀態下不允許上傳文件。爲保證數據塊的高可靠,不讓副本丟失,當數據量丟失率超過0.1%(默認),則會進入到安全模式。

冷啓動(先stop再start)集羣的時候,爲什麼剛開始safemode是開啓的,後來才關閉?
因爲當namenode啓動的時候,就會去讀取元數據,元數據在內存中是完整的,但是在磁盤中是不完整的,namenode就以爲數據塊都丟失了,就進入到safemode。
當datanode啓動之後就會進行心跳彙報,safemode就會退出。

3. 副本存放策略

關鍵字:負載均衡、帶寬、高可靠
數據分塊的存儲和副本的存放,是保證高可靠的關鍵。
存放要求:

  1. 第一個副本存放在客戶端連接的節點中。(要考慮負載均衡,選擇的節點不能太滿或太忙,要離客戶端連接近,節省帶寬)
  2. 第二個副本要存放在與第一個副本存放節點不同的機架上。(考慮高可靠)
  3. 第三個副本要存放與第一個副本同一個機架,隨機放在不同節點上。(節省帶寬)
    在這裏插入圖片描述

4. 負載均衡

命令(如何纔算均衡):
start-balancer.sh
sbin/start-balancer.sh -t 10% (設置越小,均衡越高,但是會頻繁負載均衡)

機器容量最高的那個值 和 最低的那個值得差距 不能超過 10%

hdfs集羣主要的功能是實現讀寫操作(帶寬),自動進行均衡非常慢,一天能移動的數據量在 10G-10T 的級別,很難滿足超大集羣的需求。

原因:
hdfs集羣默認不允許balance操作佔用很大的網絡帶寬,這個帶寬是可以調整的。
命令修改:
hdfs dfsadmin -setBalanacerBandwidth 10485760
該數值的單位是字節,上面的配置是10M/s,默認是1M/s

可以在hdfs-site.xml 配置文件中進行設置:

<property>
    <name>dfs.balance.bandwidthPerSec</name>
    <value>10485760</value>
</property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章