1 HDFS概述及設(shè)計(jì)目標(biāo)
1.1 什么是HDFS:
- Hadoop實(shí)現(xiàn)的一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System)缺脉,簡稱HDFS
- 源自于Google的GFS論文
- 論文發(fā)表于2003年幅聘,HDFS是GFS的克隆版
1.2 HDFS的設(shè)計(jì)目標(biāo):
- 非常巨大的分布式文件系統(tǒng)
- 運(yùn)行在普通廉價(jià)的硬件上
- 易擴(kuò)展担租、為用戶提供性能不錯(cuò)的文件存儲(chǔ)服務(wù)
HDFS官方文檔地址
2 HDFS架構(gòu)
HDFS是主/從式的架構(gòu)。一個(gè)HDFS集群會(huì)有一個(gè)NameNode(簡稱NN)秦陋,也就是命名節(jié)點(diǎn)桥胞,該節(jié)點(diǎn)作為主服務(wù)器存在(master server).
- NameNode用于管理文件系統(tǒng)的命名空間以及調(diào)節(jié)客戶訪問文件
- 此外,還會(huì)有多個(gè)DataNode(簡稱DN)榄审,也就是數(shù)據(jù)節(jié)點(diǎn)砌们,數(shù)據(jù)節(jié)點(diǎn)作為從節(jié)點(diǎn)存在(slave server)
- 通常每一個(gè)集群中的DataNode,都會(huì)被NameNode所管理搁进,DataNode用于存儲(chǔ)數(shù)據(jù)浪感。
HDFS公開了文件系統(tǒng)名稱空間眯漩,允許用戶將數(shù)據(jù)存儲(chǔ)在文件中擎值,就好比我們平時(shí)使用操作系統(tǒng)中的文件系統(tǒng)一樣,用戶無需關(guān)心底層是如何存儲(chǔ)數(shù)據(jù)的
而在底層在岂,一個(gè)文件會(huì)被分成一個(gè)或多個(gè)數(shù)據(jù)塊赢笨,這些數(shù)據(jù)庫塊會(huì)被存儲(chǔ)在一組數(shù)據(jù)節(jié)點(diǎn)中驮吱。在CDH中數(shù)據(jù)塊的默認(rèn)大小是128M,這個(gè)大小我們可以通過配置文件進(jìn)行調(diào)節(jié)
在NameNode上我們可以執(zhí)行文件系統(tǒng)的命名空間操作桐筏,如打開梅忌,關(guān)閉狰腌,重命名文件等。這也決定了數(shù)據(jù)塊到數(shù)據(jù)節(jié)點(diǎn)的映射牧氮。
我們可以來看看HDFS的架構(gòu)圖
HDFS被設(shè)計(jì)為可以運(yùn)行在普通的廉價(jià)機(jī)器上琼腔,而這些機(jī)器通常運(yùn)行著一個(gè)Linux操作系統(tǒng)。HDFS是使用Java語言編寫的踱葛,任何支持Java的機(jī)器都可以運(yùn)行HDFS
使用高度可移植的Java語言編寫的HDFS丹莲,意味著可以部署在廣泛的機(jī)器上
一個(gè)典型的HDFS集群部署會(huì)有一個(gè)專門的機(jī)器只能運(yùn)行NameNode
,而其他集群中的機(jī)器各自運(yùn)行一個(gè)DataNode
實(shí)例尸诽。雖然一臺(tái)機(jī)器上也可以運(yùn)行多個(gè)節(jié)點(diǎn)甥材,但是并不建議這么做,除非是學(xué)習(xí)環(huán)境性含。
總結(jié)
- HDFS是主/從式的架構(gòu)洲赵,一個(gè)HDFS集群會(huì)有一個(gè)NameNode以及多個(gè)DataNode
- 一個(gè)文件會(huì)被拆分為多個(gè)數(shù)據(jù)塊進(jìn)行存儲(chǔ),默認(rèn)數(shù)據(jù)塊大小是128M
- 即便一個(gè)數(shù)據(jù)塊大小為130M商蕴,也會(huì)被拆分為2個(gè)Block板鬓,一個(gè)大小為128M,一個(gè)大小為2M
- HDFS是使用Java編寫的究恤,使得其可以運(yùn)行在安裝了JDK的操作系統(tǒng)之上
NN
- 負(fù)責(zé)客戶端請求的響應(yīng)
- 負(fù)責(zé)元數(shù)據(jù)(文件的名稱俭令、副本系數(shù)抄腔、Block存放的DN)的管理
DN
- 存儲(chǔ)用戶的文件對(duì)應(yīng)的數(shù)據(jù)塊(Block)
- 會(huì)定期向NN發(fā)送心跳信息,匯報(bào)本身及其所有的block信息和健康狀況
3 HDFS副本機(jī)制
在HDFS中悟耘,一個(gè)文件會(huì)被拆分為一個(gè)或多個(gè)數(shù)據(jù)塊
默認(rèn)情況下,每個(gè)數(shù)據(jù)塊都會(huì)有三個(gè)副本
每個(gè)副本都會(huì)被存放在不同的機(jī)器上旺嬉,而且每一個(gè)副本都有自己唯一的編號(hào)
-
如下圖
4 HDFS 副本存放策略
NameNode節(jié)點(diǎn)選擇一個(gè)DataNode節(jié)點(diǎn)去存儲(chǔ)block副本得過程就叫做副本存放,這個(gè)過程的策略其實(shí)就是在可靠性和讀寫帶寬間得權(quán)衡迅涮。
《Hadoop權(quán)威指南》中的默認(rèn)方式:
- 第一個(gè)副本會(huì)隨機(jī)選擇叮姑,但是不會(huì)選擇存儲(chǔ)過滿的節(jié)點(diǎn)渣蜗。
- 第二個(gè)副本放在和第一個(gè)副本不同且隨機(jī)選擇的機(jī)架上讼昆。
- 第三個(gè)和第二個(gè)放在同一個(gè)機(jī)架上的不同節(jié)點(diǎn)上。
-
剩余的副本就完全隨機(jī)節(jié)點(diǎn)了
可以看出這個(gè)方案比較合理
- 可靠性:block存儲(chǔ)在兩個(gè)機(jī)架上
- 寫帶寬:寫操作僅僅穿過一個(gè)網(wǎng)絡(luò)交換機(jī)
- 讀操作:選擇其中得一個(gè)機(jī)架去讀
- block分布在整個(gè)集群上
5 HDFS偽分布式環(huán)境搭建
5.1 官方安裝文檔地址
5.2 環(huán)境參數(shù)
- Mac OS 10.14.4
- JDK1.8
- Hadoop 2.6.0-cdh5.7.0
- ssh
- rsync
5.3 安裝配置
下載Hadoop 2.6.0-cdh5.7.0
的tar.gz包并解壓:
MacOS安裝環(huán)境
設(shè)置 JAVA_HOME
- 添加java_home到.bash_profile文件中
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib
-
輸入命令ssh localhost运敢,可能遇到如下問題
-
原因是沒打開遠(yuǎn)程登錄,進(jìn)入系統(tǒng)設(shè)置->共享->遠(yuǎn)程登錄打開就好
這時(shí)你再ssh localhost一下
5.3 下載 Hadoop
tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz
-
解壓到doc目錄,解壓完后,進(jìn)入到解壓后的目錄下盼砍,可以看到hadoop的目錄結(jié)構(gòu)如下image
- bin目錄存放可執(zhí)行文件
- etc目錄存放配置文件
- sbin目錄下存放服務(wù)的啟動(dòng)命令
- share目錄下存放jar包與文檔
以上就算是把hadoop給安裝好了,接下來就是編輯配置文件,把JAVA_HOME配置一下
cd etc/
cd hadoop
vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8/ # 根據(jù)你的環(huán)境變量進(jìn)行修改
- 編輯 hadoop-env.sh 文件
export JAVA_HOME=${/usr/libexec/java_home}
由于我們要進(jìn)行的是單節(jié)點(diǎn)偽分布式環(huán)境的搭建,所以還需要配置兩個(gè)配置文件蜕猫,分別是core-site.xml以及hdfs-site.xml
Hadoop也可以在偽分布模式下的單節(jié)點(diǎn)上運(yùn)行,其中每個(gè)Hadoop守護(hù)進(jìn)程都在單獨(dú)的Java進(jìn)程中運(yùn)行
-
-
路徑
-
具體配置
-
配置 datanode 節(jié)點(diǎn)數(shù)
5.4 啟動(dòng) HDFS
5.4.1 在啟動(dòng)之前需要先格式化文件系統(tǒng)
$ bin/hdfs namenode -format
只有第一次啟動(dòng)才需要格式化
5.4.2 使用服務(wù)啟動(dòng)腳本啟動(dòng)服務(wù)
$ sbin/start-dfs.sh
-
檢查是否有以下幾個(gè)進(jìn)程蹬屹,如果少了一個(gè)都是不成功的
5.4.3 訪問http://localhost:50070/
表示HDFS已經(jīng)安裝成功
-
然后將Hadoop的安裝目錄配置到環(huán)境變量中弧腥,方便之后使用它的命令
-
關(guān)閉
如上虾攻,可以看到節(jié)點(diǎn)的信息。到此朋沮,我們偽分布式的hadoop集群就搭建完成了.
6 HDFS Shell
以上已經(jīng)介紹了如何搭建偽分布式的Hadoop樊拓,既然環(huán)境已經(jīng)搭建起來了,那要怎么去操作呢条篷?這就是本節(jié)將要介紹的內(nèi)容:
HDFS自帶有一些shell命令鸿染,通過這些命令我們可以去操作HDFS文件系統(tǒng)涨椒,這些命令與Linux的命令挺相似的,如果熟悉Linux的命令很容易就可以上手HDFS的命令
官網(wǎng)指南
先啟動(dòng) HDFS
創(chuàng)建文件夾
多層次文件夾
遍歷所有文件夾
刪除文件/文件夾
Java 操作 HDFS 開發(fā)環(huán)境搭建
JavaAPI 操作 HDFS文件系統(tǒng)
-
測試創(chuàng)建文件方法
-
查看 HDFS 文件的內(nèi)容
-
上傳文件到 HDFS
-
上傳文件到 HDFS(帶進(jìn)度條)
測試通過
-
下載文件到本地
測試通過
-
查看某個(gè)目錄下的所有文件
測試通過
-
刪除文件/文件夾