Java+大數據開發——HDFS詳解


1. HDFS 介紹

 • 什么是HDFS

  首先,它是一個文件系統,用於存儲文件,通過統一的命名空間——目錄樹來定位文件。

    其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色;

 • 設計思想

    分而治之:將大文件、大批量文件,分布式存放在大量服務器上,以便於采取分而治之的方式對海量數據進行運算分析;

 • 在大數據系統中作用:

  為各類分布式運算框架(如:mapreducesparktez……)提供數據存儲服務。

 • Hdfs整體架構如下

 

2. HDFS的特性

(1)HDFS中的文件在物理上是分塊存儲(block。塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在hadoop2.x版本中是128M

(2)HDFS文件系統會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

(3)目錄結構及文件分塊信息(元數據)的管理由namenode節點承擔,namenodeHDFS集群主節點,負責維護整個hdfs文件系統的目錄樹,以及每一個路徑(文件)所對應的block塊信息。

(4)文件的各個block的存儲管理由datanode節點承擔,datanodeHDFS集群從節點,每一個block都可以在多個datanode上存儲多個副本(副本數量也可以通過參數設置dfs.replication)。

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

 

3. HDFS 的shell(命令行客戶端)操作

3.1HDFS命令行客戶端使用

HDFS提供shell命令行客戶端,使用命令語法為:hadoop fs <args>,它支持支持多種文件系統的訪問,主要包括LocalHDFS兩種,配置文件中的fs.defaultFS的值決定了默認訪問的文件系統。其中命令中的“fs”表示FileSystem Shell。

“<args>”“fs”的子命令,包括:

創建目錄:mkdir

列表文件:ls

查看文件:cat

轉移文件:put、get、mv、cp

刪除文件:rm、rmr

管理命令:test、du、expunge

3.2常用命令參數介紹

 

-help             

功能:輸出這個命令參數手冊

-ls                  

功能:顯示目錄信息

示例: hadoop fs -ls hdfs://hadoop-server01:9000/

備注:這些參數中,所有的hdfs路徑都可以簡寫

-->hadoop fs -ls /   等同於上一條命令的效果

-mkdir              

功能:在hdfs上創建目錄

示例:hadoop fs  -mkdir  -p  /aaa/bbb/cc/dd

--appendToFile  

功能:追加一個文件到已經存在的文件末尾

示例:hadoop  fs  -appendToFile  ./hello.txt  hdfs://hadoop-server01:9000/hello.txt

可以簡寫為:Hadoop  fs  -appendToFile  ./hello.txt  /hello.txt

-cat  

功能:顯示文件內容  

示例:hadoop fs -cat  /hello.txt

-cp              

功能:從hdfs的一個路徑拷貝hdfs的另一個路徑

示例: hadoop  fs  -cp  /aaa/jdk.tar.gz  /bbb/jdk.tar.gz.2

-mv                     

功能:在hdfs目錄中移動文件

示例: hadoop  fs  -mv  /aaa/jdk.tar.gz  /

-get              

功能:等同於copyToLocal,就是從hdfs下載文件到本地

示例:hadoop fs -get  /aaa/jdk.tar.gz

-put                

功能:等同於copyFromLocal

示例:hadoop  fs  -put  /aaa/jdk.tar.gz  /bbb/jdk.tar.gz.2

-rm                

功能:刪除文件或文件夾

示例:hadoop fs -rm -r /aaa/bbb/

 

4. HDFS 的工作機制

4.1概述

          1、HDFS集群分為兩大角色:NameNodeDataNode

          2、NameNode負責管理整個文件系統的元數據;

          3、DataNode 負責管理用戶的文件數據塊;

     4、文件會按照固定的大小(blocksize)切成若干塊后分布式存儲在若干台datanode上;

     5、每一個文件塊可以有多個副本,並存放在不同的datanode上;

          6、Datanode會定期向Namenode匯報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量;

          7、HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行;

 

4.2HDFS寫數據流程

客戶端要向HDFS寫數據,首先要跟namenode通信以確認可以寫文件並獲得接收文件blockdatanode,然后,客戶端按順序將文件逐個block傳遞給相應datanode,並由接收到blockdatanode負責向其他datanode復制block的副本。

 

4.3HDFS讀數據流程

客戶端將要讀取的文件路徑發送給namenodenamenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據返回的信息找到相應datanode逐個獲取文件的block並在客戶端本地進行數據追加合並從而獲得整個文件。

 

5.NAMENODE 工作機制

5.1NAMENODE 職責

NAMENODE職責:負責客戶端請求的響應以及元數據的管理(查詢,修改)。

 

5.2元數據管理

namenode對數據的管理采用了三種存儲形式:

1、內存元數據(NameSystem)

2、磁盤元數據鏡像文件

3、數據操作日志文件(可通過日志運算出元數據)

 

5.3元數據儲存機制

A、內存中有一份完整的元數據(內存meta data)

B、磁盤有一個“准完整”的元數據鏡像(fsimage)文件(namenode的工作目錄中)

C、用於銜接內存metadata和持久化元數據鏡像fsimage之間的操作日志(edits文件)

 

5.4元數據手動查看

可以通過hdfs的一個工具來查看edits中的信息

bin/hdfs oev -i edits -o edits.xml

bin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml

 

5.5元數據的checkpoint

每隔一段時間,會由secondary namenodenamenode上積累的所有edits和一個最新的fsimage下載到本地,並加載到內存進行merge(這個過程稱為checkpoint

 

6. DATANODE 的工作機制

6.1DATANODE 工作職責

1、存儲管理用戶的文件塊數據

2、定期向namenode匯報自身所持有的block信息(通過心跳信息上報)

 

6.2觀察驗證DATANODE 功能

上傳一個文件,觀察文件的block具體的物理存放情況:

在每一台datanode機器上的這個目錄中能找到文件的切塊:

/home/hadoop/app/hadoop-2.6.5/tmp/dfs/data/current/BP-193442119-192.168.2.120-1432457733977/current/finalized

 

作者:傑瑞教育
出處: http://www.cnblogs.com/jerehedu/ 
版權聲明:本文版權歸 傑瑞教育 技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
技術咨詢:JRedu技術交流

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM