HDFS

1. 概念


HDFS 全稱 Hadoop Distribute File System苦始,是?個(gè) 高可靠户盯、高吞吐的 分布式文件系統(tǒng)
HDFS 作為 Apache Hadoop 三大組件之一氧骤,功能面向海量數(shù)據(jù)存儲(chǔ)奈泪,其核心是 基于 塊機(jī)制副本機(jī)制數(shù)據(jù)存儲(chǔ)策略

  • 核心思想:分治
  • 存入原理:數(shù)據(jù)切割 --> 制作副本 --> 分散儲(chǔ)存
  • 讀取原理:獲取位置 --> 分別下載 --> 數(shù)據(jù)拼接

HDFS 適合 “一次寫入疾棵,多次讀出” 的場(chǎng)合戳稽,支持文件的追加寫入馆蠕,不支持文件的隨意修改
因此,HDFS 適合為 大數(shù)據(jù)分析 提供 底層存儲(chǔ)服務(wù)惊奇,而不是適合用來做“網(wǎng)盤”(修改數(shù)據(jù)不方便互躬、延遲大,網(wǎng)絡(luò)開銷大颂郎,成本過高)
若要實(shí)現(xiàn)海量數(shù)據(jù)的快速訪問和隨機(jī)讀寫吼渡,應(yīng)考慮使用 HBase


1.1 block 塊機(jī)制

從物理層面講,數(shù)據(jù)在 HDFS 上是分塊(block)存儲(chǔ)的乓序,塊的大小可以通過參數(shù)進(jìn)行配置
在 Hadoop 2.x 版本中寺酪,默認(rèn)的 block 大小是 128MB;


1.2 副本機(jī)制

HDFS 為所有文件的所有 block 都存儲(chǔ)了副本替劈,以實(shí)現(xiàn)高可靠性和高容錯(cuò)
除 block 的大小之外寄雀,block 的副本個(gè)數(shù)(也稱副本系數(shù))也可以通過參數(shù)配置
副本系數(shù)可以在創(chuàng)建文件前指定,也支持后續(xù)修改
HDFS 默認(rèn)的 block 副本系數(shù)為 3 個(gè)


1.3 Master / Slave 架構(gòu)

HDFS 是典型的 Master / Slave 主從節(jié)點(diǎn)結(jié)構(gòu)
一般是由一個(gè)NameNode作為集群主節(jié)點(diǎn)陨献,多個(gè)DataNode作為集群從節(jié)點(diǎn)


1.4 NameSpace 命名空間

HDFS 支持傳統(tǒng)目錄式的層次型文件組織結(jié)構(gòu)盒犹,用戶和程序可以對(duì)目錄和文件進(jìn)行 創(chuàng)建、刪除湿故、移動(dòng)阿趁、重命名 等操作
NameNode 負(fù)責(zé)維護(hù)文件系統(tǒng)的命名空間,記錄任何對(duì)文件系統(tǒng)命名空間(或?qū)傩裕┑男薷?br> HDFS 提供抽象目錄樹以供訪問坛猪,訪問形式為 hdfs:// NameNode 所在節(jié)點(diǎn)的主機(jī)名(hostname) : 端口(port) / 目標(biāo)目錄
例如:hdfs://linux111:9000/path//target


2. 結(jié)構(gòu)


NN脖阵,2NN,DN 即是角色名稱墅茉、進(jìn)程名稱命黔,同時(shí)也代指電腦節(jié)點(diǎn)名稱

  • NameNode(NN)
    身份:HDFS 集群的管理者,Master 節(jié)點(diǎn)
    職責(zé):
    ? 1. 處理客戶端讀寫請(qǐng)求
    ? 2. 存儲(chǔ)與維護(hù) HDFS 元數(shù)據(jù)
    ? ?1)維護(hù) 命名空間:記錄 目錄結(jié)構(gòu)就斤、文件屬性(生成時(shí)間悍募、block 數(shù)、權(quán)限)
    ? ?2)維護(hù) 副本策略:記錄 各個(gè)文件 block 的副本數(shù)
    ? ?3)維護(hù) 映射關(guān)系:記錄 文件的塊信息(尤其是 block 與 DataNode 的映射信息)
  • SecondaryNameNode(2NN)
    身份:HDFS 集群的觀察者洋机,NameNode 的輔助者
    職責(zé):
    ? 1. 監(jiān)控 HDFS 狀態(tài)
    ? 2. 周期性存儲(chǔ)元數(shù)據(jù)快照

  • DataNode(DN)
    身份:HDFS 集群的工作者坠宴,副本的存儲(chǔ)者,數(shù)據(jù)的操作者绷旗,Slave 節(jié)點(diǎn)
    職責(zé):
    ? 1. 存儲(chǔ) block -- 多個(gè)副本由不同的 DataNode 存儲(chǔ)
    ? 2. 讀寫 block
    ? 3. 校驗(yàn) package
    ? 4. 匯報(bào)塊信息 -- 定時(shí)向 NameNode 匯報(bào)自己存儲(chǔ)的 block 信息

  • Client
    身份:客戶端
    職責(zé):
    ? 1. 設(shè)置時(shí):發(fā)送指令 -- 通過指令對(duì) HDFS 進(jìn)行設(shè)置與管理
    ? 2. 上傳時(shí):切割文件 -- 上傳文件時(shí)將其切割成若干個(gè) block
    ? 3. 下載時(shí):拼接文件 -- 將分散下載的各個(gè) block 拼接完整
    ? ?1)尋址:與 NameNode 交互喜鼓,獲取文件位置信息
    ? ?2)下載:與 DataNode 交互副砍,讀取 block


3. 命令


3.1 Shell 命令行指令

格式:bin/hadoop fs 或者 bin/hdfs dfs + 具體命令(一般推薦使用后者)
在 Shell 命令行中輸入 hdfs dfs 可以查看所有的 HDFS 指令

HDFS 常用的命令行指令有:

  1. -help:輸出此命令的參數(shù)
    [root@linux121 hadoop-2.9.2]# hdfs dfs -help rm

  2. -mkdir:在 HDFS 上創(chuàng)建目錄
    [root@linux121 hadoop-2.9.2]# hdfs dfs -mkdir -p /dir/subdir

  3. -rmdir:刪除空目錄
    [root@linux121 hadoop-2.9.2]# hdfs dfs -mkdir /test
    [root@linux121 hadoop-2.9.2]# hdfs dfs -rmdir /test

  4. -ls:顯示目錄信息
    [root@linux121 hadoop-2.9.2]# hdfs dfs -ls /

  5. -cp:在 HDFS 上拷貝文件
    [root@linux121 hadoop-2.9.2]# hdfs dfs -cp /dir/subdir/hadoop.txt /hdfs.txt

  6. -mv:在 HDFS 上移動(dòng)文件
    [root@linux121 hadoop-2.9.2]# hdfs dfs -mv /dir/subdir/hadoop.txt /dir

  7. -cat:顯示文件內(nèi)容
    [root@linux121 hadoop-2.9.2]# hdfs dfs -cat /dir/subdir/hadoop.txt

  8. -appendToFile:追加?個(gè)文件到已經(jīng)存在的文件末尾
    [root@linux121 hadoop-2.9.2]# hdfs dfs -appendToFile hdfs.txt /dir/subdir/hadoop.txt

  9. -tail:顯示文件末尾內(nèi)容
    [root@linux121 hadoop-2.9.2]# hdfs dfs -tail /user/root/test/yarn.txt

  10. -rm:刪除文件或文件夾
    [root@linux121 hadoop-2.9.2]# hdfs dfs -rm /user/root/test/yarn.txt

  11. -chgrp 、-chmod庄岖、-chown:修改文件權(quán)限(與Linux文件系統(tǒng)用法一致)
    [root@linux121 hadoop-2.9.2]# hdfs dfs -chmod 666 /dir/subdir/hadoop.txt
    [root@linux121 hadoop-2.9.2]# hdfs dfs -chown root:root /dir/subdir/hadoop.txt

  12. -du:統(tǒng)計(jì)文件夾的大小信息
    [root@linux121 hadoop-2.9.2]# hdfs dfs -du -s -h /user/root/test

  13. -moveFromLocal:從本地剪切粘貼到 HDFS
    [root@linux121 hadoop-2.9.2]# hdfs dfs -moveFromLocal ./local/localfile.txt /dir/subdir/

  14. -moveToLocal:從 HDFS 剪切粘貼到本地
    [root@linux121 hadoop-2.9.2]# hdfs dfs -moveToLocal /dir/subdir/hdfs.txt ./local/

  15. -copyFromLocal:從本地文件系統(tǒng)拷貝文件到 HDFS
    [root@linux121 hadoop-2.9.2]# hdfs dfs -copyFromLocal ./local/localfile2.txt /dir/subdir/

  16. -copyToLocal:從 HDFS 拷貝文件到本地
    [root@linux121 hadoop-2.9.2]# hdfs dfs -copyToLocal /dir/subdir/hdfs2.txt ./local/

  17. -put:等同于 copyFromLocal
    [root@linux121 hadoop-2.9.2]# hdfs dfs -put ./local/localfile3.txt /dir/subdir/

  18. -get:等同于 copyToLocal
    [root@linux121 hadoop-2.9.2]# hdfs dfs -get /dir/subdir/hdfs3.txt ./local/

  19. -setrep:設(shè)置 HDFS 文件的副本系數(shù)
    [root@linux121 hadoop-2.9.2]# hdfs dfs -setrep 10 /dir/subdir/hadoop.txt
    這里需要注意的是:副本系數(shù) > DataNode 節(jié)點(diǎn)數(shù)是無意義的豁翎,因?yàn)槎鄠€(gè)副本在同一個(gè) DataNode 節(jié)點(diǎn)上是無意義的


3.2 Java API

=== 待續(xù) ===


4. 讀寫原理


4.1 HDFS 讀數(shù)據(jù)流程

假設(shè):客戶端 Client-121 想要下載 HDFS 上的文件 hdfs.txt
該文件大小為 300M,有3個(gè) block(300M ÷ 128M = 2)隅忿,分別為 blk_1心剥、blk_2、blk_3
每個(gè) block 有3個(gè) replication: rep_1背桐、rep_2优烧、rep_3,分別存在 DN-121牢撼、DN-122匙隔、DN-123 上

數(shù)據(jù)讀取流程

  1. Client-121 通過 DistributedFileSystem 向 NameNode 請(qǐng)求下載 hdfs.txt 的 blk_1

  2. NN 查詢?cè)獢?shù)據(jù)中的 block-DN 映射關(guān)系疑苫,找到所有存放了 blk_1 副本的 DataNode(這里為3個(gè))

  3. NN 根據(jù)就近原則熏版,挑出與 Client-121 距離最近的 DN-121,將其地址返回給 Client-121
    注意:就近原則是為了盡可能減小數(shù)據(jù)傳輸成本捍掺,如果 DN-121 宕機(jī)了撼短,NN 會(huì)隨機(jī)從 DN-122 和 DN-123 中挑選一個(gè)返回給 Client

  4. Client-121 通過 FSDataInputStream 向 DN-121 發(fā)送請(qǐng)求,申請(qǐng)讀取 rep_1

  5. DN-121 從磁盤讀取數(shù)據(jù)輸入流挺勿,傳輸數(shù)據(jù)給 Client-121
    DataNode 的核心功能:維護(hù) 磁盤與客戶端 之間以 Package 為單位的數(shù)據(jù)傳輸流
    維護(hù)方法:傳輸校驗(yàn)曲横,每傳輸完一個(gè) Package 進(jìn)行一次,從而監(jiān)控傳輸狀態(tài)
    Package 的默認(rèn)大小為 64KB

  6. Client-121 以 Package 為單位接收數(shù)據(jù)不瓶,先寫入本地緩存禾嫉,再寫入本地目標(biāo)文件


4.2 HDFS 寫數(shù)據(jù)流程
  1. 客戶端將向 NN 請(qǐng)求寫入整個(gè)文件
  2. NN 判斷:父目錄是否存在 ?(文件是否已經(jīng)存在 蚊丐?不可寫:可寫) :不可寫
  3. 拿到 NN 的可寫響應(yīng)后熙参,客戶端將文件切割成 block,再次向 NN 請(qǐng)求寫入單個(gè) blk_1麦备,詢問 blk_1 寫入哪幾個(gè) DN
  4. 拿到 DN 地址隊(duì)列后孽椰,Client 通過 FSOutputStream 向隊(duì)首的 DN-1 發(fā)送請(qǐng)求,申請(qǐng)寫入 blk_1
  5. DN-1 出隊(duì)后繼續(xù)調(diào)用隊(duì)首的 DN-2凛篙,DN-2 繼續(xù)調(diào)用 DN-3 ... 直至整個(gè)通道打通(隊(duì)列為空)
  6. DN-1黍匾、DN-2、DN-3 逐級(jí)向客戶端返回響應(yīng)呛梆,表明自己處于就緒狀態(tài)
  7. Client 確定所有 DN 都就緒之后锐涯,以 Pakage 為單位向 DN-1 傳輸 blk_1
  8. DN-1 接收到 Package 后將其傳給下一個(gè) DN,DN-1上維護(hù)一個(gè)確認(rèn)隊(duì)列填物,每傳出一個(gè) Pakage 就將其入隊(duì)
  9. 當(dāng)一個(gè) Package 在所有 DN 上都傳輸完畢后纹腌,DN-1 上的確認(rèn)隊(duì)列將該 Package 出隊(duì)
  10. Client 監(jiān)控 DN-1 的確認(rèn)隊(duì)列秀仲,當(dāng)隊(duì)列為空時(shí)說明 blk_1 傳輸完畢
  11. 重復(fù)第 3-10 步,繼續(xù)上傳 blk_2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壶笼,一起剝皮案震驚了整個(gè)濱河市神僵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌覆劈,老刑警劉巖保礼,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異责语,居然都是意外死亡炮障,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門坤候,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胁赢,“玉大人,你說我怎么就攤上這事白筹≈悄” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵徒河,是天一觀的道長(zhǎng)系馆。 經(jīng)常有香客問我,道長(zhǎng)顽照,這世上最難降的妖魔是什么由蘑? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮代兵,結(jié)果婚禮上尼酿,老公的妹妹穿的比我還像新娘。我一直安慰自己植影,他們只是感情好裳擎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著何乎,像睡著了一般句惯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上支救,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天抢野,我揣著相機(jī)與錄音,去河邊找鬼各墨。 笑死指孤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恃轩,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼结洼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了叉跛?” 一聲冷哼從身側(cè)響起松忍,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筷厘,沒想到半個(gè)月后鸣峭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酥艳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年摊溶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片充石。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莫换,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骤铃,到底是詐尸還是另有隱情拉岁,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布劲厌,位于F島的核電站膛薛,受9級(jí)特大地震影響听隐,放射性物質(zhì)發(fā)生泄漏补鼻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一雅任、第九天 我趴在偏房一處隱蔽的房頂上張望风范。 院中可真熱鬧,春花似錦沪么、人聲如沸硼婿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寇漫。三九已至,卻和暖如春殉摔,著一層夾襖步出監(jiān)牢的瞬間州胳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工逸月, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栓撞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓤湘,于是被迫代替她去往敵國和親瓢颅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 寫在前面 我自己一直比較喜歡大數(shù)據(jù)這個(gè)方向的工作弛说,雖然自己也在大數(shù)據(jù)相關(guān)的崗位上工作了小兩年挽懦,但一直沒有系統(tǒng)的學(xué)習(xí)...
    大數(shù)據(jù)學(xué)習(xí)寶典閱讀 506評(píng)論 0 2
  • HDFS重要概念 典型的Master/Slave架構(gòu)HDFS往往是由一個(gè)NameNode(HA架構(gòu)會(huì)有兩個(gè)Name...
    奮斗的蛐蛐閱讀 944評(píng)論 0 2
  • 各版本hadoop文檔地址 Hadoop的框架最核心的設(shè)計(jì)就是:HDFS(Hadoop Distributed F...
    MicoCube閱讀 987評(píng)論 0 2
  • 產(chǎn)生背景 隨著數(shù)據(jù)量越來越大,在一個(gè)操作系統(tǒng)存不下所有的數(shù)據(jù)木人,那么就分配到更多的操作系統(tǒng)管理的磁盤中巾兆,但是不方便管...
    tracy_668閱讀 615評(píng)論 0 12
  • HDFS入門 1.1.HDFS介紹 HDFS是Hadoop Distribute File System 的簡(jiǎn)稱,...
    VincentLeon閱讀 235評(píng)論 0 0