1.5.6 NN與2NN-hadoop-最全最完整的保姆級的java大數據學習資料

来源:https://www.cnblogs.com/gitBook/archive/2022/12/10/16970748.html
-Advertisement-
Play Games

1.5.6 NN與2NN 1.5.6.1 HDFS元數據管理機制 問題1:NameNode如何管理和存儲元數據? 電腦中存儲數據兩種:記憶體或者是磁碟 元數據存儲磁碟:存儲磁碟無法面對客戶端對元數據信息的任意的快速低延遲的響應,但是安全性高 元數據存儲記憶體:元數據存放記憶體,可以高效的查詢以及快速響應 ...


目錄

1.5.6 NN與2NN

1.5.6.1 HDFS元數據管理機制

問題1:NameNode如何管理和存儲元數據?

電腦中存儲數據兩種:記憶體或者是磁碟

元數據存儲磁碟:存儲磁碟無法面對客戶端對元數據信息的任意的快速低延遲的響應,但是安全性高

元數據存儲記憶體:元數據存放記憶體,可以高效的查詢以及快速響應客戶端的查詢請求,數據保存在內 存,如果斷點,記憶體中的數據全部丟失。
解決方案:記憶體+磁碟;NameNode記憶體+FsImage的文件(磁碟)
新問題:磁碟和記憶體中元數據如何劃分?
兩個數據一模一樣,還是兩個數據合併到一起才是一份完整的數據呢?
一模一樣:client如果對元數據進行增刪改操作,需要保證兩個數據的一致性。FsImage文件操作起來 效率也不高。
兩個合併=完整數據:NameNode引入了一個edits文件(日誌文件:只能追加寫入)edits文件記錄的 是client的增刪改操作,
不再選擇讓NameNode把數據dump出來形成FsImage文件(這種操作是比較消耗資源)。

元數據管理流程圖

在這裡插入圖片描述

  • 第一階段:NameNode啟動

    • 第一次啟動NameNode格式化後,創建Fsimage和Edits文件。如果不是第一次啟動,直接載入編輯日誌和鏡像文件到記憶體。

    • 客戶端對元數據進行增刪改的請求。

    • NameNode記錄操作日誌,更新滾動日誌。

    • NameNode在記憶體中對數據進行增刪改。

  • 第二階段:Secondary NameNode工作

    • Secondary NameNode詢問NameNode是否需要CheckPoint。直接帶回NameNode是否執行檢查點操作結果。
    • Secondary NameNode請求執行CheckPoint。
    • NameNode滾動正在寫的Edits日誌。
    • 將滾動前的編輯日誌和鏡像文件拷貝到Secondary NameNode。
    • Secondary NameNode載入編輯日誌和鏡像文件到記憶體,併合並。
    • 生成新的鏡像文件fsimage.chkpoint。
    • 拷貝fsimage.chkpoint到NameNode。
    • NameNode將fsimage.chkpoint重新命名成fsimage。

1.5.6.2 Fsimage與Edits文件解析

NameNode在執行格式化之後,會在/opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current目錄下產生如下文件

在這裡插入圖片描述

  • Fsimage文件:是namenode中關於元數據的鏡像,一般稱為檢查點,這裡包含了HDFS文件系統所有目錄以及文件相關信息(Block數量,副本數量,許可權等信息)
  • Edits文件 :存儲了客戶端對HDFS文件系統所有的更新操作記錄,Client對HDFS文件系統所有的更新操作都會被記錄到Edits文件中(不包括查詢操作)
  • seen_txid:該文件是保存了一個數字,數字對應著最後一個Edits文件名的數字
  • VERSION:該文件記錄namenode的一些版本號信息,比如:CusterId,namespaceID等

在這裡插入圖片描述
在這裡插入圖片描述

1.5.6.2.1 Fsimage文件內容

官方地址https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html

  1. 查看oiv和oev命令

    [root@linux121 current]$ hdfs 
    
    oiv     Offline Image Viewer  View a Hadoop fsimage INPUTFILE using the specified PROCESSOR,saving the results in OUTPUTFILE.
    
    oev     Offline edits viewer  Parse a Hadoop edits log file INPUT_FILE and save results in OUTPUT_FILE
    
  2. 基本語法

    hdfs oiv -p 文件類型(xml) -i 鏡像文件 -o 轉換後文件輸出路徑
    
  3. 案例實操

    [root@linux121 current]$ cd /opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current 
    [root@linux121 current]$ hdfs oiv -p XML -i fsimage_0000000000000000265 -o /opt/lagou/servers/fsimage.xml 
    [root@linux121 current]$ cat /opt/lagou/servers/fsimage.xml
    
    <?xml version="1.0"?>
    <fsimage> 
    	<version> 
    		<layoutVersion>-63</layoutVersion> 
    		<onDiskVersion>1</onDiskVersion> 
    		<oivRevision>826afbeae31ca687bc2f8471dc841b66ed2c6704</oivRevision>
        </version> 
    	<NameSection> 
    		<namespaceId>1393381414</namespaceId> 
    		<genstampV1>1000</genstampV1> 
    		<genstampV2>1024</genstampV2> 
    		<genstampV1Limit>0</genstampV1Limit> 
    		<lastAllocatedBlockId>1073741848</lastAllocatedBlockId> 
    		<txid>265</txid> 
    	</NameSection> 
    	<INodeSection> 
    		<inode> 
    			<id>16398</id> 
    			<type>DIRECTORY</type> 
    			<name>history</name> 
    			<mtime>1592376391028</mtime> 
    			<permission>root:supergroup:0777</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode>
    		<inode>
    			<id>16399</id> 
    			<type>DIRECTORY</type> 
    			<name>done_intermediate</name> 
    			<mtime>1592375256896</mtime> 
    			<permission>root:supergroup:1777</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode>
    		<inode> 
    			<id>16400</id> 
    			<type>DIRECTORY</type> 
    			<name>root</name> 
    			<mtime>1592378079208</mtime>
                <permission>root:supergroup:0777</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode>
    		<inode>
    			<id>16413</id> 
    			<type>FILE</type> 
    			<name>job_1592375222804_0001-1592375231176-root-word+count-1592375281926-1-1-SUCCEEDED-default-					1592375261492.jhist</name> 
    			<replication>3</replication> 
    			<mtime>1592375282039</mtime> 
    			<atime>1592375281980</atime> 
    			<preferredBlockSize>134217728</preferredBlockSize> 
    			<permission>root:supergroup:0777</permission> 
    			<blocks> 
    				<block>
    					<id>1073741834</id>
    					<genstamp>1010</genstamp> 
    					<numBytes>33584</numBytes> 
    				</block>
    			</blocks>
    			<storagePolicyId>0</storagePolicyId> 
    		</inode>
    		<inode>
    			<id>16414</id> 
    			<type>FILE</type> 
    			<name>job_1592375222804_0001_conf.xml</name> 
    			<replication>3</replication> 
    			<mtime>1592375282121</mtime> 
    			<atime>1592375282053</atime> 
    			<preferredBlockSize>134217728</preferredBlockSize> 
    			<permission>root:supergroup:0777</permission> 
    			<blocks>
    				<block> 
    					<id>1073741835</id> 
    					<genstamp>1011</genstamp> 
    					<numBytes>196027</numBytes> 
    				</block> 
    			</blocks>
    			<storagePolicyId>0</storagePolicyId> 
    		</inode>
    		<inode>
    			<id>16415</id> 
    			<type>DIRECTORY</type> 
    			<name>done</name>
    			<mtime>1592376776670</mtime> 
    			<permission>root:supergroup:0777</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode>
    	
            <inode>
    			<id>16427</id> 
    			<type>DIRECTORY</type> 
    			<name>logs</name> 
    			<mtime>1592378009623</mtime> 
    			<permission>root:root:0770</permission> 
    			<nsquota>-1</nsquota>
                <dsquota>-1</dsquota> 
    		</inode> 
    		<inode> 
    			<id>16428</id> 
    			<type>DIRECTORY</type> 
    			<name>application_1592376944601_0001</name> 
    			<mtime>1592378045481</mtime> 
    			<permission>root:root:0770</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode> 
    		<inode> 
    			<id>16430</id> 
    			<type>DIRECTORY</type> 
    			<name>wcoutput</name> 
    			<mtime>1592378037463</mtime> 
    			<permission>root:supergroup:0755</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode> 
    		<inode> 
    			<id>16436</id> 
    			<type>FILE</type> 
    			<name>part-r-00000</name> 
    			<replication>3</replication> 
    			<mtime>1592378037264</mtime> 
    			<atime>1592378037074</atime> 
    			<preferredBlockSize>134217728</preferredBlockSize>
                <permission>root:supergroup:0644</permission> 
    			<blocks>
    				<block>
    					<id>1073741842</id> 
    					<genstamp>1018</genstamp> 
    					<numBytes>43</numBytes> 
    				</block>
    			</blocks>
    			<storagePolicyId>0</storagePolicyId> 
    		</inode> 
    		<inode>
    			<id>16445</id> 
    			<type>FILE</type>
    			<name>linux123_39919</name> 
    			<replication>3</replication> 
    			<mtime>1592378045469</mtime> 
    			<atime>1592378045331</atime> 
    			<preferredBlockSize>134217728</preferredBlockSize>
                <permission>root:root:0640</permission> 
    			<blocks>
    				<block>
    					<id>1073741848</id> 
    					<genstamp>1024</genstamp> 
    					<numBytes>56910</numBytes> 
    				</block>
    			</blocks>
    			<storagePolicyId>0</storagePolicyId> 
    		</inode>
    		<inode>
                <id>16446</id> 
    			<type>DIRECTORY</type>
    			<name>0617</name> 
    			<mtime>1592387393490</mtime> 
    			<permission>root:supergroup:0755</permission> 
    			<nsquota>-1</nsquota> 
    			<dsquota>-1</dsquota> 
    		</inode>
    		<inode>
    			<id>16449</id> 
    			<type>FILE</type> 
    			<name>banzhang.txt</name> 
    			<replication>1</replication> 
    			<mtime>1592388309046</mtime> 
    			<atime>1592388309026</atime> 
    			<preferredBlockSize>134217728</preferredBlockSize>
                <permission>root:supergroup:0644</permission> 
    			<storagePolicyId>0</storagePolicyId> 
    		</inode>
    	</INodeSection>
        
    </fsimage>
    

    問題:Fsimage中為什麼沒有記錄塊所對應DataNode?

在這裡插入圖片描述

在記憶體元數據中是有記錄塊所對應的dn信息,但是fsimage中就剔除了這個信息;HDFS集群在啟動的 時候會載入image以及edits文件,block對應的dn信息

都沒有記錄,集群啟動時會有一個安全模式 (safemode),安全模式就是為了讓dn彙報自己當前所持有的block信息給nn來補全元數據。後續每隔一段時間dn

都要彙報自己持有的block信息。

1.5.6.2.2 Edits文件內容
  1. 基本語法
hdfs oev -p 文件類型 -i編輯日誌 -o 轉換後文件輸出路徑 
  1. 案例實操

    [root@linux121 current]$ hdfs oev -p XML -i edits_0000000000000000266- 0000000000000000267 -o /opt/lagou/servers/hadoop-2.9.2/edits.xml 
    [root@linux121 current]$ cat /opt/lagou/servers/hadoop-2.9.2/edits.xml
    
    <?xml version="1.0" encoding="UTF-8"?> 
    <EDITS> 
    	<EDITS_VERSION>-63</EDITS_VERSION> 
    	<RECORD> 
    		<OPCODE>OP_START_LOG_SEGMENT</OPCODE>
            <DATA> 
    			<TXID>113</TXID> 
    		</DATA>
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE>
            <DATA> 
    			<TXID>114</TXID> 
    			<SRC>/wcoutput/_SUCCESS</SRC> 
    			<MODE>493</MODE> 
    		</DATA>
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE>
            <DATA> 
    			<TXID>115</TXID> 
    			<SRC>/wcoutput/part-r-00000</SRC>
                <MODE>493</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE>
            <DATA> 
    			<TXID>116</TXID> 
    			<SRC>/wcoutput</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD>
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE>
            <DATA> 
    			<TXID>117</TXID> 
    			<SRC>/wcoutput/_SUCCESS</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE>
            <DATA> 
    			<TXID>118</TXID> 
    			<SRC>/wcoutput/part-r-00000</SRC>
                <MODE>511</MODE> 
    		</DATA>
    	</RECORD> 
    	<RECORD>
            <OPCODE>OP_DELETE</OPCODE> 
    		<DATA> 
    			<TXID>119</TXID> 
    			<LENGTH>0</LENGTH> 
    			<PATH>/wcoutput/part-r-00000</PATH> 
    			<TIMESTAMP>1592377324171</TIMESTAMP> 
    			<RPC_CLIENTID></RPC_CLIENTID> 
    			<RPC_CALLID>-2</RPC_CALLID> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>120</TXID> 
    			<SRC>/</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>121</TXID> 
    			<SRC>/tmp</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>122</TXID> 
    			<SRC>/tmp/hadoop-yarn</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>123</TXID> 
    			<SRC>/tmp/hadoop-yarn/staging</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>124</TXID> 
    			<SRC>/tmp/hadoop-yarn/staging/history</SRC> 
    			<MODE>511</MODE> 
    		</DATA> 
    	</RECORD> 
    	<RECORD> 
    		<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    		<DATA> 
    			<TXID>125</TXID> 
    			<SRC>/tmp/hadoop-yarn/staging/history/done</SRC>
                <MODE>511</MODE> 
    		</DATA> 
    </RECORD>
    <RECORD> 
    	<OPCODE>OP_SET_PERMISSIONS</OPCODE> 
    	<DATA> 
    		<TXID>126</TXID> 
    		<SRC>/tmp/hadoop-yarn/staging/history/done/2020</SRC>
            <MODE>511</MODE> 
    	</DATA> 
    </RECORD> 
    <RECORD>
    

    備註:Edits中只記錄了更新相關的操作,查詢或者下載文件並不會記錄在內!!

    問題:NameNode啟動時如何確定載入哪些Edits文件呢?

    nn啟動時需要載入fsimage文件以及那些沒有被2nn進行合併的edits文件,nn如何判斷哪些edits已經被合併了呢?

    可以通過fsimage文件自身的編號來確定哪些已經被合併。

在這裡插入圖片描述

1.5.6.3 checkpoint周期

[hdfs-default.xml]

<!-- 定時一小時 --> 
<property> 
	<name>dfs.namenode.checkpoint.period</name> 
	<value>3600</value> 
</property> 

<!-- 一分鐘檢查一次操作次數,當操作次數達到1百萬時,SecondaryNameNode執行一次  --> 
<property> 
	<name>dfs.namenode.checkpoint.txns</name> 
	<value>1000000</value> 
	<description>操作動作次數</description> 
</property> 

<property> 
	<name>dfs.namenode.checkpoint.check.period</name> 
	<value>60</value> 
	<description>1分鐘檢查一次操作次數</description> 
</property>

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

-Advertisement-
Play Games
更多相關文章
  • add add 目的,源 ; 加法指令,結果放入目操作數,操作數的長度必須相同 adc adc 目的,源 ; 帶進位加法,目的=目的+源+CF and and 目的,源 ; 邏輯按位與 指令,結果放到目的操作數。 ; 影響標誌位OF、SF、ZF、PF和CF。 call call s ; 使call ...
  • //最近一個公司項目需要對接firebase推送,官方文檔就是謝特,再網上找了很多大神的資料,還是有很多坑,把自己踩的坑記錄一下,平時都是伸手黨,這次回饋一下 use Google\Client; /** * 註意需要準備vpn * 1.安裝sdk composer require google/a ...
  • SSM Spring IOC(控制反轉)& DI(依賴註入) IOC是容器,用來裝Spring創建的Bean對象。 Bean註入方式 Set方法註入 構造器註入 @Autowared自動註入 <!-- SpringBean的註入方式 --> <!-- 手動裝配 --> <!-- == set方法註入 ...
  • 使用go進行項目開發,大多數人會使用gorm,但是gorm有一些缺點,我無法接受。於是開發出了aorm,目前能有滿足日常開發需求,並且完善了使用文檔,希望能夠幫助到大家。 ...
  • WebApiClient 介面註冊與選項 1 配置文件中配置HttpApiOptions選項 配置示例 "IUserApi": { "HttpHost": "http://www.webappiclient.com/", "UseParameterPropertyValidate": false, ...
  • 分散式鎖的核心其實就是採用一個集中式的服務,然後多個應用節點進行搶占式鎖定來進行實現,今天介紹如何採用Redis作為基礎服務,實現一個分散式鎖的類庫,本方案不考慮 Redis 集群多節點問題,如果引入集群多節點問題,會導致解決成本大幅上升,因為 Redis 單節點就可以很容易的處理10萬併發量了,這 ...
  • 簡述 工業控制系統,簡稱工控系統,一般運行在工業生產環境中具有特定功能設備的作業系統,比如收銀系統、過磅稱重系統、無人零售系統等。根據需求不同,有單片機、PLC、Linux、Win7等不同的平臺實現方案,本文主要是針對Windows系統,如何技術選型開發工控系統。 工控控制系統與其他應用系統最大的區 ...
  • 《對話工程師》是「貿澤電子」贊助、「與非網」製作的一檔網路節目,自2022年11月起,邀請不同技術領域的資深工程師,聊聊開發過程中的經驗感悟,欄目共 10 期,痞子衡有幸被邀請做了第 4 期節目的嘉賓(12月5日在 「B站 - 與非網官方賬號」里剛播出第 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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...