HDFS是英文Hadoop Distributed File System的縮寫,中文翻譯爲Hadoop分佈式文件系統,它是實現分佈式存儲的一個系統,因此分佈式存儲有的特色,HDFS都會有,HDFS的架構圖:html
上圖中HDFS的NameNode其實就是對應着分佈式存儲的Storage master,主要是用來存儲元數據的,根據這些元數據就能夠管理全部的機器節點和數據塊java
上圖的Rack是機架的意思,也就是說機器能夠放在不一樣的機架上
在安裝HDFS的時候,除了NameNode和DataNode兩個角色外,咱們還發現有一個SecondaryNameNode,這個角色主要是爲了提升NameNode的性能而存在的,咱們後面會詳細講解
HDFS WEB UI
而後就會出現HDFS中的根目錄下全部的文件:node
上面的方式是咱們常見的訪問HDFS文件的方式之一,這種使用的方式也是很方便的。web
這篇文章,咱們重點分別來詳細看一下Overview、Datanodes以及Utilities三個模塊apache
Overviewjson
Summary安全
配置 dfs.datanode.data.dir就是DataNode數據存儲的文件目錄
上面有一個Admin State咱們有必要說明下,Admin State能夠取以下的值:架構
咱們這裏詳細總結下Browse the file system,對於Logs咱們在HDFS日誌的查看總結中講解app
HDFS Shell命令HDFS提供了和Linux相似的命令來訪問文件系統,好比在Linux中想看下文件目錄 /home/hadoop-twq/test中有哪些文件,咱們能夠執行:ls /home/hadoop-twq/test
那麼在HDFS中也存在 ls命令查看某個文件目錄中有哪些文件,好比:hadoop fs -ls hdfs://master:9999/user/hadoop-twq/test
固然,咱們也能夠將 hdfs://master:9999去掉,以下:hadoop fs -ls /user/hadoop-twq/test
那爲何能夠去掉呢?由於當咱們執行hadoop fs的命令的時候,程序會自動去Hadoop的配置 core-site.xml中讀取配置 fs.defaultFS的值## hdfs dfs效果和hadoop fs的效果是如出一轍的 hdfs dfs -ls hdfs://master:9999/user/hadoop-twq/test
Hadoop官網的 https://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/FileSystemShell.htmlHDFS文件恢復機制有一個命令咱們得特別強調下,那麼就是 rm的命令,HDFS中的 rm命令是刪除文件的意思,可是用這個命令刪除文件的時候並非真正的刪除,而是將文件放到對應的 Trash目錄中(其實和window電腦的回收站是同樣的意思),可是這個 Trash機制默認不是打開的,咱們須要在 core-site.xml中打開以下的配置:<!--單位是:分鐘。默認值是0,表示禁用Trash機制--> <!--下面的意思是保存刪除的文件在.Trash文件目錄中5分鐘--> <property> <name>fs.trash.interval</name> <value>5</value> </property>
那麼在一個HDFS文件被刪除後,5分鐘以內仍是能夠從Trash目錄中恢復出來的。好比,咱們刪除一個文件:hadoop fs -rm -r /user/hadoop-twq/cmd-20180326
那麼上面刪除的文件就會move到文件目錄 hdfs://master:9999/user/hadoop-twq/.Trash/180326230000/user/hadoop-twq/下,保存5分鐘,在5分鐘以內咱們均可以經過下如的命令進行數據的恢復:adoop fs -cp hdfs://master:9999/user/hadoop-twq/.Trash/180326230000/user/hadoop-twq/* /user/hadoop-twq
若是咱們肯定直接刪除文件,並不須要進行保存的話,咱們能夠選擇不保存文件到Trash目錄下:hadoop fs -rm -r -skipTrash /user/hadoop-twq/cmd-20180326
Http方式訪問HDFS在使用Http訪問HDFS以前,咱們須要打開webhdfs,能夠經過以下的配置打開:<!--打開NameNode和DataNode的 WebHDFS (REST API)--> <!-- 這個參數默認是ture,即默認WebHDFS是打開的--> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
而後,咱們能夠在Linux上使用命令 curl經過http url的方式訪問HDFS文件,好比:curl -i "http://master:50070/webhdfs/v1/user/hadoop-twq/cmd/error.txt?op=LISTSTATUS"
返回的是一個Json,以下:HTTP/1.1200 OK Cache-Control: no-cache Expires: Sun,27 Jan 201901:03:02 GMT Date: Sun,27 Jan 201901:03:02 GMT Pragma: no-cache Expires: Sun,27 Jan 201901:03:02 GMT Date: Sun,27 Jan 201901:03:02 GMT Pragma: no-cache Content-Type: application/json Transfer-Encoding: chunked Server:Jetty(6.1.26) { "FileStatuses": {"FileStatus": [ { "accessTime":1543310078655, ## 表示訪問時間 "blockSize":134217728, ## 表示設置的數據塊的大小(這裏是128M) "childrenNum":0, ## 表示含有多少個子文件 "fileId":36514, ## 惟一ID "group":"supergroup", ## 文件所屬組 "length":0, ## 文件的大小 "modificationTime":1543310078685, ## 文件修改時間 "owner":"hadoop-twq", ## 文件全部者 "pathSuffix":"", ## 路徑後綴 "permission":"644", ## 文件權限 "replication":1, ## 文件對應的數據塊的備份數 "storagePolicy":0, ## 存儲策略 "type":"FILE" ## 類型,這裏是文件 } ] } }