Hadoop學習之路(九)HDFS深入理解

?HDFS的優點和缺點

HDFS的優點

1、可構建在廉價機器上

    通過多副本提高可靠性,提供了容錯和恢復機制

    服務器節點的宕機是常態? ?必須理性對象

?

2、高容錯性

    數據自動保存多個副本,副本丟失后,自動恢復

    HDFS的核心設計思想:? 分散均勻存儲 + 備份冗余存儲

3、適合批處理

    移動計算而非數據,數據位置暴露給計算框架

    海量數據的計算 任務 最終是一定要被切分成很多的小任務進行

?

4、適合大數據處理

    GB、TB、甚至 PB 級數據,百萬規模以上的文件數量,10K+節點規模

5、流式文件訪問

     一次性寫入,多次讀取,保證數據一致性

HDFS的缺點

不適合以下操作

1、低延遲數據訪問

    比如毫秒級 低延遲與高吞吐率

2、小文件存取

    占用 NameNode 大量內存 150b* 1000W = 15E,1.5G 尋道時間超過讀取時間

3、并發寫入、文件隨機修改

    一個文件只能有一個寫者 僅支持 append

拋出問題:HDFS文件系統為什么不適用于存儲小文件?

這是和HDFS系統底層設計實現有關系的,HDFS本身的設計就是用來解決海量大文件數據的存儲.,他天生喜歡大數據的處理,大文件存儲在HDFS中,會被切分成很多的小數據塊,任何一個文件不管有多小,都是一個獨立的數據塊,而這些數據塊的信息則是保存在元數據中的,在之前的博客HDFS基礎里面介紹過在HDFS集群的namenode中會存儲元數據的信息,這里再說一下,元數據的信息主要包括以下3部分:

  1)抽象目錄樹

  2)文件和數據塊的映射關系,一個數據塊的元數據大小大約是150byte

  3)數據塊的多個副本存儲地

而元數據的存儲在磁盤(1和2)和內存中(1、2和3),而服務器中的內存是有上限的,舉個例子:

有100個1M的文件存儲進入HDFS系統,那么數據塊的個數就是100個,元數據的大小就是100*150byte,消耗了15000byte的內存,但是只存儲了100M的數據。

有1個100M的文件存儲進入HDFS系統,那么數據塊的個數就是1個,元數據的大小就是150byte,消耗量150byte的內存,存儲量100M的數據。

所以說HDFS文件系統不適用于存儲小文件。

HDFS的輔助功能

HDFS作為一個文件系統。有兩個最主要的功能:上傳和下載。而為了保障這兩個功能的完美和高效實現,HDFS提供了很多的輔助功能

1.心跳機制

普通話講解

1、 Hadoop 是 Master/Slave 結構,Master 中有 NameNode 和 ResourceManager,Slave 中有 Datanode 和 NodeManager?

2、 Master 啟動的時候會啟動一個 IPC(Inter-Process Comunication,進程間通信)server 服 務,等待 slave 的鏈接

3、 Slave 啟動時,會主動鏈接 master 的 ipc server 服務,并且每隔 3 秒鏈接一次 master,這 個間隔時間是可以調整的,參數為 dfs.heartbeat.interval,這個每隔一段時間去連接一次 的機制,我們形象的稱為心跳。Slave 通過心跳匯報自己的信息給 master,master 也通 過心跳給 slave 下達命令,

4、 NameNode 通過心跳得知 Datanode 的狀態 ,ResourceManager 通過心跳得知 NodeManager 的狀態

5、 如果 master 長時間都沒有收到 slave 的心跳,就認為該 slave 掛掉了。!!!!!

大白話講解

1、DataNode啟動的時候會向NameNode匯報信息,就像釘釘上班打卡一樣,你打卡之后,你領導才知道你今天來上班了,同樣的道理,DataNode也需要向NameNode進行匯報,只不過每次匯報的時間間隔有點短而已,默認是3秒中,DataNode向NameNode匯報的信息有2點,一個是自身DataNode的狀態信息,另一個是自身DataNode所持有的所有的數據塊的信息。而DataNode是不會知道他保存的所有的數據塊副本到底是屬于哪個文件,這些都是存儲在NameNode的元數據中。

2、按照規定,每個DataNode都是需要向NameNode進行匯報。那么如果從某個時刻開始,某個DataNode再也不向NameNode進行匯報了。 有可能宕機了。因為只要通過網絡傳輸數據,就一定存在一種可能: 丟失 或者 延遲。

3、HDFS的標準: NameNode如果連續10次沒有收到DataNode的匯報。 那么NameNode就會認為該DataNode存在宕機的可能。

4、DataNode啟動好了之后,會專門啟動一個線程,去負責給NameNode發送心跳數據包,如果說整個DataNode沒有任何問題,但是僅僅只是當前負責發送信條數據包的線程掛了。NameNode會發送命令向這個DataNode進行確認。查看這個發送心跳數據包的服務是否還能正常運行,而為了保險起見,NameNode會向DataNode確認2遍,每5分鐘確認一次。如果2次都沒有返回 結果,那么NameNode就會認為DataNode已經GameOver了!!!

最終NameNode判斷一個DataNode死亡的時間計算公式:

timeout = 10 * 心跳間隔時間? + 2 * 檢查一次消耗的時間

?心跳間隔時間:dfs.heartbeat.interval 心跳時間:3s
檢查一次消耗的時間:heartbeat.recheck.interval checktime : 5min

最終結果默認是630s。

2.安全模式

1、HDFS的啟動和關閉都是先啟動NameNode,在啟動DataNode,最后在啟動secondarynamenode。

2、決定HDFS集群的啟動時長會有兩個因素:

  1)磁盤元數據的大小

  2)datanode的節點個數

?當元數據很大,或者 節點個數很多的時候,那么HDFS的啟動,需要一段很長的時間,那么在還沒有完全啟動的時候HDFS能否對外提供服務?

在HDFS的啟動命令start-dfs.sh執行的時候,HDFS會自動進入安全模式

為了確保用戶的操作是可以高效的執行成功的,在HDFS發現自身不完整的時候,會進入安全模式。保護自己。

?

在正常啟動之后,如果HDFS發現所有的數據都是齊全的,那么HDFS會啟動的退出安全模式

3、對安全模式進行測試

安全模式常用操作命令:

hdfs dfsadmin -safemode leave //強制 NameNode 退出安全模式

hdfs dfsadmin -safemode enter //進入安全模式

hdfs dfsadmin -safemode get //查看安全模式狀態

hdfs dfsadmin -safemode wait //等待,一直到安全模式結束

手工進入安全模式進行測試

1、測試創建文件夾

[hadoop@hadoop1 ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[hadoop@hadoop1 ~]$ hadoop fs -mkdir -p /xx/yy/zz
mkdir: Cannot create directory /xx/yy/zz. Name node is in safe mode.
[hadoop@hadoop1 ~]$ 

2、測試下載文件

[hadoop@hadoop1 ~]$ ls
apps  data
[hadoop@hadoop1 ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@hadoop1 ~]$ hadoop fs -get /aa/1.txt ~/1.txt
[hadoop@hadoop1 ~]$ ls
1.txt  apps  data
[hadoop@hadoop1 ~]$ 

3、測試上傳

[hadoop@hadoop1 ~]$ hadoop fs -put 1.txt /a/xx.txt
put: Cannot create file/a/xx.txt._COPYING_. Name node is in safe mode.
[hadoop@hadoop1 ~]$ 

4、得出結論,在安全模式下:

如果一個操作涉及到元數據的修改的話。都不能進行操作

如果一個操作僅僅只是查詢。那是被允許的。

所謂的安全模式,僅僅只是保護namenode,而不是保護datanode

3.副本存放策略

第一副本:放置在上傳文件的DataNode上;如果是集群外提交,則隨機挑選一臺磁盤不太慢、CPU不太忙的節點上;
第二副本:放置在于第一個副本不同的機架的節點上;
第三副本:與第二個副本相同機架的不同節點上;
如果還有更多的副本:隨機放在節點中;

4.負載均衡

負載均衡理想狀態:節點均衡、機架均衡和磁盤均衡。

Hadoop的HDFS集群非常容易出現機器與機器之間磁盤利用率不平衡的情況,例如:當集群內新增、刪除節點,或者某個節點機器內硬盤存儲達到飽和值。當數據不平衡時,Map任務可能會分配到沒有存儲數據的機器,這將導致網絡帶寬的消耗,也無法很好的進行本地計算。
當HDFS負載不均衡時,需要對HDFS進行數據的負載均衡調整,即對各節點機器上數據的存儲分布進行調整。從而,讓數據均勻的分布在各個DataNode上,均衡IO性能,防止熱點的發生。進行數據的負載均衡調整,必須要滿足如下原則:

    • 數據平衡不能導致數據塊減少,數據塊備份丟失
    • 管理員可以中止數據平衡進程
    • 每次移動的數據量以及占用的網絡資源,必須是可控的
    • 數據均衡過程,不能影響namenode的正常工作

負載均衡的原理

數據均衡過程的核心是一個數據均衡算法,該數據均衡算法將不斷迭代數據均衡邏輯,直至集群內數據均衡為止。該數據均衡算法每次迭代的邏輯如下:

步驟分析如下:

  1. 數據均衡服務(Rebalancing Server)首先要求 NameNode 生成 DataNode 數據分布分析報告,獲取每個DataNode磁盤使用情況
  2. Rebalancing Server匯總需要移動的數據分布情況,計算具體數據塊遷移路線圖。數據塊遷移路線圖,確保網絡內最短路徑
  3. 開始數據塊遷移任務,Proxy Source Data Node復制一塊需要移動數據塊
  4. 將復制的數據塊復制到目標DataNode上
  5. 刪除原始數據塊
  6. 目標DataNode向Proxy Source Data Node確認該數據塊遷移完成
  7. Proxy Source Data Node向Rebalancing Server確認本次數據塊遷移完成。然后繼續執行這個過程,直至集群達到數據均衡標準

DataNode分組

在第2步中,HDFS會把當前的DataNode節點,根據閾值的設定情況劃分到Over、Above、Below、Under四個組中。在移動數據塊的時候,Over組、Above組中的塊向Below組、Under組移動。四個組定義如下:

?

  • Over組:此組中的DataNode的均滿足

DataNode_usedSpace_percent?>?Cluster_usedSpace_percent + threshold

  • Above組:此組中的DataNode的均滿足

Cluster_usedSpace_percent + threshold?>?DataNode_ usedSpace _percent?>Cluster_usedSpace_percent

  • Below組:此組中的DataNode的均滿足

Cluster_usedSpace_percent?>?DataNode_ usedSpace_percent?>?Cluster_ usedSpace_percent – threshold

  • Under組:此組中的DataNode的均滿足

Cluster_usedSpace_percent – threshold?>?DataNode_usedSpace_percent

Hadoop HDFS 數據自動平衡腳本使用方法

在Hadoop中,包含一個start-balancer.sh腳本,通過運行這個工具,啟動HDFS數據均衡服務。該工具可以做到熱插拔,即無須重啟計算機和 Hadoop 服務。HadoopHome/binstart?balancer.shHadoopHome/bin目錄下的start?balancer.sh腳本就是該任務的啟動腳本。啟動命令為:‘Hadoop_home/bin/start-balancer.sh –threshold`

影響Balancer的幾個參數:

  • -threshold
    • 默認設置:10,參數取值范圍:0-100
    • 參數含義:判斷集群是否平衡的閾值。理論上,該參數設置的越小,整個集群就越平衡
  • dfs.balance.bandwidthPerSec
    • 默認設置:1048576(1M/S)
    • 參數含義:Balancer運行時允許占用的帶寬

示例如下:

#啟動數據均衡,默認閾值為 10%
$Hadoop_home/bin/start-balancer.sh#啟動數據均衡,閾值 5%
bin/start-balancer.sh –threshold 5#停止數據均衡
$Hadoop_home/bin/stop-balancer.sh

在hdfs-site.xml文件中可以設置數據均衡占用的網絡帶寬限制

    <property><name>dfs.balance.bandwidthPerSec</name><value>1048576</value><description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description></property>

?

轉載于:https://www.cnblogs.com/qingyunzong/p/8535995.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252146.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252146.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Unity中的聲音管理模塊(專題七)

聲音的要素 1: 音頻文件AudioClip2: 音源AudioSource;3: 耳朵AudioListener;//全局只能有一個4: 2D/3D音頻;//2D只是簡單地播放聲音&#xff0c;3D可以根據距離衰減音量 怎樣聽到聲音&#xff1a; 創建一個節點&#xff0c;掛載AudioSource組件&#xff0c;AudioSource組件關聯…

重啟唯一的窗體實例,以及調用系統重啟函數失敗解決辦法

1、修改Program.cs內的程序啟動函數 static class Program{public static System.Threading.Mutex Instance;/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTe…

ThreadLocal可能引起的內存泄露

threadlocal里面使用了一個存在弱引用的map,當釋放掉threadlocal的強引用以后,map里面的value卻沒有被回收.而這塊value永遠不會被訪問到了. 所以存在著內存泄露. 最好的做法是將調用threadlocal的remove方法. 在threadlocal的生命周期中,都存在這些引用. 看下圖: 實線代表強引…

codevs 1576 最長嚴格上升子序列

題目鏈接&#xff1a;http://codevs.cn/problem/1576/題目描述 Description給一個數組a1, a2 ... an&#xff0c;找到最長的上升降子序列ab1<ab2< .. <abk&#xff0c;其中b1<b2<..bk。 輸出長度即可。 輸入描述 Input Description第一行&#xff0c;一個整數N。…

nginx服務器開啟緩存、反向代理

一、反向代理配置 1、反向代理服務器配置如下 反向代理就是需要這一行proxy_pass來完成。當我們要訪問后端web服務器的時候&#xff0c;我們只需要訪問代理服務器就可以了&#xff0c;此時代理服務器就充當后端web服務器的角色。proxy_pass依賴的模塊是&#xff1a; 至于后兩行…

Halcon:區域特征:select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

Region特征一覽&#xff1a; 特征 英 譯 備注 area Area of the object 對象的面積 row Row index of the center 中心點的行坐標 column Column index of the center 中心點的列坐標 width Width of the region 區域的寬度 height Height of the…

Web應用主動偵測工具Skipfish

Web應用主動偵測工具SkipfishSkipfish是Kali Linux附帶的一個主動Web應用偵測工具。該工具會首先盡可能獲取所有網站路徑&#xff0c;進行訪問&#xff0c;然后根據返回的內容&#xff0c;檢測是否存在漏洞。該工具采用字典爆破和網頁爬行兩種方式獲取網站。一旦獲取網頁內容&a…

7步讓你get首個數據科學實習

由于數據科學的龐大和復雜&#xff0c;如果你沒有相關的實習經歷的話&#xff0c;成為數據科學家的道路將會更加艱巨和困難。即使是經驗豐富的人&#xff0c;實習也是轉型進入數據科學領域的一種有效方式。 那么&#xff0c;尋找數據科學實習有哪些技巧&#xff1f;本文總結了數…

Halcon:Image、region、xld常用的處理

一、讀取文件夾中的所有圖片 list_files (C:/Users/fuping.liu/Desktop/檳榔有無頭/有頭, [files,follow_links], ImageFiles) tuple_regexp_select (ImageFiles, [\(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$,ignore_case], ImageFiles)for Index :…

賽碼網算法: 上臺階 ( python3實現 、c實現)

上臺階 題目描述 有一樓梯共m級&#xff0c;剛開始時你在第一級&#xff0c;若每次只能跨上一級或二級&#xff0c;要走上第m級&#xff0c;共有多少走法&#xff1f;注&#xff1a;規定從一級到一級有0種走法。 輸入…

Halcon: 畸變矯正與標定(1)

1、 Halcon相機標定和圖像矯正 對于相機采集的圖片&#xff0c;會由于相機本身和透鏡的影響產生形變&#xff0c;通常需要對相機進行標定&#xff0c;獲取相機的內參或內外參&#xff0c;然后矯正其畸變。相機畸變主要分為徑向畸變和切向畸變&#xff0c;其中徑向畸變是由透…

conda install 出錯

在下載包時出現下面的錯誤&#xff1a; userdeMBP:pytorch user$ conda install -n deeplearning matplotlib Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/osx-64/repodata.json.bz2> Elapsed…

算法入門經典 第三章

scanf 遇到tab或空格或換行符停下來1.例題2-1 7744問題 從數本身看 從個位數的數字看#include <iostream>#include<math.h>using namespace std; int main(){ for(int a1;a<9;a) { for(int b1;b<9;b) { int n1100*a11*b;//floor x 等于1的區間為[1,2),florr(…

Halcon :畸變矯正與標定(2)

相機標定1.相機標定是什么2.怎么使用halcon進行相機內外參標定&#xff1f; &#xff08;1&#xff09;搭建硬件1.**相機連好電腦&#xff0c;用相機廠家軟件打開相機&#xff0c;檢查一下相機是否正常。**2.**接下來使用halcon連接相機**&#xff08;2&#xff09;開始標定1.*…

jQuery2

一、層次選擇器 1、后代選擇器$("div p"):div中所有的p標簽元素 2、自帶選擇器$("div>p")&#xff1a;div中的子代是p的第一層元素 3、兄弟選擇器$("divp")和div是兄弟的p標簽 4、相鄰兄弟選擇器$("div~p")與div相鄰的p標簽 二、jQ…

HTTP協議詳解(轉載)

http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 轉載于:https://www.cnblogs.com/youmei11/p/8608007.html

bzoj1016 [JSOI2008]最小生成樹計數

1016: [JSOI2008]最小生成樹計數 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6032 Solved: 2452[Submit][Status][Discuss]Description 現在給出了一個簡單無向加權圖。你不滿足于求出這個圖的最小生成樹&#xff0c;而希望知道這個圖中有多少個不同的最小生成樹。&…

http請求概述

當瀏覽器輸入網址后 瀏覽器首先向DNS域名解析服務器發送請求。DNS反解析&#xff1a;根據瀏覽器請求地址中的域名&#xff0c;到DNS服務器中找到對應的服務器外網IP地址通過找到外網IP&#xff0c;向對應的服務器發請求&#xff08;首先訪問服務器的WEB站點管理工具&#xff1a…

Halcon:二維仿射變換實例探究

二維仿射變換&#xff0c;顧名思義就是在二維平面內&#xff0c;對對象進行平移、旋轉、縮放等變換的行為&#xff08;當然還有其他的變換&#xff0c;這里僅論述這三種最常見的&#xff09;。 Halcon中進行仿射變換的常見步驟如下&#xff1a; ① 通過hom_mat2d_identity算子…

劍指Offer-數組中重復的數字

題目描述 在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的&#xff0c;但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如&#xff0c;如果輸入長度為7的數組{2,3,1,0,2,5,3}&#xff0c;那么對應的…