天天看點

大資料離線-HDFS(上)入門操作

本次介紹HDFS,分為上,中,下,三篇

  • 上篇入HDFS門介紹,常用操作
  • 中篇為HDFS的讀寫原理介紹
  • 下篇為HDFS的測試Demo,常用API

1. HDFS的基本概念

  • HDFS的介紹

    HDFS 是 Hadoop Distribute File System 的簡稱, 意為: Hadoop 分布式檔案系統。 是 Hadoop 核心元件之一,作為最底層的分布式存儲服務而存在。

    分布式檔案系統解決的問題就是大資料存儲。 它們是橫跨在多台計算機上的存儲系統。分布式檔案系統在大資料時代有着廣泛的應用前景,它們為存儲和處理超大規模資料提供所需的擴充能力

  • HDFS的設計目的
    • 要裡了解一個架構設計的目的,需要從架構出現之前面對的問題入手,這裡我們進行繪圖示範,說明檔案的存儲從簡單到複雜的演化過程,最終形成了安全可靠快速的HDFS檔案存儲系統。
    • 過程1
      大資料離線-HDFS(上)入門操作
    • 過程2
      大資料離線-HDFS(上)入門操作

存儲模式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的使用方式。

指令如下

大資料離線-HDFS(上)入門操作
大資料離線-HDFS(上)入門操作

具體示範如下

  • -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
           

上篇的内容的到此結束

本部落客要對大資料的學習進行系統的講解,感興趣的同學可以關注訂閱。

繼續閱讀