HDFS讀寫資料

2021-09-01 20:34:26 字數 2077 閱讀 4311

一、檔案的開啟

1.1、客戶端

hdfs開啟乙個檔案,需要在客戶端呼叫distributedfilesystem.open(path f, int buffersize),其實現為:

public fsdatainputstream open(path f, int buffersize) throws ioexception  while (curpos < endoff

&& curblk < blocks.length

&& results.size() < nrblockstoreturn);

//使用此

locatedblock

鍊錶構造乙個

locatedblocks

物件返回

return inode.createlocatedblocks(results);

getblocklocationsinternal的實現如下:

1.3、客戶端

通過rpc呼叫,在namenode得到的locatedblocks物件,作為成員變數構造dfsinputstream物件,最後包裝為fsdatainputstream返回給使用者。

二、檔案的讀取

2.1、客戶端

檔案讀取的時候,客戶端利用檔案開啟的時候得到的fsdatainputstream.read(long position, byte buffer, int offset, int length)函式進行檔案讀操作。

public int read(long position, byte buffer, int offset, int length)

throws ioexception  finally  catch (ioexception ie)  catch (throwable t)  finally  finally  catch(remoteexception re)  catch (interruptedexception  e)  catch (throwable e)  while (retry && --count >= 0);

return nodes;

locatefollowingblock中通過rpc呼叫namenode.addblock(src, clientname)函式

3.4、namenode

namenode的addblock函式實現如下:

public locatedblock addblock(string src,

string clientname) throws ioexception  finally 

if (mirrorout != null)  catch (ioexception e)  catch (ioexception e) {

handlemirrorouterror(e);

buf.position(endofheader);       

int len = buf.getint();

offsetinblock += len;

int checksumlen = ((len + bytesperchecksum - 1)/bytesperchecksum)*

checksumsize;

int checksumoff = buf.position();

int dataoff = checksumoff + checksumlen;

byte pktbuf = buf.array();

buf.position(buf.limit()); // move to the end of the data.

//將資料寫入本地的

block

out.write(pktbuf, dataoff, len);

/// flush entire packet before sending ack

flush();

// put in queue for pending acks

if (responder != null) {

((packetresponder)responder.getrunnable()).enqueue(seqno,

lastpacketinblock);

return payloadlen;

HDFS讀寫資料過程

一 檔案的開啟 1.1 客戶端 hdfs開啟乙個檔案,需要在客戶端呼叫distributedfilesystem.open path f,int buffersize 其實現為 public fsdatainputstream open path f,int buffersize throws io...

hdfs讀寫流程 大資料實戰之HDFS讀寫流程

hdfs是乙個分布式檔案系統,其中最需要關注的就是讀寫流程了,寫流程比讀流程更快,下面分別講解寫和讀的細節。一.hdfs寫流程 1 首先,客戶端利用hdfs client建立了distributed filesystem例項,再通過 distributed filesystem向namenode發起...

hdfs讀寫流程 HDFS 讀寫流程(詳解)

hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...