中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

玉林市住房和城鄉(xiāng)建設(shè)廳網(wǎng)站怎樣申請(qǐng)網(wǎng)站

玉林市住房和城鄉(xiāng)建設(shè)廳網(wǎng)站,怎樣申請(qǐng)網(wǎng)站,做網(wǎng)站第一步要干啥,響應(yīng)式網(wǎng)站哪里做文章作者郵箱:yugongshiyesina.cn 地址:廣東惠州 ▲ 本章節(jié)目的 ? 了解hadoop的定義和特點(diǎn); ? 掌握hadoop的基礎(chǔ)結(jié)構(gòu); ? 掌握hadoop的常見命令; ? 了解hadoop的執(zhí)行流程; 一、簡(jiǎn)介 1…

文章作者郵箱:yugongshiye@sina.cn? ? ? ? ? ? ? 地址:廣東惠州

?▲ 本章節(jié)目的

??了解hadoop的定義和特點(diǎn);

??掌握hadoop的基礎(chǔ)結(jié)構(gòu);

? 掌握hadoop的常見命令;

? 了解hadoop的執(zhí)行流程;

一、簡(jiǎn)介

1.?概述

1. HDFS(Hadoop Distributed File System - Hadoop分布式文件系統(tǒng))是Hadoop提供的一套用于進(jìn)行分布式存儲(chǔ)的機(jī)制。

2. HDFS是Doug Cutting根據(jù)Google的論文<The Google File System>(GFS)來仿照實(shí)現(xiàn)的。

2.?特點(diǎn)

1. 能夠存儲(chǔ)超大文件。在HDFS集群中,只要節(jié)點(diǎn)數(shù)量足夠多,那么一個(gè)文件無論是多大都能夠進(jìn)行存儲(chǔ) - HDFS會(huì)對(duì)文件進(jìn)行切塊處理。

2.?快速的應(yīng)對(duì)和檢測(cè)故障。在HDFS集群中,運(yùn)維人員不需要頻繁的監(jiān)聽每一個(gè)節(jié)點(diǎn),可以通過監(jiān)聽NameNode來確定其他節(jié)點(diǎn)的狀態(tài) - DataNode會(huì)定時(shí)的給NameNode來發(fā)送心跳。

3. 具有高容錯(cuò)性。在HDFS中,會(huì)自動(dòng)的對(duì)數(shù)據(jù)來保存多個(gè)副本,所以不會(huì)因?yàn)橐粋€(gè)或者幾個(gè)副本的丟失就導(dǎo)致數(shù)據(jù)產(chǎn)生丟失。

4. 具有高吞吐量。吞吐量實(shí)際上指的是集群在單位時(shí)間內(nèi)讀寫的數(shù)據(jù)總量。

5. 可以在相對(duì)廉價(jià)的機(jī)器上來進(jìn)行橫向擴(kuò)展。

6. 不支持低延遲的訪問。在HDFS集群中,響應(yīng)速度一般是在秒級(jí)別,很難做到在毫秒級(jí)別的響應(yīng)。

7. 不適合存儲(chǔ)大量的小文件。每一個(gè)小文件都會(huì)產(chǎn)生一條元數(shù)據(jù),大量的小文件就會(huì)產(chǎn)生大量的元數(shù)據(jù)。元數(shù)據(jù)過多,會(huì)占用大量?jī)?nèi)存,同時(shí)會(huì)導(dǎo)致查詢效率變低。

8. 簡(jiǎn)化的一致性模型。在HDFS中,允許對(duì)文件進(jìn)行一次寫入多次讀取,不允許修改,但是允許追加寫入。

9. 不支持超強(qiáng)事務(wù)甚至不支持事務(wù)。在HDFS中,因?yàn)閿?shù)據(jù)量較大,此時(shí)不會(huì)因?yàn)橐粋€(gè)或者幾個(gè)數(shù)據(jù)塊出現(xiàn)問題就導(dǎo)致所有的數(shù)據(jù)重新寫入 - 在數(shù)據(jù)量足夠大的前提下,允許出現(xiàn)容錯(cuò)誤差。

二、基本概念

1.?基本結(jié)構(gòu)

1. HDFS本身是一個(gè)典型的主從(M/S)結(jié)構(gòu):主節(jié)點(diǎn)是NameNode,從節(jié)點(diǎn)是DataNode。

2. HDFS會(huì)對(duì)上傳的文件進(jìn)行切分處理,切出來的每一個(gè)數(shù)據(jù)塊稱之為Block。

3. HDFS會(huì)對(duì)上傳的文件進(jìn)行自動(dòng)的備份。每一個(gè)備份稱之為是一個(gè)副本(replication/replicas)。如果不指定,默認(rèn)情況下,副本數(shù)量為3。

4. HDFS仿照Linux設(shè)計(jì)了一套文件系統(tǒng),允許將文件存儲(chǔ)到不同的虛擬路徑下,同時(shí)也設(shè)計(jì)了一套和Linux一樣的權(quán)限策略。HDFS的根路徑是/。

2.?Block

1. Block是HDFS中數(shù)據(jù)存儲(chǔ)的基本形式,即上傳到HDFS上的數(shù)據(jù)最終都會(huì)以Block的形式落地到DataNode的磁盤上。

2. 如果不指定,默認(rèn)情況下,Block的大小是134217728B(即128M)??梢酝ㄟ^dfs.blocksize屬性來調(diào)節(jié),放在hdfs-site.xml文件中,單位是字節(jié)。

3. 如果一個(gè)文件不足一個(gè)Block的指定大小,那么這個(gè)文件是多大,它所對(duì)應(yīng)的Block就是多大。例如一個(gè)文件是70M,那么對(duì)應(yīng)的Block就是70M。屬性dfs.blocksize指定的值實(shí)際上可以立即為一個(gè)Block的最大容量。

4. 注意,在設(shè)計(jì)Block大小的時(shí)候,Block是維系在DataNode的磁盤上,要考慮Block在磁盤上的尋址時(shí)間以及傳輸時(shí)間(寫入時(shí)間)的比例值。一般而言,當(dāng)尋址時(shí)間是傳輸時(shí)間的1%的時(shí)候,效率最高。而計(jì)算機(jī)在磁盤上的尋址時(shí)間大概在10ms左右,那么寫入時(shí)間就是10ms/0.01=1000ms=1s??紤]到絕大部分的服務(wù)器使用的是機(jī)械磁盤,機(jī)械磁盤的寫入速度一般在120MB/s左右,此時(shí)一個(gè)Block大小是1s*120MB/s=120M左右。

5. HDFS會(huì)為每一個(gè)Block來分配一個(gè)唯一的編號(hào)BlockID。

6. 切塊的意義:

a. 能夠存儲(chǔ)超大文件。

b. 能夠進(jìn)行快速備份。

3.?NameNode

1. NameNode是HDFS中的主(核心)節(jié)點(diǎn)。在Hadoop1.X中,NameNode只能有1個(gè),容易存在單點(diǎn)故障;在Hadoop2.X中,NameNode最多允許存在2個(gè);在Hadoop3.X中,不再限制NameNode的數(shù)量,也因此在Hadoop3.X的集群中,NameNode不存在單點(diǎn)故障。

2. NameNode的作用:對(duì)外接收請(qǐng)求,記錄元數(shù)據(jù),管理DataNode。

3. 元數(shù)據(jù)(metadata)是用于描述數(shù)據(jù)的數(shù)據(jù)(大概可以將元數(shù)據(jù)理解為賬本)。在HDFS中,元數(shù)據(jù)實(shí)際上是用于描述文件的一些性質(zhì)。在HDFS中,將元數(shù)據(jù)拆分成了很多項(xiàng),主要包含了以下幾項(xiàng):

a. 上傳的文件名以及存儲(chǔ)的虛擬路徑,例如/log/a.log。

b. 文件對(duì)應(yīng)的上傳用戶以及用戶組。

c. 文件的權(quán)限,例如-rwxr-xr--。

d. 文件大小。

e. Block大小。

f. 文件和BlockID的映射關(guān)系。

g. BlockID和DataNode的映射關(guān)系。

h. 副本數(shù)量等。

4. 一條元數(shù)據(jù)大小大概在150B左右。

5. 元數(shù)據(jù)是維系在內(nèi)存以及磁盤中。

a. 維系在內(nèi)存中的目的是查詢快

b. 維系在磁盤中的目的是持久化

6. 元數(shù)據(jù)在磁盤上的存儲(chǔ)位置由屬性hadoop.tmp.dir來決定,是放在core-site.xml文件中。如果不指定,默認(rèn)情況下是放在/tmp下。

7. 和元數(shù)據(jù)相關(guān)的文件:

a. edits:寫操作文件。用于記錄HDFS的寫操作。

b. fsimage:元映像文件。存儲(chǔ)了NameNode對(duì)元數(shù)據(jù)的序列化形態(tài)(大概可以理解為元數(shù)據(jù)在磁盤上的持久化存儲(chǔ)形式)。

8. 當(dāng)NameNode接收到寫操作(命令)的時(shí)候,會(huì)先將這個(gè)寫操作(命令)記錄到edits_inprogress文件中。記錄成功之后,NameNode會(huì)解析這個(gè)命令,然后修改內(nèi)存中的元數(shù)據(jù)。修改成功之后,會(huì)給客戶端來返回一個(gè)ACK信號(hào)表示成功。在這個(gè)過程中,會(huì)發(fā)現(xiàn),fsimage文件中的元數(shù)據(jù)并沒有發(fā)生變化。

9. 隨著運(yùn)行時(shí)間的推移,edits_inprogress文件中記錄的命令會(huì)越來越多,同時(shí)fsiamge文件中的元數(shù)據(jù)和內(nèi)存中的元數(shù)據(jù)差別也會(huì)越來越大。因此,當(dāng)達(dá)到指定條件的時(shí)候,edits_inprogress這個(gè)文件會(huì)產(chǎn)生滾動(dòng),滾動(dòng)生成一個(gè)edits文件,同時(shí)產(chǎn)生一個(gè)新的edits_ingprogress文件。新來的寫操作會(huì)記錄到新的edits_inprogress文件中。滾動(dòng)生成edits文件之后,NameNode會(huì)將edits文件中的命令再一一取出,解析之后修改fsimage文件中的元數(shù)據(jù)。

10.?edits_inprogress文件的滾動(dòng)條件:

a. 空間:當(dāng)edits_inprogress文件達(dá)到指定大小(默認(rèn)是40000,即當(dāng)edits_inprogress文件中記錄的元數(shù)據(jù)條目數(shù)達(dá)到40000條,可以通過屬性dfs.namenode.checkpoint.txns來修改,放在hdfs-site.xml文件中)的時(shí)候,會(huì)自動(dòng)滾動(dòng)生成一個(gè)edits文件。

b. 時(shí)間:當(dāng)距離上一次的滾動(dòng)時(shí)間間隔達(dá)到指定大小(默認(rèn)是3600s,可以通過屬性dfs.namenode.checkpoint.period來修改,單位是秒,放在hdfs-site.xml文件匯總)的時(shí)候,edits_inprogress文件也會(huì)產(chǎn)生滾動(dòng)。

c. 重啟:當(dāng)NameNode被重啟的時(shí)候,會(huì)自動(dòng)觸發(fā)edits_inprogress文件的滾動(dòng)。

d. 強(qiáng)制:可以通過hdfs dfsadmin -rollEdits命令來強(qiáng)制滾動(dòng)。

11. 查看edits文件:hdfs oev -i edits_0000000000000000002-0000000000000000009 -o edits.xml

12. 在HDFS中,會(huì)將每一個(gè)寫操作看作是一個(gè)事務(wù),會(huì)給這個(gè)事務(wù)分配一個(gè)全局遞增的編號(hào),稱之為事務(wù)id,簡(jiǎn)寫為txid

13. 在HDFS中,會(huì)將開始記錄日志以及結(jié)束記錄日志都看作是一個(gè)寫操作,都會(huì)分配一個(gè)事務(wù)id。因此,每一個(gè)edits文件,基本上都是以O(shè)P_START_LOG_SEGMENT開頭,都是以O(shè)P_END_LOG_SEGMENT結(jié)尾

14. 查看fsimage文件:hdfs oiv -i fsimage_0000000000000000009 -o fsimage.xml -p XML

15. 每一個(gè)fsimage文件都會(huì)伴隨著產(chǎn)生一個(gè).md5文件,這個(gè)文件是對(duì)fsimage文件進(jìn)行校驗(yàn)的

16. 需要注意的是,Hadoop在第一次啟動(dòng)之后的1min的時(shí)候,會(huì)自動(dòng)觸發(fā)一次edits_inprogress文件的滾動(dòng),之后就是按照指定的時(shí)間間隔來進(jìn)行滾動(dòng)

17. NameNode通過心跳機(jī)制來管理DataNode:DataNode會(huì)定時(shí)(默認(rèn)是3s,通過屬性dfs.heartbeat.interval來決定,單位是秒,放在hdfs-site.xml文件中)給NameNode發(fā)送心跳。如果超過指定的時(shí)間,NameNode沒有收到DataNode的心跳,那么NameNode就會(huì)認(rèn)為這個(gè)DataNode已經(jīng)lost(丟失),此時(shí)NameNode會(huì)將這個(gè)DataNode上的數(shù)據(jù)復(fù)制一份備份到其他節(jié)點(diǎn)上來保證整個(gè)集群中的副本數(shù)量

18. 心跳的超時(shí)時(shí)間是由屬性dfs.namenode.heartbeat.recheck-interval來決定。如果不指定,默認(rèn)是300000,單位是毫秒,即300s=5min。但是在計(jì)算超時(shí)時(shí)間的時(shí)候,實(shí)際超時(shí)時(shí)間=2*dfs.namenode.heartbeat.recheck-interval + 10*dfs.heartbeat.interval來決定,所以如果不指定,實(shí)際超時(shí)時(shí)間為 2*5min + 10*3s = 10min30s

19. 心跳信號(hào)主要包含:

a. clusterid:集群編號(hào)。

Ⅰ. 在HDFS中,當(dāng)NameNode被格式化(hadoop namenode -format)的時(shí)候,會(huì)自動(dòng)計(jì)算產(chǎn)生一個(gè)clusterid。每次NameNode被格式化,都會(huì)自動(dòng)重新計(jì)算產(chǎn)生一個(gè)新的clusterid。

Ⅱ. 當(dāng)HDFS集群?jiǎn)?dòng)之后,NameNode就會(huì)等待DataNode的心跳。當(dāng)NameNode第一次收到DataNode的心跳之后,會(huì)將clusterid在心跳響應(yīng)中返回給DataNode。

Ⅲ. 當(dāng)DataNode收到心跳響應(yīng)之后,會(huì)將clusterid獲取并且記錄到本地的磁盤中,之后DataNode和NameNode之間進(jìn)行的每一次通信(包括心跳)都會(huì)攜帶這個(gè)clusterid。

Ⅳ. NameNode在收到DataNode的請(qǐng)求之后,會(huì)先校驗(yàn)clusterid是否一致,如果不一致,則會(huì)放棄這個(gè)請(qǐng)求;如果一致,才會(huì)處理這個(gè)請(qǐng)求。

Ⅴ. 如果NameNode被多次格式化,就會(huì)導(dǎo)致DataNode和NameNode之間無法進(jìn)行通信。

b. 當(dāng)前DataNode的節(jié)點(diǎn)狀態(tài)(預(yù)服役、服役、預(yù)退役)。

c. 當(dāng)前DataNode上存儲(chǔ)的Block的校驗(yàn)信息。

20. 安全模式:

a. 當(dāng)NameNode被重啟之后,自動(dòng)進(jìn)入安全模式。

b. 在安全模式中,NameNode會(huì)先自動(dòng)觸發(fā)edits_inprogress文件的滾動(dòng),滾動(dòng)完成之后,會(huì)觸發(fā)fsimage文件的更新。fsiamge文件更新完成之后,NameNode會(huì)將fsimage文件中的元數(shù)據(jù)加載到內(nèi)存中,加載完成之后,會(huì)等待DataNode的心跳。

c. 如果沒有收到DataNode的心跳,那么說明NameNode被重啟過程中,DataNode也出現(xiàn)了骨渣古,此時(shí)NameNode就需要將DataNode上的數(shù)據(jù)備份到其他節(jié)點(diǎn)上來保證集群中的副本數(shù)量;如果NameNode收到了DataNode的心跳,會(huì)校驗(yàn)DataNode上的Block信息。如果校驗(yàn)失敗,那么NameNode會(huì)試圖恢復(fù)這個(gè)DataNode上的數(shù)據(jù),恢復(fù)完成之后會(huì)再次校驗(yàn),如果校驗(yàn)失敗,則重新恢復(fù)重新校驗(yàn);如果校驗(yàn)成功,則NameNode自動(dòng)退出安全模式。

21. 之所以存在安全模式,實(shí)際上是HDFS集群保證數(shù)據(jù)的完整性。

22. 在安全模式中,HDFS集群只能讀(下載)不能寫(上傳)。

23. 在實(shí)際過程中,如果在合理時(shí)間內(nèi),HDFS集群依然沒有退出安全模式,則說明數(shù)據(jù)已經(jīng)產(chǎn)生了不可挽回的丟失,此時(shí)需要考慮強(qiáng)制退出安全模式。

24. 常見命令:

命令

解釋

hdfs dfsadmin -safemode enter

進(jìn)入安全模式

hdfs dfsadmin -safemode get

查看安全模式狀態(tài)

hdfs dfsadmin -safemode leave

退出安全模式

4.?DataNode

1. DataNode是HDFS的從節(jié)點(diǎn),主要用于存儲(chǔ)數(shù)據(jù),數(shù)據(jù)會(huì)以Block形式落地到磁盤上。

2. 數(shù)據(jù)在磁盤上的存儲(chǔ)位置同樣由hadoop.tmp.dir屬性來決定。

3. DataNode會(huì)為每一個(gè)Block生成一個(gè)blk_xxx.meta文件,這個(gè)meta文件實(shí)際上是blk文件的校驗(yàn)文件。

4. DataNode的狀態(tài):預(yù)服役、服役、預(yù)退役、退役、丟失。

5. DataNode通過心跳機(jī)制向NameNode來注冊(cè)信息。

5.?SecondaryNameNode

1. SecondaryNameNode不是NameNode的熱備份,但是SecondaryNameNode能夠一定程度上對(duì)元數(shù)據(jù)做到備份,但不是全部 - SecondaryNameNode主要是負(fù)責(zé)edits_inprogress文件的滾動(dòng)和fsimage文件的更新。

2. 在集群中,如果存在SecondaryNameNode,那么edits_inprogress文件的滾動(dòng)和fsimage文件的更新是由SecondaryNameNode來完成;如果沒有SecondaryNameNode,那么edits_inprogress文件的滾動(dòng)和fsimage文件的更新就會(huì)由NameNode自己來完成。

3. 到目前為止,HDFS集群只支持兩種結(jié)構(gòu):

a. 1個(gè)NameNode+1個(gè)SecondaryNameNode+n個(gè)DataNode。

b. n個(gè)NameNode(Hadoop2.X中是2個(gè),Hadoop3.X中是n個(gè),1個(gè)Active+多個(gè)Standby狀態(tài))+n個(gè)DataNode。

4. 在HDFS集群中,NameNode如果只有1個(gè),那么NameNode宕機(jī)之后,整個(gè)集群就無法對(duì)外提供服務(wù),所以必須對(duì)NameNode來進(jìn)行備份,避免單點(diǎn)故障,所以在集群中,要考慮使用上述的第二種方案。

6.?機(jī)架感知策略

1. 在HDFS中,機(jī)架感知策略默認(rèn)是不開啟的。如果需要開啟機(jī)架感知策略,那么需要在hadoop-site.xml文件中添加如下配置:

<property>

<name>topology.script.file.name</name>

<value>path/rackaware.py</value>

</property

2. 上述配置的value中,需要指定一個(gè)腳本文件的存儲(chǔ)路徑。腳本文件可以使用Python或者Shell等常見腳本語言來實(shí)現(xiàn)。

3. 在這個(gè)腳本中,需要定義一個(gè)Map。Map的鍵是主機(jī)名或者IP,Map的值是用戶指定的機(jī)架名。只要保證值一致,那么就表示值對(duì)應(yīng)的鍵放在同一個(gè)機(jī)架上。

4. 由于這個(gè)機(jī)架是通過Map映射來完成的,所以本質(zhì)上是一個(gè)邏輯機(jī)架,也因此可以將不同物理機(jī)架上的節(jié)點(diǎn)配置在同一個(gè)邏輯機(jī)架上。在實(shí)際開發(fā)過程中,為了方便管理,往往是將同一個(gè)物理機(jī)架上的節(jié)點(diǎn)配置在同一個(gè)邏輯機(jī)架上。

7.?副本放置策略

1. 在HDFS中,支持多副本策略,這樣能夠有效的保證數(shù)據(jù)的可靠性。如果不指定,默認(rèn)情況下,副本數(shù)量為3。通過屬性dfs.replication來修改,放在hdfs-site.xml文件中

2. 在HDFS中,如果沒有開啟機(jī)架感知策略,那么默認(rèn)也不會(huì)開啟副本放置策略,那么此時(shí)多個(gè)副本是放在相對(duì)空閑的節(jié)點(diǎn)上

3. 如果啟用了機(jī)架感知策略,那么對(duì)應(yīng)的,HDFS也會(huì)啟用副本放置策略。

a. 第一個(gè)副本:如果是集群內(nèi)上傳,則誰上傳就放在誰身上;如果是集群外上傳,則誰空閑就放在誰身上。

b. 第二個(gè)副本:放在和第一個(gè)副本相同機(jī)架的節(jié)點(diǎn)上。實(shí)際過程中,會(huì)考慮將同一個(gè)物理機(jī)架上的節(jié)點(diǎn)配置在同一個(gè)邏輯機(jī)架上,此時(shí)機(jī)架內(nèi)傳輸會(huì)比跨機(jī)架傳輸要快一些。

c. 第三個(gè)副本:放在和第二個(gè)副本不同機(jī)架的節(jié)點(diǎn)上,保證不會(huì)因?yàn)橐粋€(gè)機(jī)架整體出現(xiàn)故障導(dǎo)致數(shù)據(jù)產(chǎn)生丟失。

d. 更多副本:誰空閑放在誰身上。

8.?常見命令

命令解釋

start-dfs.sh

啟動(dòng)HDFS

stop-dfs.sh

結(jié)束HDFS

hdfs --daemon start namenode

啟動(dòng)NameNode

hdfs --daemon start datanode

啟動(dòng)DataNode

hdfs --daemon start secondarynamenode

啟動(dòng)SecondaryNameNode

hadoop fs -put /home/a.txt /

或者

hadoopfs -copyFromLocal /home/a.txt /

上傳文件

hadoop fs -get /a.txt /home

或者

hadoop fs -copyToLocal /a.txt /home

下載文件

?hadoop fs -mkdir /txt

創(chuàng)建目錄

hadoop fs -mkdir -p /video/movie

創(chuàng)建多級(jí)目錄

hadoop fs -rm /b.txt

刪除文件

hadoop fs -rmdir /txt

刪除目錄

hadoop fs -rm -r /video

遞歸刪除目錄

hadoop fs -cat /c.txt

查看文件內(nèi)容

hadoop fs -tail /c.txt

查看文件最后1000個(gè)字節(jié)的數(shù)據(jù)

hadoop fs -mv /c.txt /a.txt

重命名或者剪切

hadoop fs -cp /txt/a.txt /a.txt

復(fù)制文件

hadoop fs -ls /

查看子文件或者子目錄

hadoop fs -ls -R /

遞歸查看

hadoop fs -setrep 3 /a.txt

設(shè)置副本數(shù)量

hadoop fs -chmod 777 /a.txt

更改權(quán)限

hadoop fs -chown tom /a.txt

更改用戶

hadoop fs -chgrp tedu /a.txt

更改用戶組

9. 回收站機(jī)制

1. 在HDFS中,回收站機(jī)制默認(rèn)是不開啟的,此時(shí)刪除命令會(huì)立即生效,且該操作此時(shí)不可逆。

2. 配置回收站策略,配置在cores-site.xml中。

<!--表示指定文件在回收站中的存放時(shí)間,單位是min-->

<!--如果超過指定的時(shí)間,依然沒有將文件從回收站中還原回來-->

<!--回收站就會(huì)認(rèn)為此時(shí)文件已經(jīng)失效,就會(huì)清理掉-->

<!--如果不指定,那么此屬性的值默認(rèn)為0-->

<property>

??????? <name>fs.trash.interval</name>

??????? <value>1440</value>

</property>

3. 回收站的默認(rèn)存放位置為/user/root/.Trash/Current/。

4. 如果需要將文件從回收站中還原回來,那么使用hadoop fs -mv命令即可。

三、流程

1.?寫(上傳)流程

1. 客戶端發(fā)起RPC請(qǐng)求到NameNode,請(qǐng)求上傳文件。

2. 當(dāng)NameNode收到請(qǐng)求之后,會(huì)先進(jìn)行校驗(yàn):

a. 校驗(yàn)是否有指定路徑 - FileNotFoundException。

b. 校驗(yàn)是否有寫入權(quán)限 - AccessControlException。

c. 校驗(yàn)是否有同名文件 - FileAlreadyExistException。

3. 如果校驗(yàn)失敗,則直接報(bào)錯(cuò);如果校驗(yàn)成功,則NameNode會(huì)給客戶端返回信號(hào)表示允許上傳。

4. 當(dāng)客戶端收到信號(hào)之后,會(huì)再次給NameNode來發(fā)送請(qǐng)求,請(qǐng)求獲取第一個(gè)Block的存儲(chǔ)位置。

5. NameNode收到請(qǐng)求之后,會(huì)將這個(gè)Block的存儲(chǔ)位置(實(shí)際上是DataNode的IP或者主機(jī)名,默認(rèn)情況下會(huì)返回3個(gè)存儲(chǔ)位置 - 副本數(shù)量為3)返回給客戶端。

6. 客戶端收到存儲(chǔ)位置之后,會(huì)從這些地址中選取一個(gè)較近(實(shí)際上是網(wǎng)絡(luò)拓?fù)渚嚯x)的地址,發(fā)送請(qǐng)求,請(qǐng)求建立pipeline(管道,實(shí)際上是基于NIO Channel)用于傳輸數(shù)據(jù);第一個(gè)Block所在節(jié)點(diǎn)會(huì)給下一個(gè)Block所在的節(jié)點(diǎn)發(fā)送請(qǐng)求,請(qǐng)求建立pipeline;依此類推,直到最后一個(gè)請(qǐng)求應(yīng)答成功。

7. 建立好管道應(yīng)答成功之后,客戶端會(huì)將當(dāng)前的Block進(jìn)行封包,將Packet寫入第一個(gè)節(jié)點(diǎn);寫完之后,第一個(gè)Block所在的節(jié)點(diǎn)寫入第二個(gè)節(jié)點(diǎn),依次類推。

8. 當(dāng)這個(gè)Block的所有副本寫完之后,客戶端會(huì)再次給NameNode發(fā)送請(qǐng)求,請(qǐng)求獲取下一個(gè)Block的存儲(chǔ)位置,重復(fù)5.6.7.8四個(gè)步驟,直到所有的Block全部寫完。

9. 當(dāng)客戶端寫完所有的Block之后,會(huì)給NameNode發(fā)送一個(gè)請(qǐng)求,請(qǐng)求關(guān)閉文件(關(guān)流)。文件一旦關(guān)閉,數(shù)據(jù)就不能修改。

2.?讀(下載)流程

1. 客戶端發(fā)起RPC請(qǐng)求到NameNode,請(qǐng)求下載文件。

2. NameNode收到請(qǐng)求之后,會(huì)先進(jìn)行校驗(yàn):

a. 校驗(yàn)是否有讀取權(quán)限 - AccessControlException。

b. 校驗(yàn)是否有指定文件 - FileNotFoundException。

3. 如果校驗(yàn)失敗,會(huì)直接報(bào)錯(cuò);如果校驗(yàn)成功,則NameNode就會(huì)給客戶端返回一個(gè)信號(hào)表示允許讀取。

4. 客戶端收到信號(hào)之后,會(huì)再次發(fā)送請(qǐng)求給NameNode,請(qǐng)求獲取第一個(gè)Block的存儲(chǔ)位置。

5. NameNode收到請(qǐng)求之后,會(huì)查詢?cè)獢?shù)據(jù),然后將這個(gè)Block的存儲(chǔ)地址(默認(rèn)情況下是3個(gè))返回給客戶端。

6. 客戶端收到地址之后,會(huì)從這些地址中選取一個(gè)較近的地址來讀取這個(gè)Block。

7. 讀取完這個(gè)Block之后,客戶端會(huì)對(duì)這個(gè)Block進(jìn)行checkSum校驗(yàn)。如果校驗(yàn)失敗,說明這個(gè)Block產(chǎn)生了變動(dòng),此時(shí)客戶端會(huì)從剩余的地址中重新選取一個(gè)地址重新讀取重新校驗(yàn);如果校驗(yàn)成功,則客戶端會(huì)再次給NameNode發(fā)送請(qǐng)求,請(qǐng)求獲取下一個(gè)Block的存儲(chǔ)位置,重復(fù)5.6.7三個(gè)步驟,直到讀取完所有的Block。

8. 當(dāng)客戶端讀取完最后一個(gè)Block之后,會(huì)給NameNode發(fā)送一個(gè)結(jié)束信號(hào)。NameNode收到信號(hào)之后會(huì)關(guān)閉這個(gè)文件。

3.?刪除流程

1. 客戶端發(fā)起RPC請(qǐng)求到NameNode,請(qǐng)求刪除文件。

2. NameNode收到請(qǐng)求之后,會(huì)先進(jìn)行校驗(yàn):

a. 校驗(yàn)是否有刪除權(quán)限 - AccessControlException。

b. 校驗(yàn)是否有指定文件 - FileNotFoundException。

3. 如果校驗(yàn)失敗,則直接報(bào)錯(cuò);如果校驗(yàn)成功,則NameNode會(huì)將這個(gè)寫請(qǐng)求記錄到edits_inprogress文件中,記錄成功之后,會(huì)修改內(nèi)存中的元數(shù)據(jù);修改完成之后,NameNode會(huì)給客戶端返回一個(gè)ACK信號(hào)表示刪除成功。需要注意的是,此時(shí)文件并沒有真正從HDFS上移除,僅僅是修改了元數(shù)據(jù)。

4. NameNode給客戶端返回信號(hào)之后,就會(huì)等待DataNode的心跳。NameNode在收到DataNode的心跳之后,會(huì)在心跳響應(yīng)中要求DataNode刪除對(duì)應(yīng)的Block。

5. DataNode在收到心跳響應(yīng)之后,會(huì)按照NameNode的要求,去磁盤上刪除文件對(duì)應(yīng)的Block。注意,此時(shí)文件才真正的從HDFS上移除。

http://www.risenshineclean.com/news/63108.html

相關(guān)文章:

  • 做php網(wǎng)站的環(huán)境百度競(jìng)價(jià)渠道代理
  • 廈門網(wǎng)絡(luò)建站公司網(wǎng)站seo專員
  • 做pc端網(wǎng)站咨詢南京seo公司
  • 網(wǎng)站的建設(shè)網(wǎng)站推廣100種方法
  • wordpress 中英文網(wǎng)站模板武漢網(wǎng)絡(luò)廣告推廣服務(wù)
  • 網(wǎng)站設(shè)置flash插件網(wǎng)站關(guān)鍵詞優(yōu)化推廣哪家快
  • 做購物網(wǎng)站多少錢 知乎公司宣傳網(wǎng)頁怎么做
  • 安徽網(wǎng)站建設(shè)怎么樣微信廣告投放推廣平臺(tái)
  • 網(wǎng)站維護(hù)運(yùn)營(yíng)青島關(guān)鍵詞搜索排名
  • 做游戲開箱網(wǎng)站的法律風(fēng)險(xiǎn)seo關(guān)鍵詞排名優(yōu)化是什么
  • 個(gè)人做網(wǎng)站開發(fā)廣州線下教學(xué)
  • 網(wǎng)站服務(wù)器租用多少錢一年合適濟(jì)南網(wǎng)站設(shè)計(jì)
  • 仿站工具下載后咋做網(wǎng)站私域流量營(yíng)銷
  • 厚街網(wǎng)站建設(shè)多少錢百度的seo關(guān)鍵詞優(yōu)化怎么弄
  • 石巖醫(yī)院網(wǎng)站建設(shè)免費(fèi)的外貿(mào)網(wǎng)站推廣方法
  • 蘇州高新區(qū)建設(shè)局網(wǎng)站管網(wǎng)百度 搜索熱度
  • 濟(jì)南免費(fèi)做網(wǎng)站合肥網(wǎng)站建設(shè)程序
  • 做網(wǎng)站如何兼職廣告seo是什么意思
  • 怎樣做學(xué)校網(wǎng)站網(wǎng)站建設(shè)公司好
  • 怎樣防止別人利用自己的電腦做網(wǎng)站服務(wù)器網(wǎng)站域名查詢網(wǎng)
  • 怎么用上線了做網(wǎng)站淘寶推廣怎么做
  • 關(guān)鍵字查詢我的網(wǎng)站怎么做鄭州網(wǎng)絡(luò)推廣服務(wù)
  • 寵物用品技術(shù)支持 東莞網(wǎng)站建設(shè)汨羅網(wǎng)站seo
  • wordpress 搜索提示河南整站關(guān)鍵詞排名優(yōu)化軟件
  • 互聯(lián)網(wǎng)網(wǎng)站制作公司蘇州百度推廣公司
  • 海洋網(wǎng)站建設(shè)性價(jià)比高石嘴山網(wǎng)站seo
  • 蘇州網(wǎng)站制作外貿(mào)營(yíng)銷網(wǎng)站建站
  • 網(wǎng)站制作怎么學(xué)游戲交易平臺(tái)
  • 郴州網(wǎng)站建設(shè)公司在哪里西安關(guān)鍵詞網(wǎng)站排名
  • 網(wǎng)站robots.txt怎么寫可口可樂營(yíng)銷策劃方案