HDFS v1.2.1 服務器搭建

0x01 前言

??如果您覺得本文對您有幫助哪亿,請贊賞重荠,謝謝备闲。

??Hadoop 分布式文件系統(tǒng)(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點挡篓。但同時父款,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS 是一個高度容錯性的系統(tǒng)瞻凤,適合部署在廉價的機器上憨攒。HDFS 能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應用阀参。HDFS 放寬了一部分 POSIX 約束肝集,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS 在最開始是作為 Apache Nutch 搜索引擎項目的基礎架構而開發(fā)的蛛壳。HDFS 是 Apache Hadoop Core 項目的一部分杏瞻。

0x02 HDFS 概述

0x01 HDFS 的優(yōu)缺點

HDFS 優(yōu)點
  • 高容錯性:數(shù)據(jù)自動保存多個副本,副本丟失后衙荐,自動恢復捞挥。

  • 適合批處理:移動計算而飛數(shù)據(jù)。數(shù)據(jù)位置暴露給計算框架忧吟。

  • 適合大數(shù)據(jù)處理:GB砌函,TB,設置PB級數(shù)據(jù)溜族。百萬規(guī)模以上文件數(shù)量讹俊。10K+ 節(jié)點規(guī)模。

  • 流式文件訪問:一次性寫入煌抒,多次讀取仍劈。保證數(shù)據(jù)一致性。

  • 可構建在廉價機器上:通過多副本提高可靠性寡壮。提供容錯和恢復機制贩疙。

HDFS 缺點
  • 不適合低延遲數(shù)據(jù)訪問場景:比如毫秒級讹弯,低延遲與高吞吐率。

  • 不適合小文件存取場景:占用 NameNode 大量內(nèi)存这溅。尋道時間超過讀取時間闸婴。

  • 不適合并發(fā)寫入,文件隨機修改場景:一個文件只能有一個寫者芍躏。僅支持 append邪乍。

0x02 HDFS 的組成

??HDFS 采用 Master/Slave 的架構來存儲數(shù)據(jù),這種架構主要由四個部分組成对竣,分別為 HDFS Client庇楞、NameNode、DataNode 和 Secondary NameNode否纬。下面我們分別介紹這四個組成部分吕晌。

HDFS 組成.jpg
Client:就是客戶端

??文件切分。文件上傳 HDFS 的時候临燃,Client 將文件切分成 一個一個的Block睛驳,然后進行存儲。

??與 NameNode 交互膜廊,獲取文件的位置信息乏沸。

??與 DataNode 交互,讀取或者寫入數(shù)據(jù)爪瓜。

??Client 提供一些命令來管理 HDFS蹬跃,比如啟動或者關閉 HDFS。

??Client 可以通過一些命令來訪問 HDFS铆铆。

NameNode:就是 master蝶缀,它是一個主管、管理者

??管理 HDFS 的名稱空間薄货。

??配置副本策略翁都。當副本數(shù)低于規(guī)定數(shù)之后,就會自動增加副本數(shù)谅猾。
??處理客戶端讀寫請求柄慰。

??管理數(shù)據(jù)塊(Block)映射信息。NaseNode 保存 metadate 信息包括:文件 owership 和 permissions赊瞬、文件包含哪些塊先煎、Block 保存在哪個 DataNode(由 DataNode 啟動時上報)。

??NameNode 的 metadata 信息在啟動后會加載到內(nèi)存巧涧,metadata存儲到磁盤文件名為“fsimage”,Block 的位置信息不會保存到 fsimage遥倦,edits 記錄對 metadata 的操作日志谤绳。

DataNode:就是Slave占锯。NameNode 下達命令,DataNode 執(zhí)行實際的操作

??存儲實際的數(shù)據(jù)塊缩筛。文件被切分成固定大小的數(shù)據(jù)塊消略。默認數(shù)據(jù)塊大小為 64MB,可配置瞎抛。若文件大小不到 64MB艺演,則單獨存成一個 block。

??執(zhí)行數(shù)據(jù)塊的讀/寫操作桐臊。一個文件存儲方式胎撤。按大小被切分成若干個 block,存儲到不同節(jié)點上断凶,默認情況下每個 block 有三個副本伤提。

??啟動 DataNode 線程的時候向 NameNode 匯報 block 信息,通過向 NameNode 發(fā)送心跳保持與其聯(lián)系 3 秒一次认烁,如果 NameNode 10 分鐘沒有收到 DataNode 的心跳肿男,則認為其已經(jīng) lost,并拷貝到其他 DataNode却嗡。

Secondary NameNode:并非 NameNode 的熱備舶沛。

??當 NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務窗价。

??輔助 NameNode冠王,分擔其工作量。

??定期合并 fsimage 和 fsedits舌镶,并推送給 NameNode柱彻。SNN 執(zhí)行合并的時機:根據(jù)配置文件設置的時間間隔 fs.checkpoint.period 默認 3600 秒、根據(jù)配置文件設置 edits log 大小 fs.checkpoint.size 規(guī)定 edits 文件的最大值默認是 64MB餐胀。合并交給 Secondary Name Node 主要是因為 Name Node 主要為客戶端交互哟楷,而合并的工作主要交給 Secondary Name Node。

??在緊急情況下否灾,可輔助恢復 NameNode卖擅。

0x03 HDFS 讀寫流程

HDFS 讀流程

HDFS 的文件讀取原理,主要包括以下幾個步驟:

??首先調(diào)用 FileSystem 對象的 open 方法墨技,其實獲取的是一個 DistributedFileSystem 的實例惩阶。

??DistributedFileSystem 通過 RPC(遠程過程調(diào)用)獲得文件的第一批 block 的 locations,同一 block 按照重復數(shù)會返回多個 locations扣汪,這些 locations 按照 hadoop 拓撲結構排序断楷,距離客戶端近的排在前面。

??前兩步會返回一個 FSDataInputStream 對象崭别,該對象會被封裝成DFSInputStream 對象冬筒,DFSInputStream 可以方便的管理 DataNode 和 NameNode 數(shù)據(jù)流恐锣。客戶端調(diào)用 read 方法舞痰,DFSInputStream 就會找出離客戶端最近的 DataNode 并連接 DataNode土榴。

??數(shù)據(jù)從 DataNode 源源不斷的流向客戶端。

??如果第一個 block 塊的數(shù)據(jù)讀完了响牛,就會關閉指向第一個 block 塊的 DataNode 連接玷禽,接著讀取下一個 block 塊。這些操作對客戶端來說是透明的呀打,從客戶端的角度來看只是讀一個持續(xù)不斷的流矢赁。

??如果第一批 block 都讀完了,DFSInputStream 就會去 NameNode 拿下一批 blocks 的 location聚磺,然后繼續(xù)讀坯台,如果所有的 block 塊都讀完,這時就會關閉掉所有的流瘫寝。

HDFS 讀流程
HDFS 寫流程

HDFS 的文件寫入原理蜒蕾,主要包括以下幾個步驟:

??客戶端通過調(diào)用 DistributedFileSystem 的 create 方法,創(chuàng)建一個新的文件焕阿。

??DistributedFileSystem 通過 RPC(遠程過程調(diào)用)調(diào)用 NameNode咪啡,去創(chuàng)建一個沒有 blocks 關聯(lián)的新文件。創(chuàng)建前暮屡,NameNode 會做各種校驗撤摸,比如文件是否存在,客戶端有無權限去創(chuàng)建等褒纲。如果校驗通過准夷,NameNode 就會記錄下新文件,否則就會拋出 IO 異常莺掠。

??前兩步結束后會返回 FSDataOutputStream 的對象衫嵌,和讀文件的時候相似,F(xiàn)SDataOutputStream 被封裝成 DFSOutputStream彻秆,DFSOutputStream 可以協(xié)調(diào) NameNode 和 DataNode楔绞。客戶端開始寫數(shù)據(jù)到 DFSOutputStream唇兑,DFSOutputStream 會把數(shù)據(jù)切成一個個小 packet酒朵,然后排成隊列 data queue。

??DataStreamer 會去處理接受 data queue扎附,它先問詢 NameNode 這個新的 block 最適合存儲的在哪幾個 DataNode 里蔫耽,比如重復數(shù)是3,那么就找到 3 個最適合的 DataNode帕棉,把它們排成一個 pipeline针肥。DataStreamer 把 packet 按隊列輸出到管道的第一個 DataNode 中饼记,第一個 DataNode 又把 packet 輸出到第二個 DataNode 中香伴,以此類推慰枕。

??DFSOutputStream 還有一個隊列叫 ack queue,也是由 packet 組成即纲,等待 DataNode 的收到響應具帮,當 pipeline 中的所有 DataNode 都表示已經(jīng)收到的時候,這時 akc queue 才會把對應的 packet 包移除掉低斋。

??客戶端完成寫數(shù)據(jù)后蜂厅,調(diào)用 close 方法關閉寫入流。

??DataStreamer 把剩余的包都刷到 pipeline 里膊畴,然后等待 ack 信息掘猿,收到最后一個 ack 后,通知 DataNode 把文件標示為已完成唇跨。

HDFS寫流程

0x05 HDFS 的安全模式

??安全模式(詳細介紹)是 HDFS 所處的一種特殊狀態(tài)稠通,在這種狀態(tài)下,文件系統(tǒng)只接受讀數(shù)據(jù)請求买猖,而不接受刪除改橘、修改等變更請求。在 NameNode 主節(jié)點啟動時玉控,HDFS 首先進入安全模式飞主,DataNode 在啟動的時候會向 NameNode 匯報可用的 block 等狀態(tài),當整個系統(tǒng)達到安全標準時高诺,HDFS 自動離開安全模式碌识。如果 HDFS 出于安全模式下,則文件 block 不能進行任何的副本復制操作虱而,因此達到最小的副本數(shù)量要求是基于 DataNode 啟動時的狀態(tài)來判定的筏餐,啟動時不會再做任何復制(從而達到最小副本數(shù)量要求)。

0x06 具體實現(xiàn)

0x01 Linux環(huán)境搭建

??安裝 HDFS 大致可以分為以下幾個步驟:下載薛窥、解壓胖烛、檢查 Java 和 SSH 免密碼登陸,修改 core-site.xml诅迷、HDFS-site.xml 文件佩番,修改 masters 和 slaves 文件,格式化 NameNode罢杉,運行 start-HDFS.sh 文件趟畏。

??安裝 jdk。下載 Jdk rpm 版:jdk-8u181-linux-x64.rpm滩租。下載后上傳到目標系統(tǒng)赋秀。安裝 jdk 命令:# rpm -ivh jdk-8u181-linux-x64.rpm利朵,安裝完后使用命令:# java# javac 來測試 Java 環(huán)境是否安裝成功猎莲。

??修改 hosts 文件绍弟,添加主機名映射:centos01 - 192.168.198.128、centos02 - 192.168.198.129著洼、centos02 - 192.168.198.130樟遣。對主機形成映射。

??下載 Hadoop v1.2.1身笤,下載 hadoop-1.2.1.tar.gz 包到 linux 上豹悬,利用 xftp 存放在 root 目錄下,利用命令:# tar -xvzf hadoop-1.2.1.tar.gz 進行解壓液荸。解壓后瞻佛,我們將參考官方文檔進行安裝。

0x02 詳細安裝

??我們將 centos01 作為 NameNode娇钱,將 centos02 作為 Secondary NameNode伤柄、DataNode,centos03 作為 DataNode忍弛。所以我們將配置如下:

??在 centos01 上修改 conf/core-site.xml 文件响迂,添加如下:

<configuration>
    <!-- HDFS rpc調(diào)用端口 -->
    <property>
        <name>fs.default.name</name>
        <value>HDFS://centos01:9000</value>
    </property>
    <!-- HDFS存儲目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop</value>
    </property>
</configuration>

??默認的存儲目錄是 linux 下的 tmp 目錄,服務器重啟之后臨時文件將會被刪除细疚,因此我們修改目錄為 /opt/hadoop蔗彤。

??如果因為頻繁格式化,格式化命令為 bin 目錄下:./hadoop namenode -format疯兼,格式化后 DataNode 啟動不了然遏,那么將 hadoop.tmp.dir 目錄清空,再格式化后就可以解決問題了(詳細情況)吧彪。

??在文件 conf/HDFS-site.xml 上添加如下待侵,這個是配置你的 DataNode 數(shù)。

<configuration>
    <!-- HDFS節(jié)點數(shù) -->
     <property>
         <name>dfs.replication</name>
         <value>2</value>
     </property>
</configuration>

??修改 conf/masters 文件姨裸,添加 centos02 秧倾,修改 conf/slaves 文件,添加 centos02傀缩、centos03那先。

??為了更容易進行操作,我們對解壓后的文件夾形成軟鏈接簡化操作赡艰。命令如下:# ln -sf /root/hadoop-1.2.1 /home/hadoop 形成軟鏈接售淡。

??進入 centos01 conf 文件夾,利用命令 scp -r ./* root@centos02:/home/hadoop/conf/ 拷貝文件到 centos02,centos03 的 conf 文件下揖闸。

??完成后進入 centos01 bin 目錄揍堕,先用命令 ./hadoop namenode -format 進行格式化,然后利用命令 # ./start-dfs 打開 HDFS 汤纸。訪問網(wǎng)址 localhost:50070 便能進入 HDFS 監(jiān)控中心衩茸。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹲嚣,隨后出現(xiàn)的幾起案子递瑰,更是在濱河造成了極大的恐慌祟牲,老刑警劉巖隙畜,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異说贝,居然都是意外死亡议惰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門乡恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來言询,“玉大人,你說我怎么就攤上這事傲宜≡撕迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵函卒,是天一觀的道長辆憔。 經(jīng)常有香客問我,道長报嵌,這世上最難降的妖魔是什么虱咧? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮锚国,結果婚禮上腕巡,老公的妹妹穿的比我還像新娘。我一直安慰自己血筑,他們只是感情好绘沉,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豺总,像睡著了一般车伞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上园欣,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天帖世,我揣著相機與錄音,去河邊找鬼。 笑死日矫,一個胖子當著我的面吹牛赂弓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哪轿,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盈魁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窃诉?” 一聲冷哼從身側響起杨耙,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飘痛,沒想到半個月后珊膜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宣脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年车柠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塑猖。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竹祷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤衬潦,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站令花,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巍虫。R本人自食惡果不足惜彭则,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望占遥。 院中可真熱鬧俯抖,春花似錦、人聲如沸瓦胎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔啊。三九已至柬祠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間负芋,已是汗流浹背漫蛔。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莽龟。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓蠕嫁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毯盈。 傳聞我的和親對象是個殘疾皇子剃毒,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 首先,我們在使用前先看看HDFS是什麼搂赋?這將有助于我們是以后的運維使用和故障排除思路的獲得赘阀。 HDFS采用mast...
    W_Bousquet閱讀 4,196評論 0 2
  • 關于Mongodb的全面總結 MongoDB的內(nèi)部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,936評論 2 89
  • 一、目標 HDFS 全稱hadoop分布式文件系統(tǒng)脑奠,其最主要的作用是作為 Hadoop 生態(tài)中各系統(tǒng)的存儲服務基公。 ...
    Alukar閱讀 2,483評論 1 18
  • 古之談論天地,各此方論捺信,延至開花酌媒,果至今未結,昔者流派百家爭鳴各抒己見迄靠,隱,絕圣棄智彰顯花初喇辽,儒掌挚,甘貧樂道...
    群眾閱讀 229評論 0 0
  • 從前的日色變得慢,車菩咨,馬吠式,郵件都慢,一生只夠愛一個人抽米√卣迹——木心 曾經(jīng)有這樣一個才女,她特立獨行云茸,肆意灑脫是目,有一天,...
    原來是端陽呀閱讀 947評論 0 3