幾種訪問HDFS文件的客戶端的總結

HDFS是英文Hadoop Distributed File System的縮寫,中文翻譯爲Hadoop分佈式文件系統,它是實現分佈式存儲的一個系統,因此分佈式存儲有的特色,HDFS都會有,HDFS的架構圖:html

 

 上圖中HDFS的NameNode其實就是對應着分佈式存儲的Storage master,主要是用來存儲元數據的,根據這些元數據就能夠管理全部的機器節點和數據塊java

HDFS的DataNodes其實就是對應着分佈式存儲的 Storage slaves,主要就是真正存儲數據的
在HDFS中,一個大文件會被分紅若干個數據塊,全部的數據塊都是分佈式的存儲在多個DataNode上。每一個數據塊均可以備份多個以提升數據塊的高可用性,上圖的 Replication就是表示數據塊的備份
上圖的Rack是機架的意思,也就是說機器能夠放在不一樣的機架上
上圖還有一個 Client,這個其實就是使用HDFS的客戶端,這個客戶端能夠作以下的操做:
  1. 操做NameNode上的元數據
  2. 向DataNode上寫數據
  3. 向DataNode上讀數據
這個 Client能夠有不少種,: HDFS WEB UIHDFS Shell命令以及 Http方式訪問HDFS。咱們來分別總結下。
在安裝HDFS的時候,除了NameNode和DataNode兩個角色外,咱們還發現有一個SecondaryNameNode,這個角色主要是爲了提升NameNode的性能而存在的,咱們後面會詳細講解
HDFS WEB UI
當咱們啓動HDFS集羣后,而後經過 http://master:50070/去訪問HDFS WEB UI的時候,咱們會常用 Utilities下的 Browse the file system去查看HDFS中的文件,以下:

 

而後就會出現HDFS中的根目錄下全部的文件:node

 

 上面的方式是咱們常見的訪問HDFS文件的方式之一,這種使用的方式也是很方便的。web

 
當咱們啓動HDFS集羣后,咱們能夠經過 http://master:50070來訪問HDFS集羣,其中, masterNameNode所在機器的名稱。下面的就是HDFS WEB UI的七個大模塊:
 

 

 這篇文章,咱們重點分別來詳細看一下OverviewDatanodes以及Utilities三個模塊apache

Overviewjson

 

 

 

  • 第1處的master:9999表示當前HDFS集羣的基本路徑。這個值是從配置core-site.xml中的fs.defaultFS獲取到的。
  • 第2處的Started表示集羣啓動的時間
  • 第3處的Version表示咱們使用的Hadoop的版本,咱們使用的是2.7.5的Hadoop
  • 第4處的Compiled表示Hadoop的安裝包(hadoop-2.7.5.tar.gz)編譯打包的時間,以及編譯的做者等信息
  • 第5處的Cluster ID表示當前HDFS集羣的惟一ID
  • 第6處的Block Pool ID表示當前HDFS的當前的NameNode的ID,咱們知道經過HDFS Federation (聯盟)的配置,咱們能夠爲一個HDFS集羣配置多個NameNode,每個NameNode都會分配一個Block Pool ID

Summary安全

 

 

 

  • 第1處的Security is off表示當前的HDFS集羣沒有啓動安全機制
  • 第2處的Safemode is off表示當前的HDFS集羣不在安全模式,若是顯示的是Safemode is on的話,則表示集羣處於安全模式,那麼這個時候的HDFS集羣是不能用的
  • 第3處表示當前HDFS集羣包含了3846個文件或者目錄,以及1452個數據塊,那麼在NameNode的內存中確定有3846 + 1452 = 5298個文件系統的對象存在
  • 第4處表示NameNode的堆內存(Heap Memory)是312MB,已經使用了287.3MB,堆內存最大爲889MB,對
  • 第5處表示NameNode的非堆內存的使用狀況,有效的非堆內存是61.44MB,已經使用了60.36MB。沒有限制最大的非堆內存,可是非堆內存加上堆內存不能大於虛擬機申請的最大內存(默認是1000M)
  • 第6處的Configured Capacity表示當前HDFS集羣的磁盤總容量。這個值是經過:Total Disk Space - Reserved Space計算出來的。Total Disk Space表示所在機器所在磁盤的總大小,而Reserved Space表示一個預留給操做系統層面操做的空間。Reserved space空間能夠經過dfs.datanode.du.reserved(默認值是0)在hdfs-site.xml文件中進行配置。咱們這邊的總容量爲何是:33.97GB呢,咱們能夠經過du -h看一下兩個slave的磁盤使用狀況,以下:

 

 

上面 17GB + 17GB = 34GB,並且咱們沒有配置 Reserved Space,因此HDFS總容量就是 33.97GB(有一點點的偏差能夠忽略)
  • 第7處DFS Used表示HDFS已經使用的磁盤容量,說白了就是HDFS文件系統上文件的總大小(包含了每個數據塊的副本的大小)
  • 第8處Non DFS Used表示在任何DataNodes節點上,不在配置的dfs.datanode.data.dir裏面的數據所佔的磁盤容量。其實就是非HDFS文件佔用的磁盤容量
配置 dfs.datanode.data.dir就是DataNode數據存儲的文件目錄
  • 第9處DFS Remaining = Configured Capacity - DFS Used - Non DFS Used。這是HDFS上實際可使用的總容量
  • 第10處Block Pool Used表示當前的Block Pool使用的磁盤容量
  • 第11處DataNodes usages%表示全部的DataNode的磁盤使用狀況(最小/平均/最大/方差)
  • 第12處Live Nodes表示存活的DataNode的數量。Decommissioned表示已經下線的DataNode
  • 第13處Dead Nodes表示已經死了的DataNode的數量。Decommissioned表示已經下線的DataNode
  • 第14處Decommissioning Nodes表示正在下線的DataNode的數量。
  • 第15處Total Datanode Volume Failures表示DataNode上數據塊的損壞大小
  • 第16處Number of Under-Replicated Blocks表示沒有達到備份數要求的數據塊的數量
  • 第17處Number of Blocks Pending Deletion表示正要被刪除的數據塊
  • 第18處Block Deletion Start Time表示能夠刪除數據塊的時間。這個值等於集羣啓動的時間加上配置dfs.namenode.startup.delay.block.deletion.sec的時間,其中配置dfs.namenode.startup.delay.block.deletion.sec默認是0秒
Datanodes

 

 上面有一個Admin State咱們有必要說明下,Admin State能夠取以下的值:架構

  1. In Service,表示這個DataNode正常
  2. Decommission In Progress,表示這個DataNode正在下線
  3. Decommissioned,表示這個DataNode已經下線
  4. Entering Maintenance,表示這個DataNode正進入維護狀態
  5. In Maintenance,表示這個DataNode已經在維護狀態

 

 咱們這裏詳細總結下Browse the file system,對於Logs咱們在HDFS日誌的查看總結中講解app

當咱們點擊 Browse the file system時,我麼會進入到以下的界面:

 

上圖每個字段的解釋以下:
  • Permission:表示該文件或者目錄的權限,和Linux的文件權限規則是同樣的
  • Owner:表示該文件或者目錄的全部者
  • Group:表示該文件或者目錄的全部者屬於的組
  • Size:表示該文件或者目錄的大小,若是是目錄的話則一直顯示0B
  • Last Modified:表示該文件或者目錄的最後修改時間
  • Replication:表示該文件或者目錄的備份數,若是是目錄的話則一直顯示0
  • Block Size:表示該文件的數據塊的大小,若是是目錄的話則一直顯示0B
  • Name:表示文件或者目錄的名字
咱們能夠經過鼠標點擊 Name來訪問對應的文件目錄或者文件:
當咱們訪問的是目錄的時候,則是去查看該目錄下有哪些子文件或者子目錄。
當咱們訪問的是文件的時候,咱們查看的是文件的詳細信息,好比,咱們訪問文件 /user/omneo.csv文件:

 

 

注意:若是你的文件很是大的時候,不建議點擊 Download鏈接,由於你的電腦會卡死的
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

  

HDFS文件恢復機制
有一個命令咱們得特別強調下,那麼就是 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"                ## 類型,這裏是文件
}
]
}
}
 
 
相關文章
相關標籤/搜索