Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
1 . HDFS 基本概念
1.1? HDFS 介紹
HDFS 是 Hadoop Distribute File System 的簡稱,意為:Hadoop 分布式文件系統。是 Hadoop 核心組件之一,作為最底層的分布式存儲服務而存在。
分布式文件系統解決的問題就是大數據存儲。它們是橫跨在多臺計算機上的存儲系統。分布式文件系統在大數據時代有著廣泛的應用前景,它們為存儲和處理超大規模數據提供所需的擴展能力。
1.2? HDFS 設計目標
- 1) 硬件故障是常態, HDFS 將有成百上千的服務器組成,每一個組成部分都有可能出現故障。因此故障的檢測和自動快速恢復是 HDFS 的核心架構目標。
- 2) HDFS 上的應用與一般的應用不同,它們主要是以流式讀取數據。HDFS 被設計成適合批量處理,而不是用戶交互式的。相較于數據訪問的反應時間,更注重數據訪問的高吞吐量。
- 3) 典型的 HDFS 文件大小是 GB 到 TB 的級別。所以,HDFS 被調整成支持大文件。它應該提供很高的聚合數據帶寬,一個集群中支持數百個節點,一個集群中還應該支持千萬級別的文件。
- 4) 大部分 HDFS 應用對文件要求的是 write-one-read-many 訪問模型。一個文件一旦創建、寫入、關閉之后就不需要修改了。這一假設簡化了數據一致性問題,使高吞吐量的數據訪問成為可能。
- 5) 移動計算的代價比之移動數據的代價低。一個應用請求的計算,離它操作的數據越近就越高效,這在數據達到海量級別的時候更是如此。將計算移動到數據附近,比之將數據移動到應用所在顯然更好。
- 6) 在異構的硬件和軟件平臺上的可移植性。這將推動需要大數據集的應用更廣泛地采用 HDFS 作為平臺。
?
2 . HDFS 重要 特性
首先,它是一個文件系統,用于存儲文件,通過統一的命名空間目錄樹來定位文件;
其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色。
2.1? ?master/slave 架構
HDFS 采用 master/slave 架構。一般一個 HDFS 集群是有一個 Namenode 和一定數目的 Datanode 組成。Namenode 是 HDFS 集群主節點,Datanode 是 HDFS 集群從節點,兩種角色各司其職,共同協調完成分布式的文件存儲服務。
2.2? ?分塊存儲
HDFS 中的文件在物理上是分塊存儲(block)的,塊的大小可以通過配置參數來規定,默認大小在 hadoop2.x 版本中是 128M。
2.3? ?名字空間(NameSpace )
HDFS 支持傳統的層次型文件組織結構。用戶或者應用程序可以創建目錄,然后將文件保存在這些目錄里。文件系統名字空間的層次結構和大多數現有的文件系統類似:用戶可以創建、刪除、移動或重命名文件。
Namenode 負責維護文件系統的名字空間,任何對文件系統名字空間或屬性的修改都將被 Namenode 記錄下來。
HDFS 會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
2.4? ?Namenode 元數據管理
我們把目錄結構及文件分塊位置信息叫做元數據。Namenode 負責維護整個hdfs 文件系統的目錄樹結構,以及每一個文件所對應的 block 塊信息(block 的id,及所在的 datanode 服務器)。
2.5? ?Datanode 數據存儲
文件的各個 block 的具體存儲管理由 datanode 節點承擔。每一個 block 都可以在多個 datanode 上。Datanode 需要定時向 Namenode 匯報自己持有的 block信息。
存儲多個副本(副本數量也可以通過參數設置 dfs.replication,默認是 3)。
2.6? ?副本機制
為了容錯,文件的所有 block 都會有副本。每個文件的 block 大小和副本系數都是可配置的。應用程序可以指定某個文件的副本數目。副本系數可以在文件創建的時候指定,也可以在之后改變。
2.7? ?一次寫入,多次讀出
HDFS 是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。正因為如此,HDFS 適合用來做大數據分析的底層存儲服務,并不適合用來做.網盤等應用,因為,修改不方便,延遲大,網絡開銷大,成本太高。
?
3 . HDFS 基本操作
3.1? ?Shell 命令行客戶端
Hadoop 提供了文件系統的 shell 命令行客戶端,使用方法如下:hadoop fs <args>
文件系統 shell 包括與 Hadoop 分布式文件系統(HDFS)以及 Hadoop 支持的其他文件系統(如本地 FS,HFTP FS,S3 FS 等)直接交互的各種類似 shell的命令。所有 FS shell 命令都將路徑 URI 作為參數。
URI 格式為 scheme://authority/path。對于 HDFS,該 scheme 是 hdfs,對于本地 FS,該 scheme 是 file。scheme 和 authority 是可選的。如果未指定,則使用配置中指定的默認方案。
hadoop fs -ls file:///root/
如果使用的文件系統是 HDFS,則使用 hdfs dfs 也是可以的,此時
hadoop fs <args> = hdfs dfs <args>
?
3.2? ?Shell 命令選項
| 選項名稱 | 使用格式 | 含義 |
| -ls | -ls <路徑> | 查看指定路徑的當前目錄結構 |
| -lsr? | -lsr <路徑> | 遞歸查看指定路徑的目錄結構 |
| -du? | -du <路徑> | 統計目錄下個文件大小 |
| -dus | -dus <路徑>? | 匯總統計目錄下文件(夾)大小 |
| -count | -count [-q] <路徑> | 統計文件(夾)數量 |
| -mv | -mv <源路徑> <目的路徑>? | 移動 |
| -cp | -cp <源路徑> <目的路徑> | 復制 |
| -rm | -rm [-skipTrash] <路徑> | 刪除文件/空白文件夾 |
| -rmr | -rmr [-skipTrash] <路徑> | 遞歸刪除 |
| -put | -put <多個 linux 上的文件> <hdfs 路徑> | 上傳文件 |
| -copyFromLocal | -copyFromLocal <多個 linux 上的文件> <hdfs 路徑> | 從本地復制 |
| -moveFromLoca | -moveFromLocal <多個 linux 上的文件>?<hdfs 路徑> | 從本地移動 |
| -getmerge | -getmerge <源路徑> <linux 路徑> | 合并到本地 |
| -cat? | -cat <hdfs 路徑>? | 查看文件內容 |
| -text? | -text <hdfs 路徑> | 查看文件內容 |
| -copyToLocal | -copyToLocal [-ignoreCrc] [-crc] [hdfs源路徑] [linux 目的路徑] | 從本地復制 |
| -moveToLocal | -moveToLocal [-crc] <hdfs 源路徑> <linux 目的路徑> | 從本地移動 |
| -mkdir | -mkdir <hdfs 路徑> | 創建空白文件夾 |
| -setrep? | -setrep [-R] [-w] <副本數> <路徑>? | 修改副本數量 |
| -touchz? | -touchz <文件路徑>? | 創建空白文件 |
| -stat | -stat [format] <路徑>? | 顯示文件統計信息 |
| -tail | -tail [-f] <文件>? | 查看文件尾部信息 |
| -chmod | -chmod [-R] <權限模式> [路徑]? | 修改權限 |
| -chown? | -chown [-R] [屬主][:[屬組]] 路徑? | 修改屬主 |
| -chgrp | -chgrp [-R] 屬組名稱 路徑 | 修改屬組 |
| -help | -help [命令選項]? | 幫助 |
?
3.3? ?Shell 常用命令介紹
-ls 使用方法:hadoop fs -ls [-h] [-R] <args> 功能:顯示文件、目錄信息。 示例:hadoop fs -ls /user/hadoop/file1-mkdir 使用方法:hadoop fs -mkdir [-p] <paths> 功能:在 hdfs 上創建目錄,-p 表示會創建路徑中的各級父目錄。 示例:hadoop fs -mkdir –p /user/hadoop/dir1-put 使用方法:hadoop fs -put [-f] [-p] [ -|<localsrc1> .. ]. <dst> 功能:將單個 src 或多個 srcs 從本地文件系統復制到目標文件系統。 -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 使用方法:hadoop fs -cat [-ignoreCrc] URI [URI ...] 功能:顯示文件內容到 stdout 示例:hadoop fs -cat /hadoop/hadoopfile-tail 使用方法:hadoop fs -tail [-f] URI 功能:將文件的最后一千字節內容顯示到 stdout。 -f 選項將在文件增長時輸出附加數據。 示例:hadoop fs -tail /hadoop/hadoopfile-chgrp 使用方法:hadoop fs -chgrp [-R] GROUP URI [URI ...] 功能:更改文件組的關聯。用戶必須是文件的所有者,否則是超級用戶。 -R 將使改變在目錄結構下遞歸進行。 示例:hadoop fs -chgrp othergroup /hadoop/hadoopfile-chmod 功能:改變文件的權限。使用-R 將使改變在目錄結構下遞歸進行。 示例:hadoop fs -chmod 666 /hadoop/hadoopfile-chown 功能:改變文件的擁有者。使用-R 將使改變在目錄結構下遞歸進行。 示例:hadoop fs -chown someuser:somegrp /hadoop/hadoopfile-copyFromLocal 使用方法:hadoop fs -copyFromLocal <localsrc> URI 功能:從本地文件系統中拷貝文件到 hdfs 路徑去 示例:hadoop fs -copyFromLocal /root/1.txt /-copyToLocal 功能:從 hdfs 拷貝到本地 示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz-cp 功能:從 hdfs 的一個路徑拷貝 hdfs 的另一個路徑 示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2-mv 功能:在 hdfs 目錄中移動文件 示例: hadoop fs -mv /aaa/jdk.tar.gz /-getmerge 功能:合并下載多個文件 示例:比如 hdfs 的目錄 /aaa/下有多個文件:log.1, log.2,log.3,... hadoop fs -getmerge /aaa/log.* ./log.sum-rm 功能:刪除指定的文件。只刪除非空目錄和文件。-r 遞歸刪除。 示例:hadoop fs -rm -r /aaa/bbb/-df 功能:統計文件系統的可用空間信息 示例:hadoop fs -df -h /-du 功能:顯示目錄中所有文件大小,當只指定一個文件時,顯示此文件的大小。 示例:hadoop fs -du /user/hadoop/dir1-setrep 功能:改變一個文件的副本系數。-R 選項用于遞歸改變目錄下所有文件的副本 系數。 示例:hadoop fs -setrep -w 3 -R /user/hadoop/dir1?
轉載于:https://www.cnblogs.com/blazeZzz/p/9667667.html
總結
以上是生活随笔為你收集整理的Hadoop之HDFS(一)HDFS入门及基本Shell命令操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3安装scrapy问题解决
- 下一篇: Sqlserver 查询语句性能测试