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


HDFS是英文Hadoop Distributed File System的縮寫,中文翻譯為Hadoop分布式文件系統,它是實現分布式存儲的一個系統,所以分布式存儲有的特點,HDFS都會有,HDFS的架構圖:

 

 上圖中HDFS的NameNode其實就是對應着分布式存儲的Storage master,主要是用來存儲元數據的,根據這些元數據就可以管理所有的機器節點和數據塊

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中的根目錄下所有的文件:

 

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

 
當我們啟動HDFS集群后,我們可以通過 http://master:50070來訪問HDFS集群,其中, masterNameNode所在機器的名稱。下面的就是HDFS WEB UI的七個大模塊:
 

 

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

Overview

 

 

 

  • 第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日志的查看總結中講解

當我們點擊 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"                ## 類型,這里是文件
}
]
}
}
 
 

  

 
 
 
 
 
 
 
 
 

 

 


免責聲明!

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



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