【Hadoop】HDFS的執行原理
來自:http://www.cnblogs.com/laov/p/3434917.html
簡介
HDFS(Hadoop Distributed File System )Hadoop分散式檔案系統。是根據google發表的論文翻版的。論文為GFS(Google File System)Google 檔案系統(中文,英文)。
HDFS有很多特點:
① 儲存多個副本,且提供容錯機制,副本丟失或當機自動恢復。預設存3份。
② 執行在廉價的機器上。
③ 適合大資料的處理。多大?多小?HDFS預設會將檔案分割成block,64M為1個block。然後將block按鍵值對儲存在HDFS上,並將鍵值對的對映存到記憶體中。如果小檔案太多,那記憶體的負擔會很重。
如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。
NameNode:是Master節點,是大領導。管理資料塊對映;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量;是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。
DataNode:Slave節點,奴隸,幹活的。負責儲存client發來的資料塊block;執行資料塊的讀寫操作。
熱備份:b是a的熱備份,如果a壞掉。那麼b馬上執行代替a的工作。
冷備份:b是a的冷備份,如果a壞掉。那麼b不能馬上代替a工作。但是b上儲存a的一些資訊,減少a壞掉之後的損失。
fsimage:後設資料映象檔案(檔案系統的目錄樹。)
edits:後設資料的操作日誌(針對檔案系統做的修改操作記錄)
namenode記憶體中儲存的是=fsimage+edits。
SecondaryNameNode負責定時預設1小時,從namenode上,獲取fsimage和edits來進行合併,然後再傳送給namenode。減少namenode的工作量。
工作原理
寫操作:
有一個檔案FileA,100M大小。Client將FileA寫入到HDFS上。
HDFS按預設配置。
HDFS分佈在三個機架上Rack1,Rack2,Rack3。
a. Client將FileA按64M分塊。分成兩塊,block1和Block2;
b. Client向nameNode傳送寫資料請求,如圖藍色虛線①------>。
c. NameNode節點,記錄block資訊。並返回可用的DataNode,如粉色虛線②--------->。
Block1: host2,host1,host3
Block2: host7,host8,host4
原理:
NameNode具有RackAware機架感知功能,這個可以配置。
若client為DataNode節點,那儲存block時,規則為:副本1,同client的節點上;副本2,不同機架節點上;副本3,同第二個副本機架的另一個節點上;其他副本隨機挑選。
若client不為DataNode節點,那儲存block時,規則為:副本1,隨機選擇一個節點上;副本2,不同副本1,機架上;副本3,同副本2相同的另一個節點上;其他副本隨機挑選。
d. client向DataNode傳送block1;傳送過程是以流式寫入。
流式寫入過程,
1>將64M的block1按64k的package劃分;
2>然後將第一個package傳送給host2;
3>host2接收完後,將第一個package傳送給host1,同時client想host2傳送第二個package;
4>host1接收完第一個package後,傳送給host3,同時接收host2發來的第二個package。
5>以此類推,如圖紅線實線所示,直到將block1傳送完畢。
6>host2,host1,host3向NameNode,host2向Client傳送通知,說“訊息傳送完了”。如圖粉紅顏色實線所示。
7>client收到host2發來的訊息後,向namenode傳送訊息,說我寫完了。這樣就真完成了。如圖黃色粗實線
8>傳送完block1後,再向host7,host8,host4傳送block2,如圖藍色實線所示。
9>傳送完block2後,host7,host8,host4向NameNode,host7向Client傳送通知,如圖淺綠色實線所示。
10>client向NameNode傳送訊息,說我寫完了,如圖黃色粗實線。。。這樣就完畢了。
分析,通過寫過程,我們可以瞭解到:
①寫1T檔案,我們需要3T的儲存,3T的網路流量貸款。
②在執行讀或寫的過程中,NameNode和DataNode通過HeartBeat進行儲存通訊,確定DataNode活著。如果發現DataNode死掉了,就將死掉的DataNode上的資料,放到其他節點去。讀取時,要讀其他節點去。
③掛掉一個節點,沒關係,還有其他節點可以備份;甚至,掛掉某一個機架,也沒關係;其他機架上,也有備份。
讀操作:
讀操作就簡單一些了,如圖所示,client要從datanode上,讀取FileA。而FileA由block1和block2組成。
那麼,讀操作流程為:
a. client向namenode傳送讀請求。
b. namenode檢視Metadata資訊,返回fileA的block的位置。
block1:host2,host1,host3
block2:host7,host8,host4
c. block的位置是有先後順序的,先讀block1,再讀block2。而且block1去host2上讀取;然後block2,去host7上讀取;
上面例子中,client位於機架外,那麼如果client位於機架內某個DataNode上,例如,client是host6。那麼讀取的時候,遵循的規律是:
優選讀取本機架上的資料。
HDFS中常用到的命令
1、hadoop fs
2、hadoop fsadmin
3、hadoop fsck
4、start-balancer.sh
相關文章
- Hadoop原理之——HDFS原理Hadoop
- Hadoop–HDFSHadoop
- Hadoop HDFS(一)Hadoop
- Hadoop HDFS(二)Hadoop
- Hadoop框架:Yarn基本結構和執行原理Hadoop框架Yarn
- HDFS 命令:用於管理HDFS的Hadoop Shell命令大全Hadoop
- Hadoop的HDFS架構入門Hadoop架構
- 【HDFS】HADOOP DISTRIBUTED FILE SYSTEMHadoop
- Hadoop(十)HDFS API操作HadoopAPI
- hadoop的mapreduce串聯執行Hadoop
- hadoop學習-HDFS的詳細概述Hadoop
- Hadoop HDFS 設計隨想Hadoop
- hadoop hdfs 常用命令Hadoop
- Hadoop KMS配置(HDFS透明加密)Hadoop加密
- Hadoop面試題之HDFSHadoop面試題
- Hadoop學習筆記—HDFSHadoop筆記
- hadoop-HDFS優缺點Hadoop
- Hadoop-叢集執行Hadoop
- Hadoop學習之路(十)HDFS API的使用HadoopAPI
- hadoop(二)—hadoop配置、執行錯誤總結Hadoop
- 在 Ubuntu 22 的基礎上進行 Hadoop 偽分散式(HDFS)的搭建UbuntuHadoop分散式
- Spark的執行原理Spark
- Hadoop hdfs完全分散式搭建教程Hadoop分散式
- hadoop之上傳資料到hdfs模式Hadoop模式
- Hadoop 基礎之 HDFS 入門Hadoop
- Hadoop系列之HDFS 資料塊Hadoop
- 建立HDFS,匯入HADOOP jar包HadoopJAR
- root加到hadoop的hdfs使用者組內Hadoop
- (一)hadoop叢集搭建——1.4hdfs的操作Hadoop
- 搭建本地執行Hadoop環境Hadoop
- HDFS2.0原理
- [Spring]MyBatis的執行原理SpringMyBatis
- kill 指令的執行原理
- Hadoop學習之路(六)HDFS基礎Hadoop
- Hadoop配置hdfs-site.xml詳解HadoopXML
- Hadoop框架:HDFS高可用環境配置Hadoop框架
- Hadoop官網翻譯之HDFS ArchitectureHadoop
- Hadoop 入門筆記—核心元件 HDFSHadoop筆記元件
- Hadoop技術內幕:深入解析Hadoop和HDFS 1.3準備 Hadoop 原始碼Hadoop原始碼