本次介紹HDFS,分為上,中,下,三篇
- 上篇入HDFS門介紹,常用操作
- 中篇為HDFS的讀寫原理介紹
- 下篇為HDFS的測試Demo,常用API
1. HDFS的基本概念
-
HDFS的介紹
HDFS 是 Hadoop Distribute File System 的簡稱, 意為: Hadoop 分布式檔案系統。 是 Hadoop 核心元件之一,作為最底層的分布式存儲服務而存在。
分布式檔案系統解決的問題就是大資料存儲。 它們是橫跨在多台計算機上的存儲系統。分布式檔案系統在大資料時代有着廣泛的應用前景,它們為存儲和處理超大規模資料提供所需的擴充能力
- HDFS的設計目的
- 要裡了解一個架構設計的目的,需要從架構出現之前面對的問題入手,這裡我們進行繪圖示範,說明檔案的存儲從簡單到複雜的演化過程,最終形成了安全可靠快速的HDFS檔案存儲系統。
- 過程1
- 過程2
存儲模式2就是簡單的HDFS的存儲模型,具體的存儲過程,在下一篇的存儲和讀取中會進行詳細的講解。
2.HDFS的重要特性
-
master/slave 架構
HDFS 采用 master/slave 架構。 一般一個 HDFS 叢集是有一個 Namenode 和一定數目的 Datanode 組成。 Namenode 是 HDFS 叢集主節點, Datanode 是 HDFS 叢集從節點,兩種角色各司其職,共同協調完成分布式的檔案存儲服務。
-
分塊存儲
HDFS 中的檔案在實體上是分塊存儲(block) 的,塊的大小可以通過配置參數來規定,預設大小在 hadoop2.x 版本中是 128M。
-
命名空間NameSpace
HDFS 支援傳統的層次型檔案組織結構。使用者或者應用程式可以建立目錄,然後将檔案儲存在這些目錄裡。檔案系統名字空間的層次結構和大多數現有的檔案系統類似:使用者可以建立、删除、移動或重命名檔案。
Namenode 負責維護檔案系統的名字空間,任何對檔案系統名字空間或屬性
的修改都将被 Namenode 記錄下來。
HDFS 會給用戶端提供一個統一的抽象目錄樹,用戶端通過路徑來通路檔案,
形如: hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
-
Namenode 中繼資料管理
-我們把目錄結構及檔案分塊位置資訊叫做中繼資料。 Namenode 負責維護整個hdfs 檔案系統的目錄樹結構,以及每一個檔案所對應的 block 塊資訊(block 的
id,及所在的 datanode 伺服器)。
-
DataNode資料存儲
檔案的各個 block 的具體存儲管理由 datanode 節點承擔。 每一個 block 都可以在多個 datanode 上。 Datanode 需要定時向 Namenode 彙報自己持有的 block資訊。存儲多個副本(副本數量也可以通過參數設定 dfs.replication,預設是 3)。
-
副本機制
為了容錯,檔案的所有 block 都會有副本。每個檔案的 block 大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指定,也可以在之後改變。
-
一次寫入,多次讀出
HDFS 是設計成适應一次寫入,多次讀出的場景,且不支援檔案的修改。正因為如此, HDFS 适合用來做大資料分析的底層存儲服務,并不适合用來做.網盤等應用,因為,修改不友善,延遲大,網絡開銷大,成本太高。
3. HDFS的基本操作
-
Shell指令行用戶端
Hadoop 提供了檔案系統的 shell 指令行用戶端,使用方法如下:
檔案系統 shell 包括與 Hadoop 分布式檔案系統( HDFS)以及 Hadoop 支援的其他檔案系統( 如本地 FS, HFTP FS, S3 FS 等) 直接互動的各種類似 shell
的指令。 所有 FS shell 指令都将路徑 URI 作為參數。
對于 HDFS,該 scheme 是 hdfs,對于本地 FS,該 scheme 是 file。 scheme 和 authority 是可選的。 如果未指定,則使用配置中指定的預設方案。
對于 HDFS,指令示例如下:
hadoop fs -ls hdfs://namenode:host/parent/child
//hadoop fs -ls /parent/child fs.defaultFS 中有配置
對于本地檔案系統,指令示例如下:
如果使用的檔案系統是 HDFS,則使用 hdfs dfs 也是可以的,hadoop1.x的使用方式。
指令如下
具體示範如下
-
-ls
功能: 顯示檔案、 目錄資訊。
使用方法: hadoop fs -ls [-h] [-R] <args>
執行個體:hadoop fs -ls /user/hadoop/file1
-
-mkdir
功能: 在 hdfs 上建立目錄, -p 表示會建立路徑中的各級父目錄。
使用方法: hadoop fs -mkdir [-p] <paths>
示例: hadoop fs -mkdir – p /user/hadoop/dir1
-
-put
功能: 将單個 src 或多個 srcs 從本地檔案系統複制到目标檔案系統。
使用方法: hadoop fs -put [-f] [-p] [ -|<localsrc1> .. ]. <dst>
-p:保留通路和修改時間,所有權和權限。
-f:覆寫目的地(如果已經存在)
示例: hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
-
-get
功能:将檔案下載下傳到本地系統
使用方法: hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
-ignorecrc:跳過對下載下傳檔案的 CRC 檢查。
-crc:為下載下傳的檔案寫 CRC 校驗和。
示例: hadoop fs -get hdfs://host:port/user/hadoop/file localfile
-
-appendToFile
功能:追加一個檔案到已經存在的檔案末尾
使用方法: hadoop fs -appendToFile <localsrc> ... <dst>
示例: hadoop fs -appendToFile localfile /hadoop/hadoopfile
-
-cat
功能:顯示檔案内容到 stdout
使用方法: hadoop fs -cat [-ignoreCrc] URI [URI ...]
示例: hadoop fs -cat /hadoop/hadoopfile
-
-tail
功能: 将檔案的最後一千位元組内容顯示到 stdout。
使用方法: hadoop fs -tail [-f] URI
-f 選項将在檔案增長時輸出附加資料。
示例: hadoop fs -tail /hadoop/hadoopfile
-
-chmod
功能: 改變檔案的權限。使用-R 将使改變在目錄結構下遞歸進行。
示例: hadoop fs -chmod /hadoop/hadoopfile
-
-cp
功能:從 hdfs 的一個路徑拷貝 hdfs 的另一個路徑
-
-mv
功能:在 hdfs 目錄中移動檔案
示例: hadoop fs -mv /aaa/jdk.tar.gz /
-
-rm
功能: 删除指定的檔案。隻删除非空目錄和檔案。 -r 遞歸删除。
-
-df
功能:統計檔案系統的可用空間資訊
-
-du
功能: 顯示目錄中所有檔案大小,當隻指定一個檔案時,顯示此檔案的大小。
示例: hadoop fs -du /user/hadoop/dir1
-
-setrep
功能: 改變一個檔案的副本系數。 -R 選項用于遞歸改變目錄下所有檔案的副本
系數。
示例: hadoop fs -setrep -w -R /user/hadoop/dir1
上篇的内容的到此結束
本部落客要對大資料的學習進行系統的講解,感興趣的同學可以關注訂閱。