Hadoop之HDFS

第1章 HDFS概述

1.1 HDFS定義

HDFS(Hadoop distributed System),它是一個文件系統(tǒng),用于存文件枣接,通過目錄樹定義文件;其次他是分布式的缺谴,有很多服務(wù)器聯(lián)合起來實現(xiàn)功能但惶,集群中的服務(wù)器有各自的目的。

HDFS的使用場景:適合一次寫入湿蛔,多次讀出的場景膀曾,且不支持文件的修改。適合做數(shù)據(jù)分析


  • 1.2 HDFS優(yōu)缺點
    • 1.2.1 優(yōu)點:
      • 1)高容錯
      • 2)適合處理大數(shù)據(jù)
      • 3)可構(gòu)建在廉價機器上
    • 1.2.2 缺點:
      • 1)不合適低延時數(shù)據(jù)訪問
      • 2)無法高效的對大量小文件進行存儲
      • 3)僅支持?jǐn)?shù)據(jù)append 阳啥,不支持文件隨機修改
  • 1.3 HDFS組成架構(gòu)

    • 1)NameNode:就是Master
    • 2)DateNode:就是Slave
    • 3)Client:客戶端
    • 4)Secondary NameNode:協(xié)助NameNode,定期合Fsimage和Edits
  • 1.4 HDFS文件塊大小

    • 塊存儲老版本68M新版128M
    • 思考 :不能存太大也不能存太小
    • 太小:會增加添谊,尋址時間
    • 太大:會增加處理數(shù)據(jù)時間
    • 總結(jié):HDFS塊的大小設(shè)置取決于磁盤傳輸速率

第2章 HDFS的Shell操作

1.基本語法
bin/hadoop fs 具體命令 OR bin/hdfs dfs 具體命令
dfs是fs的實現(xiàn)類。
2.常用命令實操

(0)啟動Hadoop集群(方便后續(xù)的測試)
[atguigu@hadoop102 hadoop-2.7.2]\$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]\$ sbin/start-yarn.sh
(1)-help:輸出這個命令參數(shù)
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -help rm
(2)-ls: 顯示目錄信息
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -ls /
(3)-mkdir:在HDFS上創(chuàng)建目錄
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -mkdir -p /sanguo/shuguo
(4)-moveFromLocal:從本地剪切粘貼到HDFS
[atguigu@hadoop102 hadoop-2.7.2]\$ touch kongming.txt
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs  -moveFromLocal  ./kongming.txt  /sanguo/shuguo
(5)-appendToFile:追加一個文件到已經(jīng)存在的文件末尾
[atguigu@hadoop102 hadoop-2.7.2]\$ touch liubei.txt
[atguigu@hadoop102 hadoop-2.7.2]\$ vi liubei.txt
輸入
san gu mao lu
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo/kongming.txt
(6)-cat:顯示文件內(nèi)容
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -cat /sanguo/shuguo/kongming.txt
(7)-chgrp 察迟、-chmod斩狱、-chown:Linux文件系統(tǒng)中的用法一樣耳高,修改文件所屬權(quán)限
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs  -chmod  666  /sanguo/shuguo/kongming.txt
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs  -chown  atguigu:atguigu   /sanguo/shuguo/kongming.txt
(8)-copyFromLocal:從本地文件系統(tǒng)中拷貝文件到HDFS路徑去
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -copyFromLocal README.txt /
(9)-copyToLocal:從HDFS拷貝到本地
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -copyToLocal /sanguo/shuguo/kongming.txt ./
(10)-cp :從HDFS的一個路徑拷貝到HDFS的另一個路徑
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -cp /sanguo/shuguo/kongming.txt /zhuge.txt
(11)-mv:在HDFS目錄中移動文件
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -mv /zhuge.txt /sanguo/shuguo/
(12)-get:等同于copyToLocal,就是從HDFS下載文件到本地
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -get /sanguo/shuguo/kongming.txt ./
(13)-getmerge:合并下載多個文件所踊,比如HDFS的目錄 /user/atguigu/test下有多個文件:log.1, log.2,log.3,...
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -getmerge /user/atguigu/test/* ./zaiyiqi.txt
(14)-put:等同于copyFromLocal
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -put ./zaiyiqi.txt /user/atguigu/test/
(15)-tail:顯示一個文件的末尾
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -tail /sanguo/shuguo/kongming.txt
(16)-rm:刪除文件或文件夾
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -rm /user/atguigu/test/jinlian2.txt
(17)-rmdir:刪除空目錄
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -mkdir /test
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -rmdir /test
(18)-du統(tǒng)計文件夾的大小信息
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -du -s -h /user/atguigu/test
2.7 K  /user/atguigu/test
[atguigu@hadoop102 hadoop-2.7.2]\$ hadoop fs -du  -h /user/atguigu/test
1.3 K  /user/atguigu/test/README.txt
15     /user/atguigu/test/jinlian.txt
1.4 K  /user/atguigu/test/zaiyiqi.txt
(19)-setrep:設(shè)置HDFS中文件的副本數(shù)量
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt

面試重點

HDFS讀寫流程


HDFS文件塊大小

image.png

Client 切分


QQ圖片20181228173418.png

1)客戶端通過Distributed FileSystem模塊向NameNode請求上傳文件泌枪,NameNode檢查目標(biāo)文件是否已存在,父目錄是否存在秕岛。
2)NameNode返回是否可以上傳碌燕。
3)客戶端請求第一個 Block上傳到哪幾個DataNode服務(wù)器上。
4)NameNode返回3個DataNode節(jié)點瓣蛀,分別為dn1、dn2雷厂、dn3惋增。
5)客戶端通過FSDataOutputStream模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)調(diào)用dn2改鲫,然后dn2調(diào)用dn3诈皿,將這個通信管道建立完成。
6)dn1像棘、dn2稽亏、dn3逐級應(yīng)答客戶端。
7)客戶端開始往dn1上傳第一個Block(先從磁盤讀取數(shù)據(jù)放到一個本地內(nèi)存緩存)缕题,以Packet為單位截歉,dn1收到一個Packet就會傳給dn2,dn2傳給dn3烟零;dn1每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答瘪松。
8)當(dāng)一個Block傳輸完成之后,客戶端再次請求NameNode上傳第二個Block的服務(wù)器锨阿。(重復(fù)執(zhí)行3-7步)宵睦。


NN和2NN工作機制


image.png
  1. 第一階段:NameNode啟動
    (1)第一次啟動NameNode格式化后,創(chuàng)建Fsimage和Edits文件墅诡。如果不是第一次啟動壳嚎,直接加載編輯日志和鏡像文件到內(nèi)存。
    (2)客戶端對元數(shù)據(jù)進行增刪改的請求末早。
    (3)NameNode記錄操作日志烟馅,更新滾動日志。
    (4)NameNode在內(nèi)存中對元數(shù)據(jù)進行增刪改然磷。
  2. 第二階段:Secondary NameNode工作
    (1)Secondary NameNode詢問NameNode是否需要CheckPoint焙糟。直接帶回NameNode是否檢查結(jié)果。
    (2)Secondary NameNode請求執(zhí)行CheckPoint样屠。
    (3)NameNode滾動正在寫的Edits日志穿撮。
    (4)將滾動前的編輯日志和鏡像文件拷貝到Secondary NameNode缺脉。
    (5)Secondary NameNode加載編輯日志和鏡像文件到內(nèi)存,并合并悦穿。
    (6)生成新的鏡像文件fsimage.chkpoint攻礼。
    (7)拷貝fsimage.chkpoint到NameNode。
    (8)NameNode將fsimage.chkpoint重新命名成fsimage栗柒。
    (1)通常情況下礁扮,SecondaryNameNode每隔一小時執(zhí)行一次。
    [hdfs-default.xml]
    <property>
    <name>dfs.namenode.checkpoint.period</name>
    <value>3600</value>
    </property>
    (2)一分鐘檢查一次操作次數(shù)瞬沦,
    (3)當(dāng)操作次數(shù)達到1百萬時太伊,SecondaryNameNode執(zhí)行一次。
<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
<description>操作動作次數(shù)</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
<description> 1分鐘檢查一次操作次數(shù)</description>
</property >

集群安全模式

image.png

DataNode工作機制

image.png

1)一個數(shù)據(jù)塊在DataNode上以文件形式存儲在磁盤上逛钻,包括兩個文件僚焦,一個是數(shù)據(jù)本身,一個是元數(shù)據(jù)包括數(shù)據(jù)塊的長度曙痘,塊數(shù)據(jù)的校驗和芳悲,以及時間戳。
2)DataNode啟動后向NameNode注冊边坤,通過后名扛,周期性(1小時)的向NameNode上報所有的塊信息。
3)心跳是每3秒一次茧痒,心跳返回結(jié)果帶有NameNode給該DataNode的命令如復(fù)制塊數(shù)據(jù)到另一臺機器肮韧,或刪除某個數(shù)據(jù)塊。如果超過10分鐘沒有收到某個DataNode的心跳旺订,則認(rèn)為該節(jié)點不可用惹苗。
4)集群運行中可以安全加入和退出一些機器。


服役新數(shù)據(jù)節(jié)點

  1. 環(huán)境準(zhǔn)備
    (1)在hadoop104主機上再克隆一臺hadoop105主機
    (2)修改IP地址和主機名稱
    (3)刪除原來HDFS文件系統(tǒng)留存的文件(/opt/module/hadoop-2.7.2/data和log)
    (4)source一下配置文件
    [atguigu@hadoop105 hadoop-2.7.2]$ source /etc/profile
  2. 服役新節(jié)點具體步驟
    (1)直接啟動DataNode耸峭,即可關(guān)聯(lián)到集群
    [atguigu@hadoop105 hadoop-2.7.2]sbin/hadoop-daemon.sh start datanode [atguigu@hadoop105 hadoop-2.7.2] sbin/yarn-daemon.sh start nodemanager
  3. 如果數(shù)據(jù)不均衡桩蓉,可以用命令實現(xiàn)集群的再平衡
[atguigu@hadoop102 sbin]$ ./start-balancer.sh
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

退役舊數(shù)據(jù)節(jié)點

添加到白名單的主機節(jié)點,都允許訪問NameNode劳闹,不在白名單的主機節(jié)點院究,都會被退出。
配置白名單的具體步驟如下:
(1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創(chuàng)建dfs.hosts文件

[atguigu@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[atguigu@hadoop102 hadoop]$ touch dfs.hosts
[atguigu@hadoop102 hadoop]$ vi dfs.hosts
添加如下主機名稱(不添加hadoop105)
hadoop102
hadoop103
hadoop104
    (2)在NameNode的hdfs-site.xml配置文件中增加dfs.hosts屬性
<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
(3)配置文件分發(fā)
[atguigu@hadoop102 hadoop]$ xsync hdfs-site.xml
    (4)刷新NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful
    (5)更新ResourceManager節(jié)點
[atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033

黑名單退役

1.在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創(chuàng)建dfs.hosts.exclude文件

[atguigu@hadoop102 hadoop]$ pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[atguigu@hadoop102 hadoop]$ touch dfs.hosts.exclude
[atguigu@hadoop102 hadoop]$ vi dfs.hosts.exclude

添加如下主機名稱(要退役的節(jié)點)
hadoop105
2.在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude屬性

<property>
<name>dfs.hosts.exclude</name>
      <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
</property>

3.刷新NameNode本涕、刷新ResourceManager

[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful

[atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033

4.檢查Web瀏覽器业汰,退役節(jié)點的狀態(tài)為decommission in progress(退役中),說明數(shù)據(jù)節(jié)點正在復(fù)制塊到其他節(jié)點菩颖,如圖所示


image.png
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
[atguigu@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
  1. 如果數(shù)據(jù)不均衡样漆,可以用命令實現(xiàn)集群的再平衡
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh 
starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop102.out
Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved

注意:不允許白名單和黑名單中同時出現(xiàn)同一個主機名稱。


Datanode多目錄配置

  1. DataNode也可以配置成多個目錄晦闰,每個目錄存儲的數(shù)據(jù)不一樣放祟。即:數(shù)據(jù)不是副本

2.具體配置如下
hdfs-site.xml

<property>
        <name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
</property>

小文件存檔

image.png

3.案例實操

(1)需要啟動YARN進程
[atguigu@hadoop102 hadoop-2.7.2]$ start-yarn.sh
(2)歸檔文件
    把/user/atguigu/input目錄里面的所有文件歸檔成一個叫input.har的歸檔文件鳍怨,并把歸檔后文件存儲到/user/atguigu/output路徑下。
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName input.har –p  /user/atguigu/input   /user/atguigu/output
(3)查看歸檔
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/atguigu/output/input.har
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///user/atguigu/output/input.har
(4)解歸檔文件
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:/// user/atguigu/output/input.har/*    /user/atguigu
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跪妥,一起剝皮案震驚了整個濱河市鞋喇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眉撵,老刑警劉巖侦香,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纽疟,居然都是意外死亡罐韩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門污朽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來散吵,“玉大人,你說我怎么就攤上這事膘壶〈砗” “怎么了洲愤?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵颓芭,是天一觀的道長。 經(jīng)常有香客問我柬赐,道長亡问,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任肛宋,我火速辦了婚禮州藕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酝陈。我一直安慰自己床玻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布沉帮。 她就那樣靜靜地躺著锈死,像睡著了一般。 火紅的嫁衣襯著肌膚如雪穆壕。 梳的紋絲不亂的頭發(fā)上待牵,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音喇勋,去河邊找鬼缨该。 笑死,一個胖子當(dāng)著我的面吹牛川背,可吹牛的內(nèi)容都是我干的贰拿。 我是一名探鬼主播蛤袒,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壮不!你這毒婦竟也來了汗盘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤询一,失蹤者是張志新(化名)和其女友劉穎隐孽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體健蕊,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡菱阵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缩功。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴及。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嫡锌,靈堂內(nèi)的尸體忽然破棺而出虑稼,到底是詐尸還是另有隱情,我是刑警寧澤势木,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布蛛倦,位于F島的核電站,受9級特大地震影響啦桌,放射性物質(zhì)發(fā)生泄漏溯壶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一甫男、第九天 我趴在偏房一處隱蔽的房頂上張望且改。 院中可真熱鬧,春花似錦板驳、人聲如沸又跛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慨蓝。三九已至,卻和暖如春直砂,著一層夾襖步出監(jiān)牢的瞬間菌仁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工静暂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留济丘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像摹迷,于是被迫代替她去往敵國和親疟赊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

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