HDFS學習總結

来源:https://www.cnblogs.com/hailey-M/archive/2019/03/16/mym_hadoop_hdfs_01.html
-Advertisement-
Play Games

1.什麼是Hadoop 管理網路中跨多台電腦存儲的文件系統稱為分散式文件系統面臨的挑戰:使文件系統能容忍節點故障且不丟失任何數據不適合的特點:低時間延遲的數據訪問&大量的小文件&多用戶寫入,任意修改文件 2. HDFS的概念元數據hdfs的目錄結構及每一個文件的塊信息(塊的ID,塊的副本數量,塊的 ...


1.什麼是Hadoop

管理網路中跨多台電腦存儲的文件系統稱為分散式文件系統
面臨的挑戰:使文件系統能容忍節點故障且不丟失任何數據
不適合的特點:低時間延遲的數據訪問&大量的小文件&多用戶寫入,任意修改文件

2. HDFS的概念
元數據
hdfs的目錄結構及每一個文件的塊信息(塊的ID,塊的副本數量,塊的存放位置)
由namenode負責

數據塊
預設為64MB,最小化定址開銷
#分塊的好處:
1. 一個文件的大小可以大於網路中任意一個磁碟的容量
2. 使用塊抽象而非整個文件作為存儲單元,大大簡化了存儲子系統的設計。
3. 適用於數據備份,提供數據容錯能力和可用性。將每個塊複製到少數幾個獨立的機器上,預設為3個。

namenode和datanode
管理者-工作者模式運行
namenode:
管理文件系統的命名空間,(永久)命名空間鏡像文件和編輯日誌文件
(不永久,系統啟動時由數據節點重建)記錄每個文件中各個塊所在的數據節點信息
datanode:
存儲並檢索數據塊,定期向namenode發送它們所存儲的塊的列表。

如何對namenode進行容錯:
1. 備份那些組成文件系統元數據持久狀態的文件。將持久狀態寫入本地磁碟的同時,寫入一個遠程掛載的網路文件系統(NFS)。
2. 輔助namenode,定期通過編輯日誌合併命名空間鏡像,防止編輯日誌過大。
#節點全部失效,怎麼辦?
一般把NFS上的namenode元數據複製到輔助namenode並作為新的主namenode運行。

3.namenode元數據管理機制示意圖

 

 


記憶體中有一份完整的元數據(記憶體meta data)
磁碟有一個“準完整”的元數據鏡像(fsimage)文件(在namenode的工作目錄中)
用於銜接記憶體meta data和持久化元數據鏡像fsimage之間的操作日誌(edits文件)註:當客戶端對hdfs中的文件進行新增或者修改操作,操作記錄首先被記入edits日誌文件中,當客戶端操作成功後,相應的元數據會更新到記憶體meta data中
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage(只有第一次需要下載)下載到本地,並載入到記憶體進行merge(這個過程稱為checkpoint)。
4.向HDFS寫入數據時的流程

 

寫入期間如果發生故障,則執行:
(1)關閉管線,確認把隊列中的任何數據包都添加回數據隊列的最前端,以確保故障節點下游的節點不會漏掉數據包。
(2)為存儲在另一正常節點的當前數據塊指定一個新的標識,並將該標識傳送給namenode,以便故障節點在恢復後可以刪除存儲的部分數據包。
(3)從管線中刪除故障節點,並把餘下的數據塊寫入管線中的兩個正常的節點。namenode註意到複本量不足時,會在另一個節點上創建一個新的複本。
5.從HDFS讀取數據時的流程

 

6.網路拓補和Hadoop
如何計算兩個節點間的距離?
同一節點中的進程<同一機架上的不同節點<同一數據中心中不同機架上的節點<不同數據中心中的節點

7.複本的佈局
可靠性、寫入帶寬和讀取帶寬
預設的策略:
在運行客戶端的節點/隨機選一個節點 作為第一個
和第一個不同的機架中的節點 作為第二個
和第二個相同的機架,不同節點 作為第三個
一旦選定後,會根據網路拓補創建一個管線。
穩定性:兩個機架
寫入帶寬:寫入操作只需要遍歷一個交換機
讀取性能:可以從兩個機架中進行選擇讀取
集群中塊的均勻分佈:客戶端只在本地機架寫入一個塊

8.數據完整性
檢測數據是否損壞的常見措施:
在數據第一次引入系統時計算校驗和,併在數據通過一個不可靠通道進行傳輸時再次計算校驗和,如果不匹配,則說明有損壞,但不能修複數據,常用的錯誤檢測碼為CRC-32.

HDFS的數據完整性
對寫入和讀取的數據分別計算與驗證校驗和

數據校驗的幾種場景:
(1)客戶端向datanode發送數據,最後一個datanode收到數據後,驗證數據的驗證和與客戶端的是否一致。
(2)客戶端從datanode讀取數據時,也會驗證校驗和,並記錄在datanode上。(這些對檢測損壞的磁碟很有價值)
(3)datanode會在後臺線程中運行一個datablockscanner,從而定期驗證存儲在這個datanode上的所有數據塊。

HDFS常見面試題:

1. HDFS 中的 block 預設保存3份

2. HDFS 預設 BlockSize 是 64MB(2.7.2版本,本地模式)128MB(2.7.2版本,分散式模式)

3. Client 端上傳文件的時候下列哪項正確:
- Client端將文件切分為Block,依次上傳
- Client只上傳數據到一臺DataNode,然後由NameNode負責Block複製工作

4.DataNode負責 HDFS 數據存儲

5.關於SecondaryNameNode 哪項是正確的?(C)
A.它是NameNode的熱備
B.它對記憶體沒有要求
C.他的目的使幫助NameNode合併編輯日誌,減少NameNode 啟動時間

6.下列哪個程式通常與 NameNode 在一個節點啟動?(D)
A.SecondaryNameNode
B.DataNode
C.TaskTracker
D.JobTracker
*****
hadoop的集群是基於master/slave模式,namenode和jobtracker屬於master,datanode和tasktracker屬於slave,master只有一個,而slave有多個。
SecondaryNameNode記憶體需求和NameNode在一個數量級上,所以通常secondary NameNode(運行在單獨的物理機器上)和 NameNode 運行在不同的機器上。
JobTracker對應於NameNode,TaskTracker對應於DataNode。
DataNode和NameNode是針對數據存放來而言的。JobTracker和TaskTracker是對於MapReduce執行而言的。
mapreduce中幾個主要概念,mapreduce 整體上可以分為這麼幾條執行線索:
jobclient,JobTracker與TaskTracker。
1)JobClient會在用戶端通過JobClient類將已經配置參數打包成jar文件的應用存儲到hdfs,並把路徑提交到Jobtracker,然後由JobTracker創建每一個Task(即 MapTask 和 ReduceTask)並將它們分發到各個TaskTracker服務中去執行。
2)JobTracker是一master服務,軟體啟動之後JobTracker接收Job,負責調度Job的每一個子任務。task運行於TaskTracker上,並監控它們,如果發現有失敗的task就重新運行它。一般情況應該把JobTracker 部署在單獨的機器上。
3)TaskTracker是運行在多個節點上的slaver服務。TaskTracker主動與JobTracker通信,接收作業,並負責直接執行每一個任務。TaskTracker 都需要運行在HDFS的DataNode上。
*****
7.文件大小預設為 64M,改為 128M 有啥影響?
增加文件塊大小,需要增加磁碟的傳輸速率。

8.HDFS的存儲機制(讀取和寫入)

9.secondarynamenode工作機制
1)第一階段:namenode啟動
(1)第一次啟動namenode格式化後,創建fsimage和edits文件。如果不是第一次啟動,直接載入編輯日誌和鏡像文件到記憶體。
(2)客戶端對元數據進行增刪改的請求
(3)namenode記錄操作日誌,更新滾動日誌。
(4)namenode在記憶體中對數據進行增刪改查
2)第二階段:Secondary NameNode工作
(1)SecondaryNameNode詢問namenode是否需要checkpoint。直接帶回namenode是否檢查結果。
(2)SecondaryNameNode請求執行checkpoint。
(3)namenode滾動正在寫的edits日誌
(4)將滾動前的編輯日誌和鏡像文件拷貝到Secondary NameNode
(5)SecondaryNameNode載入編輯日誌和鏡像文件到記憶體,併合並。
(6)生成新的鏡像文件fsimage.chkpoint
(7)拷貝fsimage.chkpoint到namenode
(8)namenode將fsimage.chkpoint重新命名成fsimage

10. NameNode與SecondaryNameNode 的區別與聯繫?
1)機制流程同上;
2)區別
(1)NameNode負責管理整個文件系統的元數據,以及每一個路徑(文件)所對應的數據塊信息。
(2)SecondaryNameNode主要用於定期合併命名空間鏡像和命名空間鏡像的編輯日誌。
3)聯繫:
(1)SecondaryNameNode中保存了一份和namenode一致的鏡像文件(fsimage)和編輯日誌(edits)。
(2)在主namenode發生故障時(假設沒有及時備份數據),可以從SecondaryNameNode恢複數據。
11. namenode記憶體包含哪些,具體如何分配
NameNode整個記憶體結構大致可以分成四大部分:Namespace、BlocksMap、NetworkTopology及其它。
1)Namespace:維護整個文件系統的目錄樹結構及目錄樹上的狀態變化;
2)BlockManager:維護整個文件系統中與數據塊相關的信息及數據塊的狀態變化;
3)NetworkTopology:維護機架拓撲及DataNode信息,機架感知的基礎;
4)其它:
LeaseManager:讀寫的互斥同步就是靠Lease實現,支持HDFS的Write-Once-Read-Many的核心數據結構;
CacheManager:Hadoop 2.3.0引入的集中式緩存新特性,支持集中式緩存的管理,實現memory-locality提升讀性能;
SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用於數據備份、回滾,以防止因用戶誤操作導致集群出現數據問題;
DelegationTokenSecretManager:管理HDFS的安全訪問;
另外還有臨時數據信息、統計信息metrics等等。
NameNode常駐記憶體主要被Namespace和BlockManager使用,二者使用占比分別接近50%。其它部分記憶體開銷較小且相對固定,與Namespace和BlockManager相比基本可以忽略。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 裝箱:值類型-->引用類型。 拆箱:引用類型-->值類型 裝箱:把值類型拷貝一份到堆里。反之拆箱。 具有父子關係 是拆裝箱的條件之一。 所以: 裝的什麼類型,拆的時候也必須是對應類型。 使用方法時看是否裝拆箱:看需要的參數和傳入的參數的集體類型。 使用泛型集合避免裝拆箱。 ...
  • MVC頁面擴展方法 單例模式 /// <summary> /// 創建一個Config內容對象 /// </summary> /// <param name=""></param> /// <param name="key"></param> /// <returns></returns> publ ...
  • 今天給大家帶來的討論主題是通過實戰經驗來對百億數據量下的多表數據查詢進行優化,俗話說的好,一切脫離業務的架構都是耍流氓,接下來我就整理一下今天早上微信群里石頭哥給大家分享的百億數據量多表查詢架構以及優化思路。由於本文內容整理自微信群,爬樓不易,整理更不易,如果有遺漏,歡迎大家在評論區留言。 作者:依 ...
  • 之前在隨筆《在Winform開發中使用Grid++報表》介紹了在Winform環境中使用Grid++報表控制項,本篇隨筆介紹在Boostrap開發框架中使用Grid++報表,也就是Web環境中使用Grid++報表,對於我上篇提到的二維碼條形碼的資產信息表,我系統通過Web方式進行呈現,或者展示其報表的... ...
  • 本文章是介紹和記錄如何創建GraphQL項目,以及如何使用GraphQL進行數據的相關操作。項目參照GraphQL .Net 的官方文檔進行實踐 一、項目結構: 為了更好的和原有的項目結合在一起,儘可能減少對原項目的修改。我對項目結構做瞭如下分層。 二、項目結構分層說明 Contracts層: 項目 ...
  • 1. ODBC、OLEDB、ADO、ADO.NET之間的關係 ODBC: 開放資料庫互連(ODBC)是MICROSOFT提出的資料庫訪問介面標準。ODBC(Open DatabaseConnectivity,開放資料庫互連)提供了一種標準的API(應用程式編程介面)方法來訪問資料庫管理系統(DBMS ...
  • 集合命名空間: using system.collections. 非泛型集合 using system.collections.Generic. 泛型集合 為什麼要用集合: 1、數組一旦聲明長度就固定了。 2、集合有很多方法可以用 等 常用集合: 類似數組集合:ArrayList List<> 鍵 ...
  • 一.分部視圖 對於MVC 視圖和 Razor Pages 頁面,都有分部視圖功能。通常將 MVC 視圖和 Razor Pages 頁面統稱為“標記文件”,下麵會常提到該名詞。使用分部視圖的優勢包括:(1) 將大型標記文件分解為更小的組件。(2) 減少跨標記文件中,常見標記內容的重覆。 建議:(1)不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...