大資料基礎課之HDFS課程 讀流程 寫流程

2021-08-29 00:15:44 字數 2684 閱讀 7169

1.寫流程

hdfs dfs -ls / hdfs檔案系統的根目錄 而不是linux

hdfs dfs -ls hdfs://hadoop002:9000/ hdfs://hadoop002:9000 來自core-site.xml

hdfs dfs -ls 讀取當前命令操作的使用者的路徑 /user/使用者/

hdfs dfs -put notice.txt /

1.client呼叫filesystem.create(filepath),去與nn節點進行rpc通訊,check該路徑下的檔案是否已經存在?

是否有許可權建立該檔案?

假如ok,就建立乙個新的檔案,但是不關聯任何的block,返回乙個fsdataoutputstream物件;

假如不ok,就返回錯誤資訊

[root@hadoop002 hadoop-2.6.0-cdh5.7.0]# bin/hdfs dfs -put readme.txt /

put: permission denied: user=root, access=write, inode="/":hadoop:supergroup:drwxr-xr-x

[root@hadoop002 hadoop-2.6.0-cdh5.7.0]#

130m

block0-1 block0-2 block0-3

block1-1 block1-2 block1-3

2.client呼叫fsdataoutputstream物件的write方法,將

第乙個塊寫入第乙個dn,第乙個dn寫完就傳輸給第二個dn,

第二個dn寫完就傳輸給第三個dn,當第三個dn寫完,就返回乙個ack packet

給第二個dn,當第二個dn接受到第三個的dn的ack packet,就傳送ack packet

給第乙個dn,當第乙個dn接受到第二個的dn的ack packet,就返回ack packet

給fsdataoutputstream物件,意思標識第乙個塊 三個副本寫完;

然後其餘的塊依次這樣寫

3.當檔案全部寫完,client呼叫fsdataoutputstream物件的close方法,關閉輸出流,flush快取區的資料報。

4.再呼叫filesystem.complete(),告訴nn節點寫入成功

2.檔案讀流程 --> fsdatainputstream (面試題)

hadoop]$ bin/hdfs/dfs -cat /test.log

2.1 client通過filesystem.open(filepath)方法,去與nn進行rpc通訊,返回該檔案的部分或者全部的block塊(也包含該列表各block的分布在datanode位址的列表),也就是返回fsdatainputstream物件

2.2 client呼叫fsdatainputstream物件的read()方法。

a.去與第乙個塊的最近的datanode進行read,讀取完後會check,假如successful會關閉與當前datanode通訊;(假如check fail會記錄失敗的塊+datanode資訊,下次就不會讀取,那麼會去該塊的第二個datanode位址讀取)

b.然後第二個塊的遜的datanode上的進行讀取,check後會關閉與datanode的通訊。

c.假如block列表讀取完了,檔案還未結束,那麼filesystem會從namenode獲取下一批的block的列表。(當然讀操作對於client端是透明的,感覺就是連續的資料流)

2.3 client呼叫fsdatainputstream.close()方法,關閉輸入流。

!讀寫過程,資料完整性如何保持?

通過校驗和。因為每個chunk中都有乙個校驗位,乙個個chunk構成packet,乙個個packet最終形成block,故可在block上求校驗和。

hdfs 的client端即實現了對 hdfs 檔案內容的校驗和 (checksum) 檢查。當客戶端建立乙個新的hdfs檔案時候,分塊後會計算這個檔案每個資料塊的校驗和,此校驗和會以乙個隱藏檔案形式儲存在同乙個 hdfs 命名空間下。當client端從hdfs中讀取檔案內容後,它會檢查分塊時候計算出的校驗和(隱藏檔案裡)和讀取到的檔案塊中校驗和是否匹配,如果不匹配,客戶端可以選擇從其他 datanode 獲取該資料塊的副本。

hdfs中檔案塊目錄結構具體格式如下:

$/├── current

│ ├── bp-526805057-127.0.0.1-1411980876842

│ │ └── current

│ │ ├── version

│ │ ├── finalized

│ │ │ ├── blk_1073741825

│ │ │ ├── blk_1073741825_1001.meta

│ │ │ ├── blk_1073741826

│ │ │ └── blk_1073741826_1002.meta

│ │ └── rbw

│ └── version

└── in_use.lock

in_use.lock表示datanode正在對資料夾進行操作

rbw是「replica being written」的意思,該目錄用於儲存使用者當前正在寫入的資料。

block元資料檔案(*.meta)由乙個包含版本、型別資訊的標頭檔案和一系列校驗值組成。校驗和也正是存在其中。

慕課網HTML CSS基礎課程學習

慕課網html css基礎課程 為了做好乙個功能全面的 我開始從零開始學習,第一步先學習html css,js學習之後也會更新。網頁主要由html哪些標籤構成 人是由頭和身體構成,同樣的網頁也是由 頭 和 身體 構成,頭 是head,文件的頭部描述了文件的各種屬性和資訊,包括文件的標題等 身體 是b...

慕課 網頁布局基礎課程 學習筆記

1 css中存在三種定位機制 標準文件流 浮動 絕對定位。2 設定了浮動的元素,仍處於標註文件流中,但其尺寸無法像正常 div塊一樣得到擴充套件,需要額外填充元素或設定寬度高度才可以。3 清除浮動的方法有兩種,對受到浮動元素影響的元素設定 a clear both 或left right b wid...

慕課網《HTML CSS基礎課程》筆記總結(五)

每一條css樣式宣告 定義 由兩部分組成,形式如下 選擇器 在 之前的部分就是 選擇器 選擇器 指明了 中的 樣式 的作用物件,也就是 樣式 作用於網頁中的哪些元素。比如右側 編輯器中第7行 中的 body 就是選擇器。p 上面的css樣式 的作用 為p標籤設定12px字型大小,行間距設定1.6em...