免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Hadoop學習之路(十一)HDFS的讀寫詳解

目錄

 

正文

HDFS的寫操作

《HDFS權(quán)威指南》圖解HDFS寫過程

        

詳細文字說明(術(shù)語)

1、使用 HDFS 提供的客戶端 Client,向遠程的 namenode 發(fā)起 RPC 請求

2、namenode 會檢查要創(chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進行操作,成功則會 為文件創(chuàng)建一個記錄,否則會讓客戶端拋出異常;

3、當客戶端開始寫入文件的時候,客戶端會將文件切分成多個 packets,并在內(nèi)部以數(shù)據(jù)隊列“data queue(數(shù)據(jù)隊列)”的形式管理這些 packets,并向 namenode 申請 blocks,獲 取用來存儲 replicas 的合適的 datanode 列表,列表的大小根據(jù) namenode 中 replication 的設定而定;

4、開始以 pipeline(管道)的形式將 packet 寫入所有的 replicas 中??蛻舳税?packet 以流的 方式寫入第一個 datanode,該 datanode 把該 packet 存儲之后,再將其傳遞給在此 pipeline 中的下一個 datanode,直到最后一個 datanode,這種寫數(shù)據(jù)的方式呈流水線的形式。

5、最后一個 datanode 成功存儲之后會返回一個 ack packet(確認隊列),在 pipeline 里傳遞 至客戶端,在客戶端的開發(fā)庫內(nèi)部維護著"ack queue",成功收到 datanode 返回的 ack packet 后會從"data queue"移除相應的 packet。

6、如果傳輸過程中,有某個 datanode 出現(xiàn)了故障,那么當前的 pipeline 會被關(guān)閉,出現(xiàn)故 障的 datanode 會從當前的 pipeline 中移除,剩余的 block 會繼續(xù)剩下的 datanode 中繼續(xù) 以 pipeline 的形式傳輸,同時 namenode 會分配一個新的 datanode,保持 replicas 設定的 數(shù)量。

7、客戶端完成數(shù)據(jù)的寫入后,會對數(shù)據(jù)流調(diào)用 close()方法,關(guān)閉數(shù)據(jù)流;

8、只要寫入了 dfs.replication.min(最小寫入成功的副本數(shù))的復本數(shù)(默認為 1),寫操作 就會成功,并且這個塊可以在集群中異步復制,直到達到其目標復本數(shù)(dfs.replication 的默認值為 3),因為 namenode 已經(jīng)知道文件由哪些塊組成,所以它在返回成功前只需 要等待數(shù)據(jù)塊進行最小量的復制。

詳細文字說明(口語)

1、客戶端發(fā)起請求:hadoop fs -put hadoop.tar.gz / 

客戶端怎么知道請求發(fā)給那個節(jié)點的哪個進程?

因為客戶端會提供一些工具來解析出來你所指定的HDFS集群的主節(jié)點是誰,以及端口號等信息,主要是通過URI來確定,

url:hdfs://hadoop1:9000

當前請求會包含一個非常重要的信息: 上傳的數(shù)據(jù)的總大小

2、namenode會響應客戶端的這個請求

namenode的職責:

1 管理元數(shù)據(jù)(抽象目錄樹結(jié)構(gòu))

用戶上傳的那個文件在對應的目錄如果存在。那么HDFS集群應該作何處理,不會處理

用戶上傳的那個文件要存儲的目錄不存在的話,如果不存在不會創(chuàng)建

2、響應請求

真正的操作:做一系列的校驗,

1、校驗客戶端的請求是否合理
2、校驗客戶端是否有權(quán)限進行上傳

3、如果namenode返回給客戶端的結(jié)果是 通過, 那就是允許上傳

namenode會給客戶端返回對應的所有的數(shù)據(jù)塊的多個副本的存放節(jié)點列表,如:

file1_blk1 hadoop02,hadoop03,hadoop04
file1_blk2 hadoop03,hadoop04,hadoop05

4、客戶端在獲取到了namenode返回回來的所有數(shù)據(jù)塊的多個副本的存放地的數(shù)據(jù)之后,就可以按照順序逐一進行數(shù)據(jù)塊的上傳操作

5、對要上傳的數(shù)據(jù)塊進行邏輯切片

切片分成兩個階段:

1、規(guī)劃怎么切
2、真正的切

物理切片: 1 和 2

邏輯切片: 1

file1_blk1 : file1:0:128
file1_blk2 : file1:128:256

  邏輯切片只是規(guī)劃了怎么切

  

6、開始上傳第一個數(shù)據(jù)塊

7、客戶端會做一系列準備操作

1、依次發(fā)送請求去連接對應的datnaode

pipline : client - node1 - node2 - node3

按照一個個的數(shù)據(jù)包的形式進行發(fā)送的。

每次傳輸完一個數(shù)據(jù)包,每個副本節(jié)點都會進行校驗,依次原路給客戶端

2、在客戶端會啟動一個服務:

用戶就是用來等到將來要在這個pipline數(shù)據(jù)管道上進行傳輸?shù)臄?shù)據(jù)包的校驗信息

客戶端就能知道當前從clinet到寫node1,2,3三個節(jié)點上去的數(shù)據(jù)是否都寫入正確和成功

8、clinet會正式的把這個快中的所有packet都寫入到對應的副本節(jié)點

1、block是最大的一個單位,它是最終存儲于DataNode上的數(shù)據(jù)粒度,由dfs.block.size參數(shù)決定,2.x版本默認是128M;注:這個參數(shù)由客戶端配置決定;如:System.out.println(conf.get("dfs.blocksize"));//結(jié)果是134217728

2、packet是中等的一個單位,它是數(shù)據(jù)由DFSClient流向DataNode的粒度,以dfs.write.packet.size參數(shù)為參考值,默認是64K;注:這個參數(shù)為參考值,是指真正在進行數(shù)據(jù)傳輸時,會以它為基準進行調(diào)整,調(diào)整的原因是一個packet有特定的結(jié)構(gòu),調(diào)整的目標是這個packet的大小剛好包含結(jié)構(gòu)中的所有成員,同時也保證寫到DataNode后當前block的大小不超過設定值;

如:System.out.println(conf.get("dfs.write.packet.size"));//結(jié)果是65536

3、chunk是最小的一個單位,它是DFSClient到DataNode數(shù)據(jù)傳輸中進行數(shù)據(jù)校驗的粒度,由io.bytes.per.checksum參數(shù)決定,默認是512B;注:事實上一個chunk還包含4B的校驗值,因而chunk寫入packet時是516B;數(shù)據(jù)與檢驗值的比值為128:1,所以對于一個128M的block會有一個1M的校驗文件與之對應;

如:System.out.println(conf.get("io.bytes.per.checksum"));//結(jié)果是512


9、clinet進行校驗,如果校驗通過,表示該數(shù)據(jù)塊寫入成功

10、重復7 8 9 三個操作,來繼續(xù)上傳其他的數(shù)據(jù)塊

11、客戶端在意識到所有的數(shù)據(jù)塊都寫入成功之后,會給namenode發(fā)送一個反饋,就是告訴namenode當前客戶端上傳的數(shù)據(jù)已經(jīng)成功。

 HDFS讀操作

《HDFS權(quán)威指南》圖解HDFS讀過程

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

1、客戶端調(diào)用FileSystem 實例的open 方法,獲得這個文件對應的輸入流InputStream。

2、通過RPC 遠程調(diào)用NameNode ,獲得NameNode 中此文件對應的數(shù)據(jù)塊保存位置,包括這個文件的副本的保存位置( 主要是各DataNode的地址) 。

3、獲得輸入流之后,客戶端調(diào)用read 方法讀取數(shù)據(jù)。選擇最近的DataNode 建立連接并讀取數(shù)據(jù)。

4、如果客戶端和其中一個DataNode 位于同一機器(比如MapReduce 過程中的mapper 和reducer),那么就會直接從本地讀取數(shù)據(jù)。

5、到達數(shù)據(jù)塊末端,關(guān)閉與這個DataNode 的連接,然后重新查找下一個數(shù)據(jù)塊。

6、不斷執(zhí)行第2 - 5 步直到數(shù)據(jù)全部讀完。

7、客戶端調(diào)用close ,關(guān)閉輸入流DF S InputStream。

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
HDFS筆記整理
HDFS原理 架構(gòu)和副本機制
Hadoop實戰(zhàn)
2、Hdfs架構(gòu)設計與原理分析
hdfs讀寫文件過程
Hadoop的讀寫操作、元數(shù)據(jù)及SecondaryNameNode、Checkpoint原理
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服