Hadoop基礎-Hdfs各個組件的運行原理介紹

          Hadoop基礎-Hdfs各個組件的運行原理介紹

                                 作者:尹正杰

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

?

?

?

一.NameNode工作原理(默認端口號:50070)

1>.什么是NameNode

  NameNode管理文件系統的命名空間。它維護著文件系統樹及整棵樹內所有的文件和目錄。這些信息以兩個文件形式永久保存在本地磁盤上:命名空間鏡像文件和編輯日志文件。NameNode也記錄著每個文件中各個塊所在的數據節點信息,但它并不永久保存塊的位置信息,因為這些信息在系統啟動時由數據節點重建。

2>.Name啟動流程

?

?

NameNode職責:1>.負責客戶端請求的響應2>.元數據的管理(查詢,修改)NameNode對數據的管理采用了三種存儲形式:1>.內存元數據(NameSystem)2>.磁盤元數據鏡像文件3>.數據操作日志文件(可通過日志運算出元數據)元數據存儲機制:1>.內存中有一份完整的元數據(內存meta data)2>.磁盤有一個“準完整”的元數據鏡像(fsimage)文件(在namenode的工作目錄中)3>.用于銜接內存metadata和持久化元數據鏡像fsimage之間的操作日志(edits文件)NameNode啟動流程概述:1>.第一次啟動NameNode格式化后,創建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。2>.客戶端對元數據進行增刪改的請求3>.NameNode記錄操作日志,更新滾動日志。4>.namenode在內存中對數據進行增刪改查在NameNode端的工作流程如下:1>.Namenode始終在內存中保存metedata,用于處理“讀請求” 到有“寫請求”到來時,namenode會首先寫edits到磁盤,即向edits文件中寫日志,當客戶端操作成功后,相應的元數據會更新到內存matedata中,并且向客戶端返回.2>.Hadoop會維護一個fsimage文件,也就是namenode中metedata的鏡像,但是fsimage不會隨時與namenode內存中的metedata保持一致,而是每隔一段時間通過合并edits文件來更新內容。查看namenode版本號1>.在/home/yinzhengjie/data/hadoop/hdfs/ha/dfs/name1/current這個目錄下查看VERSION文件,[yinzhengjie@s101 ~]$ cat /home/yinzhengjie/data/hadoop/hdfs/ha/dfs/name1/current/VERSION #Mon Aug 13 14:45:15 EDT 2018namespaceID=1555352651clusterID=CID-58730c19-c019-4f4c-97f1-0eb80eab6071cTime=0storageType=NAME_NODEblockpoolID=BP-1140132172-172.30.1.101-1534178655035layoutVersion=-63[yinzhengjie@s101 ~]$ 2>.namenode版本號具體解釋2.1>.namespaceID在HDFS上,會有多個Namenode,所以不同Namenode的namespaceID是不同的,分別管理一組blockpoolID。2.2>.clusterID集群id,全局唯一2.3>.cTime屬性標記了namenode存儲系統的創建時間,對于剛剛格式化的存儲系統,這個屬性為0;但是在文件系統升級之后,該值會更新到新的時間戳。2.4>.storageType屬性說明該存儲目錄包含的是namenode的數據結構。2.5>.blockpoolID:一個block pool id標識一個block pool,并且是跨集群的全局唯一。當一個新的Namespace被創建的時候(format過程的一部分)會創建并持久化一個唯一ID。在創建過程構建全局唯一的BlockPoolID比人為的配置更可靠一些。NN將BlockPoolID持久化到磁盤中,在后續的啟動過程中,會再次load并使用。2.6>.layoutVersion是一個負整數。通常只有HDFS增加新特性時才會更新這個版本號。namenode的本地目錄可以配置成多個,且每個目錄存放內容相同,增加了可靠性。具體配置如下:[hdfs-site.xml]<property><name>dfs.namenode.name.dir</name><value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>                                        <--注意,這個值咱們也可以寫絕對路徑,我測試過好使!--></property>

3>.NameNode注意事項

  第一:如下圖所示,第一次啟動namenode格式化后,創建fsimage和edits文件

  第二:重啟hdfs分布式文件系統時,默認會自動滾動編輯日志,如下圖所示:

?  第三:如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存,如下圖所示:

?

?  想要了解更多關于鏡像文件和編輯日志信息,可參考:https://www.cnblogs.com/yinzhengjie/p/9098092.html。

?

二.SecondaryNameNode工作原理(默認端口號:50090)

1>.什么是SecondaryNameNode

  它是輔助namenode的進程,Secondary NameNode,為主namenode內存中的文件系統元數據創建檢查點,Secondary NameNode所做的不過是在文件系統中設置一個檢查點來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份。

2>.SecondaryNameNode有兩個作用

  2.1>.鏡像備份,即備份fsimage(fsimage是元數據發送檢查點時寫入文件);
  2.2>.日志與鏡像的定期合并。簡單的說是將Namenode中edits日志和fsimage合并,防止如果Namenode節點故障,namenode下次啟動的時候,會把fsimage加載到內存中,應用edits log,edits log往往很大,導致操作往往很耗時。(這也是namenode容錯的一套機制)
  以上兩個過程同時進行,稱為checkpoint(檢查點)。?

3>.NameNode+SecondaryNameNode的工作原理

第一階段:NameNode啟動1>.第一次啟動NameNode格式化后,創建fsimage和edits文件。如果不是第一次啟動,直接加載編輯日志和鏡像文件到內存。2>.客戶端對元數據進行增刪改的請求3>.NameNode記錄操作日志,更新滾動日志。4>.NameNode在內存中對數據進行增刪改查第二階段:Secondary NameNode工作1>.Secondary NameNode詢問NameNode是否需要checkpoint。直接帶回NameNode是否檢查結果。2>.Secondary NameNode請求執行checkpoint。3>.NameNode滾動正在寫的edits日志4>.將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode5>.Secondary NameNode加載編輯日志和鏡像文件到內存,并合并。6>.生成新的鏡像文件fsimage.chkpoint7>.拷貝fsimage.chkpoint到NameNode8>.NameNode將fsimage.chkpoint重新命名成fsimage

?  檢查點和編輯日志存放位置:

chkpoint檢查時間參數設置1>.通常情況下,SecondaryNameNode每隔一小時執行一次。[hdfs-default.xml]<property><name>dfs.namenode.checkpoint.period</name><value>3600</value></property>2>.一分鐘檢查一次操作次數,當操作次數達到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>SecondaryNameNode目錄結構Secondary NameNode用來監控HDFS狀態的輔助后臺程序,每隔一段時間獲取HDFS元數據的快照。在/home/yinzhengjie/hadoop-2.7.3/data/hdfs/dfs/namesecondary/current這個目錄中查看SecondaryNameNode目錄結構。edits_0000000000000000001-0000000000000000002fsimage_0000000000000000002fsimage_0000000000000000002.md5VERSIONSecondaryNameNode的namesecondary/current目錄和主namenode的current目錄的布局相同。好處:在主namenode發生故障時(假設沒有及時備份數據),可以從SecondaryNameNode恢復數據。方法一:將SecondaryNameNode中數據拷貝到namenode存儲數據的目錄;方法二:使用-importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數據拷貝到namenode目錄中。

?

?

三.DataNode工作原理

1>.什么是DataNode

  用大白話來說,NameNode用來存儲一些元數據信息的,而DataNode卻是用來存放真實數據的。

2>.DataNode的工作機制

?

?  如上圖所示,DataNode和NameNode的通信機制如下:

    1>.一個數據塊在datanode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
    2>.DataNode啟動后向namenode注冊,通過后,周期性(1小時)的向namenode上報所有的塊信息。
    3>.心跳是每3秒一次,心跳返回結果帶有namenode給該datanode的命令如復制塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個datanode的心跳,則認為該節點不可用。
  集群運行中可以安全加入和退出一些機器。這種專業術語叫做集群的服役和退役。關于如何服役和退役詳情請參考我之前分享的筆記:https://www.cnblogs.com/yinzhengjie/p/9101070.html

DataNode的校驗和是為了保證數據的完整性:1>.當DataNode讀取block的時候,它會計算checksum;2>.如果計算后的checksum,與block創建時值不一樣,說明block已經損壞;3>.client此時會讀取其他DataNode上的block;4>.datanode在其文件創建后周期驗證checksum;5>.不論數據是否發生改變,DataNode都會定期(默認是一小時)上報數據;掉線時限參數設置datanode進程死亡或者網絡故障造成datanode無法與namenode通信,namenode不會立即把該節點判定為死亡,要經過一段時間,這段時間暫稱作超時時長。HDFS默認的超時時長為10分鐘+30秒。如果定義超時時間為timeout,則超時時長的計算公式為:timeout  = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。而默認的dfs.namenode.heartbeat.recheck-interval 大小為5分鐘,dfs.heartbeat.interval默認為3秒。需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒。[hdfs-site.xml]<property><name>dfs.namenode.heartbeat.recheck-interval</name><value>300000</value></property><property><name> dfs.heartbeat.interval </name><value>3</value></property>datanode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本。具體配置如下:[hdfs-site.xml]<property><name>dfs.datanode.data.dir</name><value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value></property>

?

?

四.HDFS掃盲(跟你們小伙伴聊天別被他這些簡單問題問到了)

1>.請列出正常工作的Hadoop集群中Hadoop都分別需要啟動哪些進程,它們的作用分別是什么?

?

1>.NameNode它是hadoop中的主服務器,管理文件系統名稱空間和對集群中存儲的文件的訪問,保存有metadate。
2>.SecondaryNameNode它不是namenode的冗余守護進程,而是提供周期檢查點和清理任務。幫助NN合并editslog,減少NN啟動時間。
3>.DataNode它負責管理連接到節點的存儲(一個集群中可以有多個節點)。每個存儲數據的節點運行一個datanode守護進程。
4>.ResourceManager(JobTracker)JobTracker負責調度DataNode上的工作。每個DataNode有一個TaskTracker,它們執行實際工作。
5>.NodeManager(TaskTracker)執行任務。
6>.DFSZKFailoverController高可用時它負責監控NN的狀態,并及時的把狀態信息寫入ZK。它通過一個獨立線程周期性的調用NN上的一個特定接口來獲取NN的健康狀態。FC也有選擇誰作為Active NN的權利,因為最多只有兩個節點,目前選擇策略還比較簡單(先到先得,輪換)。
7>.JournalNode 高可用情況下存放namenode的editlog文件。

2>.

?

3>.

?

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

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

相關文章

JPA入門例子(采用JPA的hibernate實現版本)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 &#xff08;1&#xff09;、JPA介紹&#xff1a; JPA全稱為Java Persistence API &#xff0c;Java持久化API是Sun公司在Java EE 5規范…

IDEA詳細配置與使用

文章目錄一、IntelliJ IDEA 介紹二、查看安裝目錄結構三、查看設置目錄結構3.1 config目錄3.2 system目錄四、設置顯示常見的視圖1.工程界面展示2.如何刪除模塊3.查看項目配置五、常用配置1.Appearance & Behavior2. Editor - General3. Editor – Font4. Editor – Color …

M1905

11.09 11&#xff1a;00------102萬                          11.09 14:00---103萬 11.12 16:00------103萬                          11.19 16:00---94萬 11.20 16:00----94.9萬          …

前端又要失失失失失失失失失業了!

1. 禍起 看到標題&#xff0c;切圖仔們又是菊花一緊。前幾天微軟剛剛開源Sketch2Code&#xff0c;讓UI草圖轉化成HTML代碼。切圖仔瑟瑟發抖。 還沒等切圖仔調整好心情&#xff0c;號稱H5代碼生成工具的H5DS也開源了最新的代碼。 尼瑪&#xff0c;H5代碼都可以一鍵生成了&#x…

我是如何對研發和測試人員進行量化的績效考核的

我把硬件開發、軟件開發和測試人員的績效考核分成3部分&#xff0c;即重點工作、績效改進和績效浮動。下面分別進行說明它們的量化方法。1. 重點工作的績效量化方法重點工作的量化標準應從數量&#xff08;包括文檔&#xff09;、時間、質量和難度系數等多個維度來評定。…

常見cmd命令,開發人員必備

運行程序 notepad--------打開記事本calc-----------啟動計算器regedit.exe-------注冊表write----------寫字板mmc------------打開控制臺iexpress-------木馬捆綁工具&#xff0c;系統自帶fsmgmt.msc-----共享文件夾管理器osk------------打開屏幕鍵盤certmgr.msc----證書管理…

IDEA常用快捷鍵【win-mac對比】

文章目錄Mac 鍵盤符號說明CtrlAltShiftCtrl AltCtrl ShiftAlt ShiftCtrl Shift Alt其他Mac 鍵盤符號說明 ? Command? Shift? Caps Lock? Option? Control? Return/Enter? Delete? 向前刪除鍵&#xff08;FnDelete&#xff09;↑ 上箭頭↓ 下箭頭← 左…

SpringBoot 之環境搭建

見: http://bbs.itmayiedu.com/article/1491835651684 1. 什么是**SpringBoot&#xff1f;** Spring Boot 是由 Pivotal 團隊提供的全新框架&#xff0c;其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置&#xff0c;從而使開發人…

十五、類與封裝的概念

1、類的封裝 C中類的封裝&#xff1a; 成員變量&#xff1a;C中用于表示類屬性的變量成員函數&#xff1a;C中用于表示類行為的函數 C中可以給成員變量和成員函數定義訪問級別 public&#xff1a;成員變量和成員函數可以在類的內部和外界訪問和調用 private&#xff1a;成員變量…

哪些人不能要 哪些人不能留

以下所有的論斷都是基于中小型實業公司而言&#xff0c;因為我任職過的公司都是這個類型的。招聘時這些人不能要&#xff1a;1&#xff09;頻繁跳槽的人。這些人要么對工作不用心&#xff0c;要么對環境的適應能力差&#xff0c;要么不愿去分析公司的長處和短處&#xff0c;要么…

vue項目中axios的封裝

1.安裝 1 npm install axios --save 2.新建http.js&#xff0c;封裝攔截器以及多種請求方式 1 import axios from axios;2 import { Message } from element-ui;3 4 // 請求攔截器5 axios.interceptors.request.use( 6 config > {7 //發送請求前需要做什么&#xff0c…

【2022】Java基礎面試真題

文章目錄1. Java基礎1.1 為什么Java代碼可以實現一次編寫、到處運行&#xff1f;1.2 一個Java文件里可以有多個類嗎&#xff08;不含內部類&#xff09;&#xff1f;1.3 說一說你對Java訪問權限的了解1.4 介紹一下Java的數據類型1.5 int類型的數據范圍是多少&#xff1f;1.6 請…

關于 Virtual SAN/VSAN 的常見問題解答

問&#xff1a;VSAN需要使用 SSD&#xff0c;它有什么用途呢&#xff1f; 答&#xff1a;SSD 用于讀取緩存 (70%) 和寫入緩沖 (30%)。每次寫入都會先轉到 SSD&#xff0c;稍后再取消暫存到 HDD。 ? 問&#xff1a;創建 VSAN 虛擬機存儲策略時&#xff0c;何時應使用“允許的故…

IntelliJ IDEA 中 右鍵新建時,選項沒有Java class的解決方法和具體解釋

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我是在別人問我的時候&#xff0c;才發現還可以有這個問題&#xff0c;主要是他新項目直接打開&#xff0c;什么都沒配置&#xff0c;就打…

設計模式大集錦 程序員面試全攻略

摘要&#xff1a;無論你是參與Java面試還是C#面試&#xff0c;設計模式和軟件設計問題在程序員面試中是必不可少的一部分。編程和設計技兩者相得益彰&#xff0c;一名出色的程序員也是一名出色的設計師&#xff0c;他們懂得如何利用代碼來解決問題或者軟件設計&#xff0c;但是…

NOIP2018劃水記

Day -INF&#xff1a; 提前兩周左右停的課吧&#xff0c;每天過著正常的機房生活&#xff0c;每天充滿了歡樂。中間夾著籃球賽&#xff0c;qmcp大展神威&#xff08;%%%&#xff09;&#xff0c;MVP當之無愧&#xff0c;我跟著我們班一群菜雞劃水水出了季軍&#xff08;汗&…

多線程鎖,線程池,消費者生產者模型

鎖是怎么存在的? 在python建立之初,開發者目的是為了快速把語言開發出來,如果加上GIL(c語言加鎖),切換時按照100條字節指令來進行線程間的切換 為什么加鎖? 非線程安全,控制一段代碼 1.lock threading.BoundedSemaphore一次可以限制關卡,限制通行次數,不過這個是寫死的 1 im…

【2022】多線程并發編程面試真題

文章目錄4. 多線程4.1 創建線程有哪幾種方式&#xff1f;4.2 說說Thread類的常用方法4.3 run()和start()有什么區別&#xff1f;4.4 線程是否可以重復啟動&#xff0c;會有什么后果&#xff1f;4.5 介紹一下線程的生命周期4.6 如何實現線程同步&#xff1f;4.7 說一說Java多線程…

蘋果面試8大難題及答案

摘要&#xff1a;蘋果這樣的公司通常會在面試過程中向求職者拋出一些邏輯的問題來考研面試者&#xff0c;所以&#xff0c;如果你對進入蘋果感興趣&#xff0c;或者向往類似的公司&#xff0c;又或者只是對邏輯問題感興趣&#xff0c;這些面試難題值得你仔細研究。 導讀&#x…

idea自動導入jar包的快捷鍵

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 見&#xff1a;http://blog.csdn.net/u014771464/article/details/52330254 altenter&#xff08;光標緊跟在類的后面&#xff09;