HDFS學習

3.5? HDFS存儲原理

?3.5.1 冗余數據保存

作為一個分布式文件系統,為了保證系統的容錯性和可用性,HDFS采用了多副本方式對數據進行冗余存儲,通常一個數據塊的多個副本會被分布到不同的數據節點上。
?

如圖所示,數據塊1被分別存放到數據節點AC上,數據塊2被存放在數據節點AB上。

這種多副本方式具有以下幾個優點:

1)加快數據傳輸速度

2)容易檢查數據錯誤

3)保證數據可靠性

?3.5.2 數據存取策略

?1.數據存放

?第一個副本:放置在上傳文件的數據節點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節點

?第二個副本:放置在與第一個副本不同的機架的節點上

?第三個副本:與第一個副本相同機架的其他節點上

?更多副本:隨機節點

2. 數據讀取

?HDFS提供了一個API可以確定一個數據節點所屬的機架ID,客戶端也可以調用API獲取自己所屬的機架ID

?當客戶端讀取數據時,從名稱節點獲得數據塊不同副本的存放位置列表,列表中包含了副本所在的數據節點,可以調用API來確定客戶端和這些數據節點所屬的機架ID,當發現某個數據塊副本對應的機架ID和客戶端對應的機架ID相同時,就優先選擇該副本讀取數據,如果沒有發現,就隨機選擇一個副本讀取數據

3. 數據復制(采用流水線策略)

當客戶端需要向HDFS中寫入一個文件時,文件首先被寫入本地計算機。

1)按照HDFS的設置被切分成一定大小的塊,具體大小由HDFS設置

2)每個塊都會向HDFSNameNode節點發起寫請求

3NameNode節點會根據系統中各個DataNode節點的使用情況,選擇一個合適的DataNode節點列表返回給客戶端。

4)客戶端隨后會將數據首先寫入列表中的第一個DataNode節點,同時將列表傳給該節點。

3 數據復制(采用流水線策略)

5)第一個DataNode節點在接收到一定數量的數據后,會向列表中的第二個DataNode節點發起連接請求,并把自己已經接收到的數據和列表傳給第二個節點。

6)第二個節點在接收到數據后,也會向列表中的第三個節點發起連接請求。依此類推。這樣,列表中的多個DataNode節點形成了一條數據復制的流水線。

?3.5.3 數據錯誤與恢復

HDFS具有較高的容錯性,可以兼容廉價的硬件,它把硬件出錯看作一種常態,而不是異常,并設計了相應的機制檢測數據錯誤和進行自動恢復,主要包括以下幾種情形:

? 名稱節點出錯
? 數據節點出錯
? 數據出錯。
1. 名稱節點出錯

名稱節點保存了所有的元數據信息,其中,最核心的兩大數據結構是FsImageEditlog,如果這兩個文件發生損壞,那么整個HDFS實例將失效。解決方案:

1 )把名稱節點上的元數據信息同步存儲到其他文件系統,如 NFS
2 )運行一個第二名稱節點,當名稱節點死機后,可以把運行第二名稱節點作為一種彌補,但這種做法有問題,問題在哪?
最優做法: NFS 和第二名稱節點結合用

2. 數據節點出錯

? 每個數據節點會定期向名稱節點發送“心跳”信息,向名稱節點報告自己的狀態。
? 當數據節點發生故障,或者網絡發生斷網時,名稱節點就無法收到來自一些數據節點的心跳信息,這時,這些數據節點就會被標記為“宕機”,節點上面的所有數據都會被標記為“不可讀”,名稱節點不會再給它們發送任何 I/O 請求。
? 這時,有可能出現一種情形,即由于一些數據節點的不可用,會導致一些數據塊的副本數量小于冗余因子。
? 名稱節點會定期檢查這種情況,一旦發現某個數據塊的副本數量小于冗余因子,就會啟動數據冗余復制,為它生成新的副本。
? HDFS 和其它分布式文件系統的最大區別就是可以調整冗余數據的位置。

3. 數據出錯

? 網絡傳輸和磁盤錯誤等因素,都會造成數據錯誤
? 客戶端在讀取到數據后,會采用 md5 sha1 對數據塊進行校驗,以確定讀取到正確的數據
? 在文件被創建時,客戶端就會對每一個文件塊進行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面
? 當客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數據塊進行校驗,如果校驗出錯,客戶端就會請求到另外一個數據節點讀取該文件塊,并且向名稱節點報告這個文件塊有錯誤,名稱節點會定期檢查并且重新復制這個塊。

3.6 HDFS數據讀寫過程

? FileSystem 是一個通用文件系統的抽象基類,可以被分布式文件系統繼承,所有可能使用 Hadoop 文件系統的代碼,都要使用這個類
? Hadoop FileSystem 這個抽象類提供了多種具體實現
? DistributedFileSystem 就是 FileSystem HDFS 文件系統中的具體實現
? FileSystem open() 方法返回的是一個輸入流 FSDataInputStream 對象,在 HDFS 文件系統中,具體的輸入流就是 DFSInputStream
? FileSystem 中的 create() 方法返回的是一個輸出流 FSDataOutputStream 對象,在 HDFS 文件系統中,具體的輸出流就是 DFSOutputStream

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

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

相關文章

石油化工廠為什么要用專業防爆手機?

防爆手機之所以必須使用專業設計的產品,主要是出于安全考慮,以防止在易燃易爆環境中因手機使用不當引發爆炸事故。以下幾點詳細解釋了使用專業化工防爆手機的必要性: 本質安全設計:頂堅專業防爆手機采用了本質安全(本安…

動手學深度學習(Pytorch版)代碼實踐 -計算機視覺-47轉置卷積

47轉置卷積 import torch from torch import nn from d2l import torch as d2l# 輸入矩陣X和卷積核矩陣K實現基本的轉置卷積運算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天學習打卡營第5天|數據變換Transforms

數據變換Transforms 介紹Transforms分類Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 參考 介紹 MindSpore提供不同種類的數據變換(Transforms),配合數據處理Pipeline來實現數據預處理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

問題描述 安裝ROS底層系統時,經常遇到一個情況就是apt找不到ros的對應版本 解決方案 添加ros官方給的apt源和安裝密鑰 ROS1 # ros獎項 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

數學建模 —— MATLAB中的向量

目錄 向量的創建方法 (1)直接輸入法 (2)冒號法(常用) (3)利用MATLAB函數創建 linspace函數 logspace函數 向量元素的引用 (1)單個元素引用 (2)多個元素引用 向量元素的修改和刪除 向量的創建方法 在 MATLAB中,向量的創建方法主要有…

微軟Edge瀏覽器多用戶配置文件管理:個性化瀏覽體驗

在家庭或工作環境中,經常需要在同一臺計算機上為多個用戶創建和管理獨立的瀏覽體驗。微軟Edge瀏覽器提供了多用戶配置文件管理功能,允許用戶為每個賬戶設置獨立的書簽、歷史記錄、密碼、擴展和設置。本文將詳細介紹如何在微軟Edge中管理多個用戶配置文件…

連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接

JDBC連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接 前言解決辦法一解決辦法二總結 前言 今天使用jdbc連接sql server突然報錯為:SQLServerException: “Encrypt”屬性設置為“true”且 “trustServerCertificate”屬性設置為“fals…

GoMate:配置化模塊化的Retrieval-Augmented Generation (RAG) 框架

文章目錄 GoMate簡介1.1 GoMate的核心技術文檔解析向量存儲嵌入模型問題查詢文本生成文檔更新 1.2 GoMate的應用領域智能客服知識庫構建內容生成教育培訓法律文書處理 GoMate的產品特色2.1 文檔解析2.2 向量存儲2.3 嵌入模型2.4 問題查詢2.5 文本生成2.6 文檔更新 GoMate的使用…

解決SPA(單頁應用)首屏加載速度慢

SPA是目前流行的前端開發模式,相對于傳統的多頁面用戶體驗更好,操作更順暢,開發效率也更高。但是SPA首屏加載速度慢一直是個致命的問題,由于SPA應用首次打開需要一次性加載大量的靜態資源,這就導致了加載速度慢的問題&…

監聽設備方向變化?分享 1 段優質 JS 代碼片段!

大家好,我是大澈! 本文約 700 字,整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段 JS 代碼片段,用于在H5端監聽設備方向的變化。 老規矩,先閱讀代碼片段并思考,再看代碼解析再思考&#…

文件夾內-資源名稱前加序號排列

問題:在文件夾下的資源可以按時間排序,導入unity后資源順序會亂掉,不方便按順序賦值,為了方便,通過下面方法在文件夾下統一在資源名稱前按順序加上序號 win11在文件夾內右鍵,選擇——在終端中打開 輸入&a…

制造企業用AI可以做什么?

ChatGPT橫空出世,有關AI的浪潮席卷全球,比起人工智能如何改變世界,可能你更感興趣我能用AI可以做的事情是什么? 制造企業用AI可以做的事情是什么?人工智能在制造企業中可以做很多事情,以下是一些主要的應用&#xff1…

企業源代碼加密軟件丨透明加密技術是什么

在一個繁忙的軟件開發公司中,兩位員工小李和小張正在討論源代碼安全的問題。 “小張,你有沒有想過我們的源代碼如果被泄露了怎么辦?”小李擔憂地問。 “是啊,這是個大問題。源代碼是我們的核心競爭力,一旦泄露&#…

LUA 語言中subtree 的使用教程

在線編輯器: https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua語言中,"subtree"通常指的是一個子表或者子樹,它指的是一個Lua表(table)中的一個部分,可以是一個單…

<電力行業> - 《第8課:輸電(一)》

1 輸電環節的意義 電能的傳輸,是電力系統整體功能的重要組成環節。發電廠與電力負荷中心通常都位于不同地區。在水力、煤炭等一次能源資源條件適宜的地點建立發電廠,通過輸電可以將電能輸送到遠離發電廠的負荷中心,使電能的開發和利用超越地…

哪些存儲器內可以直接運行程序?

存儲器是否可以運行程序,主要取決于其是否支持eXecute In Place (XIP) 或類似的直接執行特性。下面根據不同存儲器進行分別說明: 1.PROM(Programmable Read-Only Memory,可編程只讀存儲器)是一種可以通過用戶編程來存…

fiddler使用

1、設置抓取HTTPS的請求 先選中瀏覽器Browser---Chrome 默認是不抓https的數據包的 有時我們抓取的的包是https的,不是http的,就要做一些設置 Tools---Options 勾選Capture HTTPS CONNECTs 勾選Decrypt HTTPS traffic 勾選 Ignore server certificat…

(單機版)神魔大陸|v0.51.0|冰火榮耀

前言 今天給大家帶來一款單機游戲的架設:神魔大陸v0.51.0:冰火榮耀。 如今市面上的資源參差不齊,大部分的都不能運行,本人親自測試,運行視頻如下: (單機版)神魔大陸 下面我將詳細的教程交給大家,請耐心閱…

[數據集][目標檢測]電力場景下電柜箱門把手檢測數據集VOC+YOLO格式1167張1類別

數據集格式:Pascal VOC格式YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數):1167 標注數量(xml文件個數):1167 標注數量(txt文件個數):1167 標注…

編譯工具-Gradle

文章目錄 Idea中配置Gradle項目project目錄settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期編寫Settings.gradle編寫Build.gradleTasksPlugins Idea中配置 配置項:gradle位置 及倉庫位置 Gradle項目 Task,settings.gradle,build.…