hadoop的兩大核心之一node
海量數據的存儲(HDFS)linux
什麼是HDFS?安全
hadoop distributed file system(hadoop分佈式文件系統)服務器
是一種容許文件經過網絡在多臺主機上分享的文件系統,網絡
可以讓多機器上的多用戶分享文件和存儲空間.架構
特色:併發
1.通透性.讓其實是經過網絡來訪問文件的動做,由程序與用戶看來,分佈式
就像是訪問本地的磁盤通常.oop
2.容錯性.即便系統中有某些節點脫機,總體來講系統仍然能夠持續運做spa
而不會有數據損失.
適用場景:
適用於一次寫入屢次查詢的狀況,不支持併發寫狀況,小文件不合適.
HDFS的架構
主從結構
主節點,只有一個: namenode
從節點,有不少個: datanodes
namenode負責:
接收用戶操做請求
維護文件系統的目錄結構
管理文件與block之間關係,block與datanode之間關係
datanode負責:
存儲文件
文件被分紅block存儲在磁盤上
爲保證數據安全,文件會有多個副本
NameNode(能夠理解爲老大)
是整個文件系統的管理節點.它維護着整個文件系統的文件目錄樹,
文件/目錄的元信息和每一個文件對應的數據塊列表.接收用戶的操做請求.
文件包括(這三個都保存在linux的文件系統中):
fsimage:元數據鏡像文件,存儲某一時段NameNode內存元數據信息.
edits:操做日誌文件.
fstime:保存最近一次checkpoint的時間
工做特色:
1.Namenode始終在內存中保存metedata,用於處理"讀請求".
2.到有"寫請求"到來時,namenode會首先寫editlog到磁盤,
即向edits文件中寫日誌,成功返回後,纔會修改內存,而且向客戶端返回.
3.Hadoop會維護一個fsimage文件,也就是namenode中metedata的鏡像,
可是fsimage不會隨時與namenode內存中的metedata保持一致,
而是每隔一段時間經過合併edits文件來更新內容.Secondary namenode
就是用來合併fsimage和edits文件來更新NameNode的metedata的.
DataNode(能夠理解爲小弟)
提供真實文件數據的存儲服務.
最基本的存儲單位:block(文件塊),默認大小爲64M
Secondary NameNode(能夠理解爲老大的助理)
HA(High Available)的一個解決方案.但不支持熱備.配置便可
默認在安裝在NameNode節點上,但這樣...不安全!
(生產環境中,建議分開安裝)
執行過程:
從NameNode上下載元數據信息(fsimage,edits),而後把兩者合併,生成
新的fsimage,在本地保存,並將其推送到NameNode,替換舊的fsimage.
工做流程:
1.secondarynamenode通知namenode切換edits文件
2.secondarynamenode從namenode得到fsimage和edits(經過http)
3.secondarynamenode將fsimage載入內存,而後開始合併edits
4.secondarynamenode將新的fsimage發回給namenode
5.namenodenamenode用新的fsimage替換舊的fsimage
hadoop的整個體系結構就是構建在RPC之上的
RPC(Remote Procedure Call),(RPC採用客戶機/服務器模式)
遠程過程調用協議,它是一種經過網絡從遠程計算機程序上請求服務,
而不須要了解底層網絡技術的協議.
具體實現過程:
首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,
而後等待應答信息.在服務器端,進程保持睡眠狀態直到調用信息的到達爲止.
當一個調用信息到達,服務器得到進程參數,計算結果,發送答覆信息,
而後等待下一個調用信息,
最後,客戶端調用進程接收答覆信息,得到進程結果,而後調用執行繼續進行.
服務端提供的對象必須是一個接口,接口extends VersioinedProtocal
客戶端可以的對象中的方法必須位於對象的接口中.