hdfs的基本原理和基本操作總結

                                                                                                                     

                                                                                hdfs基本原理

Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有很多共同點。但同時,它和其他的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是作爲Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。

HDFS有着高容錯性(fault-tolerant)的特點,並且設計用來部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以實現流的形式訪問(streaming access)文件系統中的數據。

HDFS的主要組成:NameNode,SecondaryNameNode,DataNonde;

HDFS的基本操作:讀、寫、均衡;

圖1,NameNode

圖2,SecondaryNameNode

 

圖3,客戶端的讀請求

 

圖4,讀取DataNode上的塊

圖5,寫文件請求

 

圖6,準備寫

 

圖7,單塊的管線式寫入數據節點

圖8,多塊的管線式寫入數據節點

圖9 重寫損壞的數據塊副本

圖10 不均衡的集羣

圖11 均衡的集羣



    

     運行在HDFS之上的程序有很大量的數據集。典型的HDFS文件大小是GB到TB的級別。所以,HDFS被調整成支持大文件。它應 該提供很高的聚合數據帶寬,一個集羣中支持數百個節點,一個集羣中還應該支持千萬級別的文件。                                                       

       大部分的HDFS程序對文件操作需要的是一次寫多次讀取的操作模式。一個文件一旦創建、寫入、關閉之後就不需要修改了。這個假定簡單化了數據一致的問題和並使高吞吐量的數據訪問變得可能。一個Map-Reduce程序或者網絡爬蟲程序都可以完美地適合這個模型。                                                                                                                                                                                                                       

       HDFS是一個主從結構,一個HDFS集羣是由一個名字節點,它是一個管理文件命名空間和調節客戶端訪問文件的主服務器,當然還有一些數據節點,通常是一個節點一個機器,它來管理對應節點的存儲。HDFS對外開放文件命名空間並允許用戶數據以文件形式存儲。內部機制是將一個文件分割成一個或多個塊,這些塊被存儲在一組數據節點中。名字節點用來操作文件命名空間的文件或目錄操作,如打開,關閉,重命名等等。它同時確定塊與數據節點的映射。數據節點負責來自文件系統客戶的讀寫請求。數據節點同時還要執行塊的創建,刪除,和來自名字節點的塊複製指令。                                                                                                                     

         名字節點和數據節點都是運行在普通的機器之上的軟件,機器典型的都是GNU/Linux,HDFS是用java編寫的,任何支持java的機器都可以運行名字節點或數據節點,利用java語言的超輕便型,很容易將HDFS部署到大範圍的機器上。典型的部署是由一個專門的機器來運行名字節點軟件,集羣中的其他每臺機器運行一個數據節點實例。體系結構不排斥在一個機器上運行多個數據節點的實例,但是實際的部署不會有這種情況。集羣中只有一個名字節點極大地簡單化了系統的體系結構。名字節點是仲裁者和所有HDFS元數據的倉庫,用戶的實際數據不經過名字節點。                                                                                                                                                  

         HDFS是一個不錯的分佈式文件系統,它有很多的優點,但也存在有一些缺點,包括:不適合低延遲數據訪問、無法高效存儲大量小文件、不支持多用戶寫入及任意修改文件。                                                                                                                                              

      

                                                                                  HDFS 常用的基本操作命令                                      

1,HDFS  Shell                                                                                                                                                                                               

    查看 hadoop fs                                                                                                                                                                           

2, 常見命令                                                                                                                                                                                                                                                                                                                                                                                                                        

-ls 顯示當前目錄結構

    該命令選項表示查看指定路徑的當前目錄結構,後面跟hdfs 路徑,如圖所示。    上圖中的路徑是hdfs 根目錄,顯示的內容格式與linux 的命令ls –l 顯示的內容格式非常相似,解析每一行的內容格式:                                                                                         

                                    1. 首字母表示文件夾(如果是“d”)還是文件(如果是“-”);                                                                                                                       2. 後面的9 位字符表示權限;                                                                                                                                       

         3. 後面的數字或者“-”表示副本數。如果是文件,使用數字表示副本數;文件夾沒有副本;

4. 後面的“root”表示屬主;                                                                                                             

5. 後面的“supergroup”表示屬組 ;                                                                                             

6. 後面的“0”、“6176”、“37645”表示文件大小,單位是字節 ;                                          

7. 後面的時間表示修改時間,格式是年月日時分;                                                                 

8. 最後一項表示文件路徑。                                                                                                            

-du 統計目錄下各文件大小

-mv 移動

該命令選項表示移動hdfs 的文件到指定的hdfs 目錄中。後面跟兩個路徑,第一個表示源文件,第二個表示目的目錄。

-cp 複製

該命令選項表示複製hdfs 指定的文件到指定的hdfs 目錄中。後面跟兩個路徑,第一個是被複制的文件,第二個是目的地

-rm 刪除文件/空白文件夾

該命令選項表示刪除指定的文件或者空目錄

-rmr 遞歸刪除

該命令選項表示遞歸刪除指定目錄下的所有子目錄和文件

-put 上傳文件

該命令選項表示把linux 上的文件複製到hdfs 中

-copyFromLocal 從本地複製

操作與-put 一致

-moveFromLocal 從本地移動

該命令表示把文件從linux 上移動到hdfs 中

getmerge 合併到本地

該命令選項的含義是把hdfs 指定目錄下的所有文件內容合併到本地linux 的文件中

-cat 查看文件內容

該命令選項是查看文件內容

-text 查看文件內容

該命令選項可以認爲作用和用法與-cat 相同,此處略。

       -mkdir 創建空白文件夾

該命令選項表示創建文件夾,後面跟的路徑是在hdfs 將要創建的文件夾

-setrep 設置副本數量

該命令選項是修改已保存文件的副本數量,後面跟副本數量,再跟文件路徑

-touchz 創建空白文件

該命令選項是在hdfs 中創建空白文件

-stat 顯示文件的統計信息

該命令選項顯示文件的一些統計信息

-tail 查看文件尾部內容

該命令選項顯示文件最後1K 字節的內容。一般用於查看日誌。如果帶有選項-f,那麼當文件內容變化時,也會自動顯示

-chmod 修改文件權限

該命令選項的使用類似於linux 的shell 中的chmod 用法,作用是修改文件的權限

-chown 修改屬主

該命令選項表示修改文件的屬主

-help 幫助

該命令選項會顯示幫助信息,後面跟上需要查詢的命令選項即可


3,數據的讀寫過程

管線式(PipeLine)寫入:當客戶端寫數據到HDFS文件中時,數據首先被寫入本地文件中,假設HDFS文件的複製因子是3,當本地文件堆積到一塊大小的數據,客戶端從名字節點獲得一個數據節點的列表。這個列表也包含存放數據塊副本的數據節點。當客戶端刷新數據塊到第一個數據節點。第一個數據節點開始以4kb爲單元接收數據,將每一小塊都寫到本地庫中,同時將每一小塊都傳送到列表中的第二個數據節點。同理,第二個數據節點將小塊數據寫入本地庫中同時傳給第三個數據節點,第三個數據節點直接寫到本地庫中。一個數據節點在接前一個節點數據的同時,還可以將數據流水式傳遞給下一個節點,所以,數據是流水式地從一個數據節點傳遞到下一個。 因此,三個節點的寫數據完成的時間相差不多。                        

    

                                                                                              

                                                                                                                                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章