日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS

好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS,設計目標:

創(chuàng)新互聯(lián)專注于井陘網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供井陘營銷型網站建設,井陘網站制作、井陘網頁設計、井陘網站官網定制、小程序制作服務,打造井陘網絡公司原創(chuàng)品牌,更為您提供井陘網站排名全網營銷落地服務。

1、存儲量大

2、自動快速檢測應對硬件錯誤

3、流式訪問數(shù)據(jù)

4、移動計算比移動數(shù)據(jù)本身更劃算

5、簡單一致性模型

6、異構平臺可移植

特點

優(yōu)點:

  1. 高可靠性:Hadoop按位存儲和處理數(shù)據(jù)的能力強

  2. 高擴展性:hadoop是在可用的計算機集簇間分配數(shù)據(jù)并完成計算任務的,這些集簇可以方便地擴展到數(shù)以千計的節(jié)點中

  3. 高效性:hadoop能夠在節(jié)點之間動態(tài)地移動數(shù)據(jù),并保證各個節(jié)點的動態(tài)平衡,因此處理速度非???/p>

  4. 高容錯性:hadoop能夠自動保存數(shù)據(jù)的多個副本,并且能夠自動將失敗的任務重新分配。

缺點:

  1. 不適合低延遲數(shù)據(jù)訪問

  2. 無法高效存儲大量小文件(每個文件存儲都有屬于自己的索引,元數(shù)據(jù)龐大就不高效)

  3. 不支持多用戶寫入及任意修改文件(可以刪除以及追加,只是不能修改文件中某處的數(shù)據(jù))

重要特性:

  1. 文件在物理上是分塊存儲,塊的大小可以通過配置參數(shù)(dfs.blocksize)來規(guī)定,默認2.x版本之后是128M,老版本是64M

  2. HDFS會給哭護短提供一個統(tǒng)一的抽象目錄樹,客戶端通過路徑來訪問文件,刑辱:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

  3. 目錄結構及文件分塊信息(元數(shù)據(jù))的管理由namenode承擔—namenode是HDFS集群主節(jié)點,負責維護整個hdfs文件系統(tǒng)的目錄樹,以及每一個路徑(文件)所對應的block塊信息(block的id以及所在datanode服務器

  4. 文件的各個block的存儲管理由datanode承擔—datanode是HDFS集群從節(jié)點,每一個block都可以在多個datanode上存儲多個副本(副本參數(shù)設置dfs.replication)

  5. HDFS是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改

  6. 管理文件系統(tǒng)的命名空間(元數(shù)據(jù):包含文件名稱、大小、所屬人、地址)

  7. 規(guī)定客戶端訪問文件規(guī)則

三個服務
Namenode
任務清單

a)?文件大小是否已經超載(超過集群的負載)

b)?是否已經存在相同的文件

c)?是否具有創(chuàng)建該文件的權限

  1. 對文件執(zhí)行命令,關閉,打開文件或者打開路徑等操作

  2. 所有的數(shù)據(jù)節(jié)點發(fā)送心跳給NameNode,他需要確保數(shù)據(jù)節(jié)點DataNode是否在線,一個數(shù)據(jù)塊報告包含所有這個數(shù)據(jù)節(jié)點上的所有block的狀況

  3. 首先將fsimage(鏡像)載入內存,并讀取執(zhí)行日志editlog的各項操作

  4. 一旦在內存中建立文件系統(tǒng)元數(shù)據(jù)映射,則創(chuàng)建一個新的fsimage文件(這個過程不需要secondaryNamenode)和一個空的editlog

  5. 在安全模式下,各個datanode會向namenode發(fā)送塊列表的最新情況

  6. 此刻namenode運行在安全模式。即NameNode的文件系統(tǒng)對于客戶端來說是只讀

  7. NameNode開始監(jiān)聽RPC和HTTP請求

啟動過程

RPC:Remote Procedure Call Protocol---遠程過程通過協(xié)議

它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協(xié)議

  1. 系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode維護的,而是以塊列表形式存儲在datanode中

  2. 在系統(tǒng)的正常操作期間,namenode會在內存中保留所有塊信息的映射信息

  3. fsimage:元數(shù)據(jù)鏡像文件(保存文件系統(tǒng)的目錄樹)

  4. edit.log:元數(shù)據(jù)操作日志(針對目錄樹的修改操作)

兩個重要文件元數(shù)據(jù)鏡像

a)?內存中保存一份最新的

b)?內存中鏡像=fsimage+edits

SecondaryNamenode工作任務

定期合并fsimage與edits

c)?Edits文件過大將導致NamenNode重啟速度緩慢

d)?SecondaryNameNode負責定期合并他們

?

Datanode

hdfs的寫過程

好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS

寫過程語言Description:
  1. Client通過調用FileSystem的get方法與namenode進程建立通道進行通信,然后調用create方法來請求創(chuàng)建文件。

  2. FileSystem通過對namenode發(fā)出遠程請求,在namenode里面創(chuàng)建一個新的文件,但此時并不關聯(lián)任何的塊。NameNode進行很多檢查來保證不存在要創(chuàng)建的文件已經存在文件系統(tǒng)中,同時檢查是否有相應的權限來創(chuàng)建文件。如果這些檢查完了,nameNameNode將這個新文件的嘻嘻記錄下來,然后FileSystem返回一個DFSOutputStream給客戶端用來寫入數(shù)據(jù)。和讀的情形一樣,F(xiàn)SDataOutputStream將包裝一個DFSOutputStream用于和DataNode及NameNode通信。而一旦文件創(chuàng)建失敗,客戶端會受到一個IOException,標識文件創(chuàng)建失敗,停止后續(xù)任務。

  3. 客戶端開始寫數(shù)。FSDataOutputStream把要寫入的數(shù)據(jù)分成塊打成包的形式,將其寫入到DFSOutputStream對象的中間隊列中。其中的數(shù)據(jù)由Datastreamer來讀取。DataStreamer的職責是讓NameNode分配新的塊—找出合適的DataNode來存儲作為備份而復制的數(shù)據(jù)。

  4. FSDataOutputStream維護了一個內部關于packets的隊列,里面存放等待被DataNode確認無誤的packets的信息。這個隊列被稱為等待隊列,一個packet的信息被移出本隊列當且僅當packet被所有節(jié)點都確認無誤。

  5. 當完成數(shù)據(jù)寫入之后客戶端調用流的close方法,再通知NameNode完成寫入之前,這個方法將flush殘留的packets,并等待確認信息。NameNode已經知道文件由哪些塊組成,所以在返回成功前只需要等待數(shù)據(jù)塊進行最小復制。

Write?API:
1.從本地系統(tǒng)上傳到hdfs

Configuration?hdfsConf?= new Configuration();//創(chuàng)建一個hdfs的環(huán)境變量

String namenodeURI=”hdfs://hadoop001:8020”;//namenode的統(tǒng)一資源定位符

String username=”root”;//訪問指定用戶的hdfs

FileSystem hdfs = FileSystem.get(new URI(namenodeURI),hdfsConf,username);//創(chuàng)建一個hdfs的文件系統(tǒng)對象

FileSystem local = FileSystem.getLocal(new?Configuration());//創(chuàng)建一個本地的文件系統(tǒng)對象

hdfs.copyFromLocalFile(new Path(localPath),new Path(hdfsPath));

2.在hdfs上創(chuàng)建文件并直接給定文件的內容

FSDateOutputStream out = hdfs.create(new Path(hdfsPath));

out.write(fileContent.getBytes());

out.close();

hdfs的讀過程

好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS

讀過程語言Description:
  1. 客戶端或者用戶通過調用FileSystem對象的open方法打開需要讀取的文件,這對HDFS來說是常見一個分布式文件系統(tǒng)的一個讀取實例。

  2. FileSystem通過遠程協(xié)議調用NameNode確定文件的前幾個Block的位置。對于每一個Block,Namenode返回含有那個Block?的“元數(shù)據(jù)”,即文件基本信息;接下來,DataNode按照上文定義的距離來進行排序,如果Client本身就是一個DataNode優(yōu)先從本地DataNode讀物數(shù)據(jù)。HDFS實例完成以上工作后,返回一個FSDataInputStream給客戶端,讓其從FSDataInputStream中讀取數(shù)據(jù)。FSDataInputStream接著包裝一個DFSInputStream用來管理DataNode和NameNode的I/O。

  3. NameNode向客戶端返回一個包含數(shù)據(jù)信息的地址,客戶端格努詆毀創(chuàng)建一個FSDataInputStream開始對數(shù)據(jù)進行讀取。

  4. FSDataInputStream根據(jù)開始存放的前幾個Blocks的DataNode的地址,連接到最近的DataNode上對數(shù)據(jù)開始從頭讀取??蛻舳朔磸驼{用read()方法,以流式方式從DataNode讀取數(shù)據(jù)

  5. 當讀到Block的結尾的時候,F(xiàn)SDataInputStream會關閉當前DataNode的地址,然后查找能夠讀取下一個Block的最好的DataNode。這些操作對客戶端是透明的,客戶端感覺到的是連續(xù)的流,也就是說讀取的時候就開始查找下一個塊所在的地址。

  6. 讀取完成調用close()方法,關閉FSDataInputStream。

Read?API:
1.從hdfs上下載文件到本地

Configuration?hdfsConf?= new Configuration();//創(chuàng)建一個hdfs的環(huán)境變量

String namenodeURI=”hdfs://hadoop001:8020”;//namenode的統(tǒng)一資源定位符

String username=”root”;//訪問指定用戶的hdfs

FileSystem hdfs = FileSystem.get(new URI(namenodeURI),hdfsConf,username);//創(chuàng)建一個hdfs的文件系統(tǒng)對象

FileSystem local = FileSystem.getLocal(new?Configuration());//創(chuàng)建一個本地的文件系統(tǒng)對象

hdfs.copyToLocalFile(new Path(hdfsPath),new Path(localPath));

3.?在hdfs上讀取給定文件的內容

Path path = new Path(hdfsFilePath);//文件路徑

FSDataInputStream in = hdfs.open(path);//獲取文件輸入流

FileStatus status = hdfs.getFileStatus(path);//獲取文件的元數(shù)據(jù)信息

//獲取文件元數(shù)據(jù)中的文件大小

byte[] bytes = new byte[Integer.pareInt(String.valueOf(status.getLen()))];

//將輸入流中的全部內容一次性讀取出來

in.readFully(0,bytes);

System.out.println(new String(bytes));//將讀取的文件打印輸出

in.close();

hdfs的整體過程

好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS


網站題目:好程序員大數(shù)據(jù)學習路線分享分布式文件系統(tǒng)HDFS
當前地址:http://www.dlmjj.cn/article/ghhidj.html