一、hdfs架構:主從結構
1、namenode : nn 名稱節點
a、檔案的名稱
b、檔案的目錄結構
c、檔案的屬性 許可權 副本數 建立時間
d、乙個檔案被對於切割哪些資料塊(包含副本數的塊)=》對應分布在哪些datanode blockmap塊對映 nn是不會持久這種對映關係的。是通過集群的啟動和執行,dn定期匯報blockreport給nn,然後在記憶體中動態維護這種對映關係。
作用:管理檔案系統的命名空間,維護檔案系統樹的檔案和資料夾
映象檔案 fisimage
編輯日誌檔案 editlogs
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 19:04 edits_0000000000000000511-0000000000000000512
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 20:04 edits_0000000000000000513-0000000000000000514
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 21:04 edits_0000000000000000515-0000000000000000516
-rw-rw-r-- 1 hadoop hadoop 1048576 nov 25 21:04 edits_inprogress_0000000000000000517
-rw-rw-r-- 1 hadoop hadoop 4230 nov 25 20:04 fsimage_0000000000000000514
-rw-rw-r-- 1 hadoop hadoop 62 nov 25 20:04 fsimage_0000000000000000514.md5
-rw-rw-r-- 1 hadoop hadoop 4230 nov 25 21:04 fsimage_0000000000000000516
-rw-rw-r-- 1 hadoop hadoop 62 nov 25 21:04 fsimage_0000000000000000516.md5
2、secondary namenode :snn 第二名稱節點
a、fsimage editlog 檔案拿過來合併 備份 推送給nn
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 19:04 edits_0000000000000000511-0000000000000000512
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 20:04 edits_0000000000000000513-0000000000000000514
-rw-rw-r-- 1 hadoop hadoop 42 nov 25 21:04 edits_0000000000000000515-0000000000000000516
-rw-rw-r-- 1 hadoop hadoop 4230 nov 25 20:04 fsimage_0000000000000000514
-rw-rw-r-- 1 hadoop hadoop 62 nov 25 20:04 fsimage_0000000000000000514.md5
-rw-rw-r-- 1 hadoop hadoop 4230 nov 25 21:04 fsimage_0000000000000000516
-rw-rw-r-- 1 hadoop hadoop 62 nov 25 21:04 fsimage_0000000000000000516.md5
-rw-rw-r-- 1 hadoop hadoop 200 nov 25 21:04 version
將namenode的fsimage_0000000000000000514
edits_0000000000000000515-0000000000000000516 ==》檢測點動作 checkpoint
合併 fsimage_0000000000000000516 將516推送給nn
而新的讀寫記錄則在 edits_inprogress_0000000000000000517編輯日誌裡
dfs.namenode.checkpoint.period
--兩次檢查點建立之間的固定時間間隔,預設3600,即1小時。所以去ann snn 看到的fsimage 相隔1個小時。
dfs.namenode.checkpoint.txns
--standby namenode 檢查的事務數量。若檢查事務數達到這個值,也觸發一次checkpoint,1,000,000。
以上兩個引數都是觸發snn checkpoint 的條件
dfs.namenode.checkpoint.check.period
--standby namenode檢查是否滿足建立checkpoint的條件的檢查週期。預設60,即每1min檢查一次。
dfs.namenode.num.checkpoints.retained
--在namenode上儲存的fsimage的數目,超出的會被刪除。預設儲存2個。
dfs.namenode.num.checkpoints.retained
--最多能儲存的edits檔案個數,預設為1,000,000. 為防止standby namenode宕機導致edits檔案堆積的情況,設定的限制。
dfs.ha.tail-edits.period
--standby namenode每隔多長時間去檢測新的edits檔案。只檢測完成了的edits, 不檢測inprogress的檔案。default:60s
早期為了解決nn是單點的,單點故障,增加乙個snn,1小時的checkpoint
雖然能夠減輕單點故障的帶來的資料丟失風險,但是生產上不允許使用snn
3、datanode:資料節點 dn
a、儲存資料塊 和資料塊的效驗
b、每隔一定世界去傳送blockreport
dfs.blockreport.intervalmsec 21600000=6h
dfs.datanode.directoryscan.interval 21600=6h
c、塊丟失案例
二、hdfs理論
1、讀寫流程
(1)hdfs client呼叫filesystem.create(filepath)方法,去和nn進行【rpc】通訊。nn會去check這個檔案是否存在,是否有許可權建立這個檔案。
假如都可以,就建立乙個新的檔案,但是這時沒有資料,是不關聯任何block的。nn根據檔案的大小,根據塊大小 副本數,計算要上傳多少的塊和對應哪些dn節點上。最終這個資訊返回給客戶端【fsdataoutputstream】物件。
(2)client 呼叫客戶端【fsdataoutputstream】物件的write方法,
根據【副本放置策略】,將第乙個塊的第乙個副本寫到dn1,寫完複製到dn2,寫完再複製到dn3.當第三個副本寫完,就返回乙個ack package確認包給dn2,dn2接收到ack 加上自己寫完,傳送ack給dn1,dn1接收到ack加上自己寫完,就傳送ack給客戶端【fsdataoutputstream】物件,告訴它第乙個塊三副本寫完了。
以此類推。
(3)當所有的塊全部寫完,client呼叫【fsdataoutputstream】物件的close方法,關閉輸出流。再次呼叫filesystem.complete方法 ,告訴nn檔案寫成功。
2、hdfs讀流程
(1)client呼叫filesystem的open(filepath),與nn進行【rpc】通訊,返回該檔案的部分或者全部的block列表,也就是返回【fsdataintputstream】物件
(2)client排程【fsdataintputstream】物件的read方法,與第乙個塊的最近的dn的進行讀取,讀取完成後,會check,假如ok就關閉與dn通訊。
假如不ok,就會記錄塊+dn的資訊,下次就不從這個節點讀取。那麼從第二個節點讀取。然後與第二個塊的最近的dn的進行讀取,以此類推。
假如當block的列表全部讀取完成,檔案還沒結束,就呼叫filesystem從nn獲取下一批次的block列表。
(3)client呼叫【fsdataintputstream】物件的close方法,關閉輸入流。
3.副本放置策略 不光光面試需要,生產也需要
生產上讀寫操作 盡量選擇dn節點操作
第乙個副本:
放置在上傳的dn節點上,就近原則,節省io
假如非dn節點,就隨機挑選乙個磁碟不太慢,cpu不太忙的節點。
第二個副本:
放置在第乙個副本的不同機架上的某個節點
第三個副本:
與第二個副本放置同乙個機架的不同節點上。
如果副本數設定更多,隨機放。
(8)hadoop學習 內部表和外部表
hive預設建表方式就是建立內部表。建外部表語句 create external table table exter id int,name string,age int,tel string row format delimited fields terminated by stored as t...
Hadoop學習筆記 8
倒排索引是文件檢索系統中最常用資料結構。根據單詞反過來查在文件中出現的頻率,而不是根據文件來,所以稱倒排索引 inverted index 結構如下 這張索引表中,每個單詞都對應著一系列的出現該單詞的文件,權表示該單詞在該文件中出現的次數。現在我們假定輸入的是以下的檔案清單 t1 hello wor...
Hadoop學習 02Hadoop執行環境搭建
新建虛擬機器 修改虛擬機器的靜態ip 修改主機名 關閉防火牆 systemctl stop firewalld.service 停止firewall systemctl disable firewalld.service 禁止firewall開機啟動建立hadoop 可自定義名字 使用者 usera...