溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HDFS 入門和基本操作

發(fā)布時間:2020-08-02 17:53:17 來源:網(wǎng)絡(luò) 閱讀:349 作者:萬和IT教育 欄目:大數(shù)據(jù)
1、HDFS 是做什么的

  Hadoop實現(xiàn)了一個分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS,hdfs是分布式計算中數(shù)據(jù)存儲管理的基礎(chǔ),是基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā)的,可以運行于廉價的商用服務(wù)器上。它所具有的高容錯、高可靠性、高可擴展性、高獲得性、高吞吐率等特征為海量數(shù)據(jù)提供了不怕故障的存儲,為超大數(shù)據(jù)集(Large Data Set)的應(yīng)用處理帶來了很多便利。

2、為什么選擇 HDFS 存儲數(shù)據(jù)

  之所以選擇 HDFS 存儲數(shù)據(jù),因為 HDFS 具有以下優(yōu)點:

1、高容錯性

? 數(shù)據(jù)自動保存多個副本。它通過增加副本的形式,提高容錯性。

? 某一個副本丟失以后,它可以自動恢復(fù),這是由 HDFS 內(nèi)部機制實現(xiàn)的,我們不必關(guān)心。

2、適合批處理

? 它是通過移動計算而不是移動數(shù)據(jù)。

? 它會把數(shù)據(jù)位置暴露給計算框架。

3、適合大數(shù)據(jù)處理
     處理數(shù)據(jù)達(dá)到 GB、TB、甚至PB級別的數(shù)據(jù)。

? 能夠處理百萬規(guī)模以上的文件數(shù)量,數(shù)量相當(dāng)之大。

? 能夠處理10K節(jié)點的規(guī)模。

4、流式文件訪問

? 一次寫入,多次讀取。文件一旦寫入不能修改,只能追加。

? 它能保證數(shù)據(jù)的一致性。

  5、可構(gòu)建在廉價機器上

? 它通過多副本機制,提高可靠性。

? 它提供了容錯和恢復(fù)機制。比如某一個副本丟失,可以通過其它副本來恢復(fù)。

  當(dāng)然 HDFS 也有它的劣勢,并不適合所有的場合:

1、低延時數(shù)據(jù)訪問

? 比如毫秒級的來存儲數(shù)據(jù),這是不行的,它做不到。

? 它適合高吞吐率的場景,就是在某一時間內(nèi)寫入大量的數(shù)據(jù)。但是它在低延時的情況下是不行的,比如毫秒級以內(nèi)讀取數(shù)據(jù),這樣它是很難做到的。

2、小文件存儲

? 存儲大量小文件(這里的小文件是指小于HDFS系統(tǒng)的Block大小的文件(默認(rèn)64M))的話,它會占用 NameNode大量的內(nèi)存來存儲文件、目錄和塊信息。這樣是不可取的,因為NameNode的內(nèi)存總是有限的

? 小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設(shè)計目標(biāo)。

3、并發(fā)寫入、文件隨機修改

? 一個文件只能有一個寫,不允許多個線程同時寫。

? 僅支持?jǐn)?shù)據(jù) append(追加),不支持文件的隨機修改。

3、內(nèi)部結(jié)構(gòu)

HDFS 入門和基本操作

HDFS 如何上傳數(shù)據(jù)

HDFS 入門和基本操作

HDFS 采用Master/Slave的架構(gòu)來存儲數(shù)據(jù),這種架構(gòu)主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分

1、Client:就是客戶端。
  • 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進(jìn)行存儲。
  • 與 NameNode 交互,獲取文件的位置信息。
  • 與 DataNode 交互,讀取或者寫入數(shù)據(jù)。
  • Client 提供一些命令來管理 HDFS,比如啟動或者關(guān)閉HDFS。
  • Client 可以通過一些命令來訪問 HDFS。
2、NameNode:就是 master,它是一個主管、管理者。
  • 管理 HDFS 的名稱空間
  • 管理數(shù)據(jù)塊(Block)映射信息
  • 配置副本策略
  • 處理客戶端讀寫請求。
3、DataNode:就是Slave。NameNode 下達(dá)命令,DataNode 執(zhí)行實際的操作。
  • 存儲實際的數(shù)據(jù)塊。
  • 執(zhí)行數(shù)據(jù)塊的讀/寫操作。
4、Secondary NameNode:并非 NameNode 的熱備。當(dāng)NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務(wù)。
  • 輔助 NameNode,分擔(dān)其工作量。
  • 定期合并 fsimage和fsedits,并推送給NameNode。
  • 在緊急情況下,可輔助恢復(fù) NameNode。
5、HDFS 如何讀取文件

HDFS 入門和基本操作

HDFS的文件讀取原理,主要包括以下幾個步驟:

  • 首先調(diào)用FileSystem對象的open方法,其實獲取的是一個DistributedFileSystem的實例。
  • DistributedFileSystem通過RPC(遠(yuǎn)程過程調(diào)用)獲得文件的第一批block的locations,同一block按照重復(fù)數(shù)會返回多個locations,這些locations按照hadoop拓?fù)浣Y(jié)構(gòu)排序,距離客戶端近的排在前面。
  • 前兩步會返回一個FSDataInputStream對象,該對象會被封裝成 DFSInputStream對象,DFSInputStream可以方便的管理datanode和namenode數(shù)據(jù)流??蛻舳苏{(diào)用read方法,DFSInputStream就會找出離客戶端最近的datanode并連接datanode。
  • 數(shù)據(jù)從datanode源源不斷的流向客戶端。
  • 如果第一個block塊的數(shù)據(jù)讀完了,就會關(guān)閉指向第一個block塊的datanode連接,接著讀取下一個block塊。這些操作對客戶端來說是透明的,從客戶端的角度來看只是讀一個持續(xù)不斷的流。
  • 如果第一批block都讀完了,DFSInputStream就會去namenode拿下一批blocks的location,然后繼續(xù)讀,如果所有的block塊都讀完,這時就會關(guān)閉掉所有的流。
6、HDFS 如何寫入文件

HDFS 入門和基本操作

HDFS的文件寫入原理,主要包括以下幾個步驟:

  • 客戶端通過調(diào)用 DistributedFileSystem 的create方法,創(chuàng)建一個新的文件。
  • DistributedFileSystem 通過 RPC(遠(yuǎn)程過程調(diào)用)調(diào)用 NameNode,去創(chuàng)建一個沒有blocks關(guān)聯(lián)的新文件。創(chuàng)建前,NameNode 會做各種校驗,比如文件是否存在,客戶端有無權(quán)限去創(chuàng)建等。如果校驗通過,NameNode 就會記錄下新文件,否則就會拋出IO異常。
  • 前兩步結(jié)束后會返回 FSDataOutputStream 的對象,和讀文件的時候相似,F(xiàn)SDataOutputStream 被封裝成 DFSOutputStream,DFSOutputStream 可以協(xié)調(diào) NameNode和 DataNode??蛻舳碎_始寫數(shù)據(jù)到DFSOutputStream,DFSOutputStream會把數(shù)據(jù)切成一個個小packet,然后排成隊列 data queue。
  • DataStreamer 會去處理接受 data queue,它先問詢 NameNode 這個新的 block 最適合存儲的在哪幾個DataNode里,比如重復(fù)數(shù)是3,那么就找到3個最適合的 DataNode,把它們排成一個 pipeline。DataStreamer 把 packet 按隊列輸出到管道的第一個 DataNode 中,第一個 DataNode又把 packet 輸出到第二個 DataNode 中,以此類推。
  • DFSOutputStream 還有一個隊列叫 ack queue,也是由 packet 組成,等待DataNode的收到響應(yīng),當(dāng)pipeline中的所有DataNode都表示已經(jīng)收到的時候,這時akc queue才會把對應(yīng)的packet包移除掉。
  • 客戶端完成寫數(shù)據(jù)后,調(diào)用close方法關(guān)閉寫入流。
  • DataStreamer 把剩余的包都刷到 pipeline 里,然后等待 ack 信息,收到最后一個 ack 后,通知 DataNode 把文件標(biāo)示為已完成。
7、命令行接口

兩個屬性項: fs.default.name 用來設(shè)置Hadoop的默認(rèn)文件系統(tǒng),設(shè)置hdfs URL則是配置HDFS為Hadoop的默認(rèn)文件系統(tǒng)。dfs.replication 設(shè)置文件系統(tǒng)塊的副本個數(shù)

文件系統(tǒng)的基本操作:hadoop fs -help可以獲取所有的命令及其解釋

常用的有:

  • hadoop fs -ls / 列出hdfs文件系統(tǒng)根目錄下的目錄和文件
  • hadoop fs -put<local path> <hdfs path> 從本地文件系統(tǒng)將一個文件上傳到HDFS
  • hadoop fs -get<hdfs path> <local path> 從本地文件系統(tǒng)將一個文件上傳到HDFS
  • hadoop fs -rm -r <hdfs dir or file> 刪除文件或文件夾及文件夾下的文件
  • hadoop fs -mkdir <hdfs dir>在hdfs中新建文件夾

操作路程

  • cd hadoop.2.5.2

  • cd sbin

  • ./start-all.sh //啟動hdfs服務(wù),yarn服務(wù)

  • cd ..

  • cd bin

  • ./haoop dfs –ls / 解釋:./hdfs 是hdfs命令 dfs參數(shù) 表示在hadoop里有效 –ls /顯示hdfs根目錄

  • ./haoop dfs –rm /test/count/SUCCESS //刪除/test/count目錄里的SUCCESS文件

  • ./haoop dfs –rmr /test/count/output //刪除/test/count/output目錄

  • ./haoop dfs –mkdir /test/count/input //創(chuàng)建/test/count/input目錄

  • 從linux的 共享文件夾取得要分析的文件,上傳到 hdfs

    ./hadoop fs –put /mnt/hgfs/share/phone.txt /test/network

  • 執(zhí)行代碼分析,

    ./hadoop jar /mnt/hgfs/share/mobile.jar com.wanho.hadoopmobile.PhoneDriver

  • 將產(chǎn)生的結(jié)果,傳回linux的共享文件夾

    ./hadoop fs –get /test/network/output1 /mnt/hgfs/share

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI