| 1. HDFS 介紹 |
• 什么是HDFS
首先,它是一個文件系統,用於存儲文件,通過統一的命名空間——目錄樹來定位文件。
其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色;
• 設計思想
分而治之:將大文件、大批量文件,分布式存放在大量服務器上,以便於采取分而治之的方式對海量數據進行運算分析;
• 在大數據系統中作用:
為各類分布式運算框架(如:mapreduce,spark,tez,……)提供數據存儲服務。
• 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節點承擔,namenode是HDFS集群主節點,負責維護整個hdfs文件系統的目錄樹,以及每一個路徑(文件)所對應的block塊信息。
(4)文件的各個block的存儲管理由datanode節點承擔,datanode是HDFS集群從節點,每一個block都可以在多個datanode上存儲多個副本(副本數量也可以通過參數設置dfs.replication)。
(5)HDFS是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。
| 3. HDFS 的shell(命令行客戶端)操作 |
3.1HDFS命令行客戶端使用
HDFS提供shell命令行客戶端,使用命令語法為:hadoop fs <args>,它支持支持多種文件系統的訪問,主要包括Local和HDFS兩種,配置文件中的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集群分為兩大角色:NameNode、DataNode;
2、NameNode負責管理整個文件系統的元數據;
3、DataNode 負責管理用戶的文件數據塊;
4、文件會按照固定的大小(blocksize)切成若干塊后分布式存儲在若干台datanode上;
5、每一個文件塊可以有多個副本,並存放在不同的datanode上;
6、Datanode會定期向Namenode匯報自身所保存的文件block信息,而namenode則會負責保持文件的副本數量;
7、HDFS的內部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向namenode申請來進行;
4.2HDFS寫數據流程
客戶端要向HDFS寫數據,首先要跟namenode通信以確認可以寫文件並獲得接收文件block的datanode,然后,客戶端按順序將文件逐個block傳遞給相應datanode,並由接收到block的datanode負責向其他datanode復制block的副本。
4.3HDFS讀數據流程
客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是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 namenode將namenode上積累的所有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/
版權聲明:本文版權歸煙 台 傑瑞教育 科 技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
技術咨詢:
