好程序員大數(shù)據(jù)學(xué)習(xí)路線分享HDFS學(xué)習(xí)總結(jié),HDFS介紹
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供曾都網(wǎng)站建設(shè)、曾都做網(wǎng)站、曾都網(wǎng)站設(shè)計(jì)、曾都網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、曾都企業(yè)網(wǎng)站模板建站服務(wù),10年曾都做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
?
HDFS(Hadoop Distributed File System)是分布式文件系統(tǒng),是Hadoop項(xiàng)目的核心子項(xiàng)目.
?
設(shè)計(jì)思想:將大文件、大批量文件,分布式存放在大量服務(wù)器上,以便于采取分而治之的方式對海量數(shù)據(jù)進(jìn)行運(yùn)算分析。
?
HDFS的重要特性
?
1. HDFS中的文件在物理上是**分塊存儲**(block),塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認(rèn)大小在hadoop2.x版本中是128M,老版本中是64M
2. HDFS文件系統(tǒng)會給客戶端提供一個(gè)**統(tǒng)一的抽象目錄樹**,客戶端通過路徑來訪問文件
3. **目錄結(jié)構(gòu)及文件分塊信息(元數(shù)據(jù))**的管理由namenode節(jié)點(diǎn)承擔(dān)
4. 文件的各個(gè)block的存儲管理由datanode節(jié)點(diǎn)承擔(dān)
5. HDFS是設(shè)計(jì)成適應(yīng)一次寫入,多次讀出的場景,且不支持文件的修改
?
HDFS的優(yōu)點(diǎn)
?
1. 高可靠性
?
???Hadoop按位存儲和處理數(shù)據(jù)的能力強(qiáng)
?
2. 高擴(kuò)展性
?
???Hadoop是在可用的計(jì)算機(jī)集群中分配數(shù)據(jù)完成計(jì)算計(jì)算任務(wù) ?
?
3. 高效性
?
???Hadoop能夠在節(jié)點(diǎn)之間動態(tài)的移動數(shù)據(jù),并保證每個(gè)節(jié)點(diǎn)的動態(tài)平衡
?
4. 高容錯(cuò)性
?
???Hadoop能夠自動保存的多個(gè)副本,并且能夠自動將失敗的任務(wù)重新分配
?
???
?
HDFS的缺點(diǎn)
?
1. 不適合低延遲訪問,不能快速訪問
?
???HDFS是單Master的,所有的對文件的請求都要經(jīng)過它,當(dāng)請求多時(shí),肯定會有延時(shí)。它適合高吞吐率的場景,就是在某一時(shí)間內(nèi)寫入大量的數(shù)據(jù)
?
2. 無法高效存儲大量小文件
?
???存儲大量小文件的話,它會占用 NameNode大量的內(nèi)存來存儲文件、目錄和塊信息(元數(shù)據(jù))
?
3. 不支持多用戶寫入即任意修改文件
?
???僅支持?jǐn)?shù)據(jù)append(追加),不支持文件隨意修改
?
針對HDFS缺點(diǎn)可能的改進(jìn)措施
?
1. 多Master設(shè)計(jì),正在研發(fā)中的GFS II也要改為分布式多Master設(shè)計(jì),還支持Master的Failover,而且Block大小改為1M,有意要調(diào)優(yōu)處理小文件。(Alibaba DFS的設(shè)計(jì),也是多Master設(shè)計(jì),它把Metadata的映射存儲和管理分開了,由多個(gè)Metadata存儲節(jié)點(diǎn)和一個(gè)查詢Master節(jié)點(diǎn)組成。)
2. ?使用緩存或多master設(shè)計(jì)可以降低client的數(shù)據(jù)請求壓力,以減少延時(shí)。
3. 橫向擴(kuò)展,一個(gè)Hadoop集群能管理的小文件有限,那就把幾個(gè)Hadoop集群拖在一個(gè)虛擬服務(wù)器后面,形成一個(gè)大的Hadoop集群。google也是這么干過的。
?
HDFS的Shell命令
?
| **-help** 輸出命令的手冊 ????????????????????????????????????|
| :----------------------------------------------------------- |
| **-ls** 顯示目錄信息 ??`hadoop fs -ls ??hdfs://hadoop-server01:9000/` ??ps:這些參數(shù)中,所有的hdfs**路徑都可以簡寫 ??-->`hadoop fs -ls /` ??等同于上一條命令的效果|
| **-put** ?向HDSF上傳文件`hdfs dfs -put本地文件路徑HDFS文件系統(tǒng)路徑`?*<易錯(cuò):記 源路徑→目的路徑>* |
| **-get** ?將HDFS文件系統(tǒng)中的文件下載回來 ?`hdfs dfs -get HDFS文件系統(tǒng)路徑 本地文件系統(tǒng)路徑` ?????*<易錯(cuò)>* ?ps:HDFS有一個(gè)和put和get類似的而方法copyFromlocal相當(dāng)于put和copyTolocal相當(dāng)于get |
| **-cat** ?查看HDFS文件系統(tǒng)中的文件內(nèi)容 ?`hdfs dfs -cat HDFS文件系統(tǒng)中文件的路徑` ?ps:不要查看非文件|
| **-cp** ??HDFS文件系統(tǒng)中進(jìn)行復(fù)制操作 ?`hdfs dfs -cp源HDFS文件系統(tǒng)中的文件路徑 目標(biāo)HDFS文件系統(tǒng)中的路徑` |
| **-mv** ?HDFS文件系統(tǒng)中的文件進(jìn)行移動操作 ?`hdfs dfs -mv源HDFS文件系統(tǒng)中的文件路徑 目標(biāo)HDFS文件系統(tǒng)中的路徑` ps: 將源文件移動目標(biāo)路徑,這個(gè)命令可允許有多個(gè)源路徑,此時(shí)目標(biāo)路徑必須是一個(gè)文件夾(目錄)不允許不同的文件系統(tǒng)互相移動文件|
| **-du** ??查看HDFS文件系統(tǒng)中文件的大小 ??`hdfs dfs -du HDFS文件系統(tǒng)中路徑中的一個(gè)文件` |
| **-mkdir** ??在HDSF系統(tǒng)中創(chuàng)建文件夾mkdir創(chuàng)建文件夾 ?ps:遞歸創(chuàng)建+`-p` |
| **-rm** ??刪除HDFS文件系統(tǒng)中的目錄或文件 ?`hdfs dfs -rm HDFS文件系統(tǒng)路徑` ??`hdfs dfs -rm -r HDFS文件系統(tǒng)路徑` ?ps: 只能是單個(gè)文件 或 空目錄,若參數(shù)文件夾中有多個(gè)文件 加-r |
| **-chmod** ??更改文件的權(quán)限 ?`hdfs dfs -chmod -R權(quán)限值HDFS文件系統(tǒng)路徑下的文件夾` ps: 所有每三位可以作為一個(gè)八進(jìn)制處理777是滿權(quán)限r(nóng)wx,+R之后, 文件夾下的所有子文件和文件夾都會被修改|
| **-appendTofile** ?追加一個(gè)文件到已經(jīng)存在文件的末尾`hadoop fs -appendTofile ./hello.txt /hello.txt` |
| **-getmerge** ?合并下載多個(gè)文件`hadoop fs -getmerge /aaa/log.* ./log.sum` |
| **-df** ?統(tǒng)計(jì)文件系統(tǒng)的可用空間信息`hadoop fs -df -h /` ????|
| ?????????????????????????????????????????????????????????????|
?
HDFS的工作機(jī)制
?
在了解工作機(jī)制之前,我們先來看看幾個(gè)重要角色:
?
?NameNode
?
1. master,它是一個(gè)管理者,維護(hù)著整個(gè)文件系統(tǒng)的文件目錄樹
2. 儲存數(shù)據(jù)庫(Block)映射信息,保存元數(shù)據(jù)信息包括:文件的所屬權(quán),文件的權(quán)限,文件大小,時(shí)間(Block列表,Block偏移量),位置信息
3. 主要職責(zé):處理客戶端讀寫請求,收集DateNode匯報(bào)的Block列表信息<*不會保存到本地系統(tǒng)中*>
?
**DateNode**
?
1. Slave,它是一個(gè)從節(jié)點(diǎn),簡單理解就是NameNode的奴隸
2. 存儲用戶的文件塊數(shù)據(jù)
3. 主要職責(zé):定期向NameNode匯報(bào)自身所持有的block信息(心跳機(jī)制),執(zhí)行數(shù)據(jù)塊的讀/寫操作
?
?Secondary NameNode
?
1. 檢查點(diǎn)節(jié)點(diǎn),表面上看SecondaryNameNode是NameNode的備份,實(shí)際上SecondaryNameNode的主要作用并不是備份
2. 主要職責(zé):定期合并fsimage和edit log,并推送給NameNode
?
問題引入:一個(gè)已經(jīng) 運(yùn)行十年的集群,最近的fsimage(鏡像)是NameNode十年前格式化產(chǎn)生,這么多年的操作日志被edit log(日志)記錄已達(dá)幾百T。那么問題來了,如果我要重啟這個(gè)集群,這么大日志文件,必定要重啟很久,我們的時(shí)間并不充裕該 如何解決這個(gè)問題?
?
*<問題提?。褐灰狽ameNode不格式化或重新啟動,fsimage將保持原始狀態(tài),edits會不斷的增加>*
?
此時(shí)我們引入Secondary NameNode, 把PN中的edit?log?和fsimage在SN中merge,此時(shí)PN還會繼續(xù)產(chǎn)生新的日志,記錄合并和合并期間的操作,合并之后新fsimage會拷貝回PN中,循環(huán)上面的操作.以此能保持edit log文件處于比較小的狀態(tài),fsimage的時(shí)間點(diǎn)也不會太久遠(yuǎn)
?
**fsimage是如何產(chǎn)生的呢?**
?
HDFS系統(tǒng)要開始運(yùn)行的時(shí)候需要先對NameNode進(jìn)行一次格式化,那么第一次格式化就會產(chǎn)生一個(gè)fsimage文件,但是這個(gè)文件是個(gè)空文件,NameNode啟動的時(shí)候會加載fsimage?然后執(zhí)行edit log加載到內(nèi)存中,然后立刻向磁盤中寫一個(gè)新的fsimage文件,這個(gè)fsimage就是一個(gè)最新的儲存信息
?
**緊急情況時(shí),可以輔助恢復(fù)NameNode**
?
namenode和secondary namenode的工作目錄存儲結(jié)構(gòu)完全相同,所以,當(dāng)namenode故障退出需要重新恢復(fù)時(shí),可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復(fù)namenode的元數(shù)據(jù)
?
HDFS讀寫數(shù)據(jù)流程
?
HDFS讀數(shù)據(jù)流程
?
簡單版本
?
客戶端將要讀取的文件路徑發(fā)送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據(jù)返回的信息找到相應(yīng)datanode逐個(gè)獲取文件的block并在客戶端本地進(jìn)行數(shù)據(jù)追加合并從而獲得整個(gè)文件
標(biāo)題名稱:好程序員大數(shù)據(jù)學(xué)習(xí)路線分享HDFS學(xué)習(xí)總結(jié)
文章網(wǎng)址:http://jinyejixie.com/article6/ppieig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、云服務(wù)器、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)