分布式文件系統(tǒng)HDFS及其簡(jiǎn)單使用
在現(xiàn)代的企業(yè)環(huán)境中,單機(jī)容量往往無(wú)法存儲(chǔ)大量數(shù)據(jù),需要跨機(jī)器存儲(chǔ)。統(tǒng)一管理分布在集群上的文件系統(tǒng)稱為分布式文件系統(tǒng)。
HDFS
HDFS(Hadoop Distributed File System)是 Apache Hadoop 項(xiàng)目的一個(gè)子項(xiàng)目. Hadoop 非常適于存儲(chǔ)大型數(shù)據(jù) (比如 TB 和 PB), 其就是使用 HDFS 作為存儲(chǔ)系統(tǒng). HDFS 使用多臺(tái)計(jì)算機(jī)存儲(chǔ)文件, 并且提供統(tǒng)一的訪問(wèn)接口。
HDFS是根據(jù)谷歌的論文:《The Google File System》進(jìn)行設(shè)計(jì)的
HDFS的四個(gè)基本組件:HDFS Client、NameNode、DataNode和Secondary NameNode。
Client
Client是客戶端。HDFS Client文件切分。文件上傳 HDFS 的時(shí)候,Client 將文件切分成 一個(gè)一個(gè)的Block,然后進(jìn)行存儲(chǔ)。Client 提供一些命令來(lái)管理 和訪問(wèn)HDFS,比如啟動(dòng)或者關(guān)閉HDFS。
NameNode
NameNode就是 master,它是一個(gè)主管、管理者。管理 HDFS 元數(shù)據(jù)(文件路徑,文件的大小,文件的名字,文件權(quán)限,文件的block切片信息)。
NameNode管理 Block 副本策略:默認(rèn) 3 個(gè)副本,處理客戶端讀寫請(qǐng)求。
DataNode
DataNode就是Slave。NameNode下達(dá)命令,DataNode 執(zhí)行實(shí)際的操作。
DataNode存儲(chǔ)實(shí)際的數(shù)據(jù)塊,執(zhí)行數(shù)據(jù)塊的讀/寫操作。定時(shí)向namenode匯報(bào)block信息。
Secondary NameNode
SecondaryNameNode不是NameNode的備份。當(dāng)NameNode掛掉的時(shí)候,它并不能馬上替換NameNode并提供服務(wù)。
輔助 NameNode,分擔(dān)其工作量。在緊急情況下,可輔助恢復(fù) NameNode。
副本機(jī)制
HDFS被設(shè)計(jì)成能夠在一個(gè)大集群中跨機(jī)器可靠地存儲(chǔ)超大文件。它將每個(gè)文件存儲(chǔ)成一系列的數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊被稱為block,除了最后一個(gè),所有的數(shù)據(jù)塊都是同樣大小的。
為了容錯(cuò),文件的所有block都會(huì)有副本。每個(gè)文件的數(shù)據(jù)塊大小和副本系數(shù)都是可配置的。
在hadoop2 當(dāng)中, 文件的 block 塊大小默認(rèn)是 「128M」(134217728字節(jié))。
如上圖所示,一個(gè)大小為300M的a.txt上傳到HDFS中,需要進(jìn)行128M的切分,不足128M分為到另一block中。
HDFS基本命令
HDFS 簡(jiǎn)單使用
根據(jù)部署的服務(wù),我們的 HDFS 根目錄是 hdfs://192.168.147.128:9820,下面我們嘗試在根目錄下面創(chuàng)建子目錄 user,如下命令所示:
- [hadoop@node01 ~]$ hadoop fs -mkdir /user
然后在Hadoop頁(yè)面打開HDFS。
此時(shí)的user文件夾將會(huì)看見。
下面將一個(gè)大小為300M的文件上傳到HDFS的user文件夾中
然后在Hadoop頁(yè)面看見剛剛上傳的文件。
此時(shí)被分開了三個(gè)block。
點(diǎn)擊download,即可下載。