07-HDFS入門及shell命令

1 文件系統

  • 是一種存儲和組織數據的方法,它使得文件訪問和查詢變得容易
  • 使得文件和樹形目錄的抽象邏輯概念代替了磁盤等物理設備使用數據塊的概念,用戶使用文件系統來保存數據不必關心數據底層存在硬盤哪里,只需記住這個文件的所屬目錄和文件名
  • 文件系統通常使用磁盤和光盤這樣的存儲設備,并維護文件在設備中的物理位置。
  • 文件系統是一套實現了數據的存儲、分級組織、訪問和獲取等操作的抽象數據類型(Abstract data type)

文件名

? DOS操作系統中文件名由文件主名和擴展名組成,之間以一個小圓點隔開

? 文件名可用于用于定位存儲位置、區分不同文件,計算機實行按名存取的操作方式

? 某些符號因其有特殊含義,一般不允許出現在文件名中

元數據

? 元素據(metadata)又稱為解釋性數據,記錄數據的數據

? 文件系統元數據一般指文件大小、最后修改時間、底層存儲位置、屬性、所屬用戶、權限等信息

文件系統分類

  • 基于磁盤的文件系統

是在非易失介質上(磁盤、光盤)存儲文檔的經典方式。用以在多次會話之間保持文件的內容。包括ext2/3/4、xfs、ntfs、iso9660等眾所周知的文件系統。Linux系統可以使用df -Th查看

  • 虛擬文件系統

在內核中生成的文件系統,比如proc

proc文件系統是一個虛擬文件系統,通過它可以使用一種新的方法在Linux內核空間和用戶間之間進行通信

  • 網絡文件系統

網絡文件系統(NFS,network file system)是一種將遠程主機上的分區(目錄)經網絡掛載到本地系統的一種機制

允許本地計算機訪問另一臺計算機上的數據,對此類文件系統中文件的操作都通過網絡連接進行

2 分布式文件系統HDFS

2.1 HDFS簡介

  • HDFS(Hadoop Distributed File System)Hadoop分布式文件系統。是Apache Hadoop核心組件之一,作為大數據生態圈最底層的分布式存儲服務而存在。
  • 分布式文件系統解決大數據如何存儲的問題。分布式意味著是橫跨在多臺計算機上的存儲系統。
  • HDFS是一種能夠在普通硬件上運行的分布式文件系統,它是高度容錯,適用于具有大數據集的應用程序,它非常適于存儲大型數據(比如 TB PB)
  • HDFS使用多臺計算機存儲文件,并且提供統一的訪問接口,像是訪問一個普通的文件系統一樣使用分布式文件系統

2.2 HDFS設計目標

  • **硬件故障(Hardware Failure)**是常態,HDFS可能有成百上千的服務器組成,每一個組件都有可能出現故障。因此故障檢測和自動快速恢復是HDFS的核心架構目標。
  • HDFS上的應用主要是以流式讀取數據(Streaming Data Access)。HDFS被設計成用于批處理,而不是用戶交互式的。相較于數據訪問的反應時間,更注重數據訪問的高吞吐量。
  • 典型的HDFS文件大小是GB到TB級別的。所有,HDFS被調整成支持大文件(Large Data Sets)。他應該提供很高的聚合數據帶寬,一個集群中支持數百個節點,一個集群中還應該支持千萬級別的文件。
  • 大部分HDFS應用對文件要求是write-one-read-many訪問模型(一次寫入多次讀取)。一個文件一旦創建、寫入、關閉之后就不需要修改了。這一假設簡化了數據一致性問題,使高吞吐量的數據訪問成為可能。
  • 移動計算的代價比之移動數據的代價低。一個應用請求的計算,離它操作的數據越近就越高效。將計算移動到數據附件,比之移動數據到應用所在顯然更好。
  • HDFS被設計為可從一個平臺輕松移植到另一個平臺。這有利于將HDFS廣泛用作大量應用程序的首選平臺。

2.3 HDFS應用場景

適用場景

大文件

數據流式訪問

一次寫入多次讀取

低成本部署,廉價pc

高容錯

不適用場景

小文件

數據交互式訪問

頻繁任意修改

低延遲處理

2.4 HDFS重要特性

1、主從架構

HDFS采用master/slave架構。一般一個HDFS集群是有一個NameNode和一定數目的DataNode組成。

NameNode是HDFS主節點,DataNode是HDFS從節點,兩種角色各司其職,共同協調完成分布式的文件存儲服務

2、分塊存儲機制

HDFS中的文件在**物理上分塊存儲(block)**的,塊的大小通過配置參數來規則,參數位于hdfs-default.xml中dfs.blocksize默認大小是128M(134217728)

3、副本機制

文件的所有block都會有副本。每個文件的block大小(dfs.blocksize)和副本系數(dfs.replication)都是可配置的。副本系數可以在文件創建時指定,也可以在之后通過命令改變。

默認 dfs.replication 的值是3,也就是額外再復制兩份,連同本身共3副本。

4、namespace

HDFS支持傳統的層次型文件組織結構。用戶可以創建目錄,然后將文件保存在這些目錄里。文件系統名字空間的層次結構和大多數現有的文件系統類似:用戶可以創建、刪除、、移動或重命名文件。

NameNode負責維護文件系統的namespace名稱空間,任何對文件系統名稱空間或屬性的修改都將被NameNode記錄下來

HDFS會給客戶端提供一個統一的抽象目錄樹,客戶端提供路徑來訪問文件。

形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

5、元數據管理

在HDFS中,NameNode管理的元數據具有兩種類型:

  • 文件自身屬性信息

文件名稱、權限、修改時間、文件大小、復制因子、數據塊大小

  • 文件塊位置映射信息

記錄塊和DataNode之間的映射信息,即哪個塊位于哪個節點上

6、數據塊存儲

文件的各個block的具體存儲管理由DataNode節點承擔。每一個block都可以在多個DataNode上存儲。

7、HDFS的塊大小

HDFS中的文件在物理上是分塊存儲(Block),塊的大小可以通過配置參數(dfs.blocksize)來設置,默認大小在Hadoop2.x/3.x版本是128M,3.x版本是64M

例如:

? 如果尋址時間為10ms,傳輸時間=10ms/0.01=1s(尋址時間為傳輸時間的1%為最佳),若目前磁盤傳輸速率為100MB/s,則block塊大小 = 1s * 100MB/s = 100MB,所有塊大小設置為128M比較合適

  • HDFS的塊設置太小,會增大尋址時間(尋址時間大于傳輸時間),程序一直在找塊的開始位置
  • HDFS的塊設置太大,從磁盤傳輸數據的時間會明顯大于定位這個塊開始位置所需的時間(傳輸時間遠大于尋址時間),會導致處理數據非常慢
  • 尋址時間與傳輸時間的比例為1%時,為最佳狀態
  • HDFS的塊大小設置主要取決于磁盤傳輸速率

3 HDFS shell CLI

Hadoop提供了文件系統的shell命令行客戶端,使用方法如下:

hdfs [options] subcommand [subcommand options] subcommand: admin commands / client command / daemon commands

跟文件系統讀寫相關的命令是 hdfs dfs [generic options]

  • HDFS Shell CLI支持操作多種文件系統,包括本地文件系統(file:)、分布式文件系統(hdfs://nn:8020)等
  • 操作的是什么文件系統取決于URL中的前綴協議
  • 如果沒有指定前綴,則將會讀取環境變量中的fs.defaultFS屬性,以該屬性值作為默認文件系統
hdfs dfs -ls file:///      # 操作本地文件系統(客戶端所在的機器)
hdfs dfs -ls hdfs://node1:8020/    # 操作HDFS分布式文件系統
hdfs dfs -ls /     # 直接跟目錄,沒有指定協議,將加載讀取fs.defaultFS屬性默認值

3.1 HDFS Shell CLI客戶端

hadoop dfs、hdfs dfs、hadoop fs 三者區別

  • hadoop dfs 只能操作HDFS文件系統(包括與Local FS間的操作),不過已經Deprecated
  • hdfs dfs 只能操作HDFS文件系統(包括與Local FS間的操作),常用
  • hadoop fs 可操作任意操作系統(不僅僅是hdfs文件系統,適用范圍更廣)

目前版本官方推薦使用hadoop fs

3.2 HDFS Shell 常用命令

-mkdir創建目錄

hadoop fs -mkdir [-p] <path>
# path 為待創建目錄
# -p 表示沿著路徑創建父目錄

-ls 查看指定目錄下內容

hadoop fs -ls [-h] [-R] [<path> ... ]
# path 指定目錄路徑
# -h 人性化顯示文件size
# -R 遞歸查看指定目錄及其子目錄 

-put上傳文件至指定目錄下

hadoop fs -put [-f] [-p] <localsrc>... <dst>
# -f 覆蓋目錄文件(如果目標文件存在,則覆蓋)
# -p 保留訪問和修改時間,所有權和權限
# localsrc 本地文件系統(客戶端所在機器)
# dst 目標文件系統(HDFS)

-copyFromLocal從本地文件系統拷貝文件至HDFS

(等同于put,習慣上使用put)

hadoop fs -copyFromLocal <localsrc>... <dst>

-moveFromLocal剪切本地文件系統文件至HDFS

(即從本地剪切文件至HDFS)

hadoop fs -moveFromLocal <localsrc>... <dst>
# 和-put功能相似,只不過上傳結束會刪除源數據

-appendToFile追加文件至一個已存在的文件中

hadoop fs -appendToFile <localsrc> ... <dst> 

-cat\-head\-tail查看HDFS文件內容

hadoop fs -cat <src> ...
# 對于大文件內容讀取,慎重
hadoop fs -head <file>
# 查看文件前1kB的內容
hadoop fs -tail [-f] <file>
# 查看文件最后1kB的內容
# -f 選擇可以動態顯示文件中追加的內容

-get\coptToLocal\-getmerge下載HDFS文件

(從HDFS拷貝文件至本地)

hadoop fs -get [-f] [-p] <src>... <localdst>
# 下載文件至本地文件系統指定目錄,localdst必須是目錄
# -f 覆蓋目標文件(如果本地文件系統存在該文件,則覆蓋) 
# -p 保留訪問和修改時間,所有權和權限hadoop fs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst> 
# 等同于get,習慣上使用get
hadoop fs -getmerge [-n1] [-skip-empty-file] <src> <localdst>
# 下載多個文件合并到本地文件系統的一個文件中
# -n1 表示在每個文件的末尾添加換行符

-cp拷貝HDFS文件

hadoop fs -cp [-f] <src> ... <dst>
# -f 覆蓋目標文件(若目標文件存在,則覆蓋)

-appendToFile追加數據到HDFS文件中

hadoop fs -appendToFile <localsrc>... <dst>
# 將所給給定的本地文件的內容追加到給定的dst文件
# 若dst文件不存在,將創建文件
# 如果<localsrc>為-,則輸入為從標準輸入中讀取

-df查看HDFS磁盤空間

hadoop fs -df [-h] [<path>...]
# 顯示文件系統的容量,可以空間和已用空間

-du查看HDFS文件使用的空間量

hadoop fs -du [-s] [-h] <path>...
# -s 表示顯示指定路徑文件長度的匯總摘要,而部署單個文件的摘要
# -h 表示人性化顯示

-mvHDFS數據移動

hadoop fs -mv <src> ... <dst>
# 移動文件至指定文件夾
# 可以使用該命令移動數據、重命名文件

-rm -r刪除文件/文件夾

hadoop fs -rm -r 路徑
# -r 表示遞歸

-setrep修改HDFS文件副本個數

hadoop fs -setrep [-R] [-w] <rep> <path>...
# 修改指定文件的副本個數
# -R 表示遞歸,修改文件夾及其下所有
# -w 客戶端是否等待副本修改完畢

說明:

? 這里設置的副本數只是記錄在NameNode的元數據中,是否真的會有這么多副本,還得看DataNode的數量。因為目前只有3臺設備,最多也就3個副本,只有節點數的增加到10臺時,副本數才能達到10。

-chgrp\-chmod\-chown修改文件權限

-chgrp、-chmod、-chown:Linux文件系統中的用法一樣

hadoop fs  -chmod 666 文件所在路徑
hadoop fs  -chown  nhk:nhk 文件所在路徑

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36445.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32基于CubeIDE和HAL庫 基礎入門學習筆記:物聯網項目開發流程和思路

文章目錄&#xff1a; 第一部分&#xff1a;項目開始前的計劃與準備 1.項目策劃和開發規范 1.1 項目要求文檔 1.2 技術實現文檔 1.3 開發規范 2.創建項目工程與日志 第二部分&#xff1a;調通硬件電路與驅動程序 第三部分&#xff1a;編寫最基礎的應用程序 第四部分&…

opencv帶GStreamer之Windows編譯

目錄 1、下載GStreamer和安裝2. GSTReamer CMake配置3. 驗證是否配置成功 1、下載GStreamer和安裝 下載地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安裝目錄無要求&#xff0c;主要是安裝完設置環境變量 xxx\1…

【css】漸變

漸變是設置一種顏色或者多種顏色之間的過度變化。 兩種漸變類型&#xff1a; 線性漸變&#xff08;向下/向上/向左/向右/對角線&#xff09; 徑向漸變&#xff08;由其中心定義&#xff09; 1、線性漸變 語法&#xff1a;background-image: linear-gradient(direction, co…

一圖搞懂二層交換機、三層交換機和路由器的區別

二層交換機、三層交換機、路由器的區別 二層交換機、三層交換機、路由器對比二層交換機三層交換機路由器工作在第幾層數據鏈路層&#xff08;第二層&#xff09;網絡層&#xff08;第三層&#xff09;網絡層&#xff08;第三層&#xff09;功能學習和轉發幀根據IP地址轉發數據…

數據鏈路層是什么?

數據鏈路層承接上層的數據&#xff0c;然后使用下層提供的信道&#xff0c;按照一定的規則&#xff0c;進行數據傳輸。 物理層提供了傳輸媒體與連接&#xff08;信道&#xff09;&#xff08;數據鏈路層使用的信道通常是物理層提供的信道&#xff09;&#xff0c;即提供了比特…

webpack自動注冊全局組件

例如&#xff0c;在form文件夾下有許多流程類表單&#xff0c;一個一個注冊引入非常浪費時間&#xff0c;可使用webpack的require.context方法來自動導入 import { firstToUpper } from /utils/methodsconst taskTable {install: vue > {const req require.context(../fo…

springboot結合element-ui實現增刪改查,附前端完整代碼

實現功能 前端完整代碼 后端接口 登錄&#xff0c;注冊&#xff0c;查詢所有用戶&#xff0c;根據用戶名模糊查詢&#xff0c;添加用戶&#xff0c;更新用戶&#xff0c;刪除用戶 前端 注冊&#xff0c;登錄&#xff0c;退出&#xff0c;用戶增刪改查&#xff0c;導航欄&#…

Android Sutdio 導入libs文件夾下的jar包沒反應

有點離譜&#xff0c;笨笨的腦子才犯的錯誤 首先發現問題&#xff1a;轉移項目的時候 直接復制粘貼libs文件夾下的jar包到新項目&#xff0c;在build.gradle文件下 使用語句并應用也沒反應&#xff08;jar包沒有出現箭頭且代碼報錯&#xff0c;找不到&#xff09; implementa…

什么樣的 PLC 可以算是高端 PLC?

針對問題本身&#xff0c;有的回答里都提到了。可靠性&#xff0c;掃描時間&#xff0c;帶離散量點數&#xff0c;帶模擬量輸出點數&#xff0c;擴展性&#xff0c;這些都可以看作PLC系統級別劃分的依據。比如說&#xff0c;有相應安全完整性等級認證的LOGIC SOLVER為核心的PLC…

SpringBoot復習:(37)自定義ErrorController

所有接口統一返回的數據格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…

五個獨特且有趣的ChatGPT指令

今天分享5個很實用的指令&#xff0c;這幾個指令很多時候對我們輸出內容的連貫性、文章風格、創意性等方面有著決定性的作用。 目錄 第一個&#xff1a;Max tokens&#xff08;最大令牌&#xff09; 第二個&#xff1a;Top_p(控制采樣) 第三個&#xff1a;Presence_penalty …

Android Studio System.out.println()中文亂碼

第一步&#xff1a; 打開studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的編碼格式改為UTF-8 嘗試跑一下代碼&#xff0c;如果還不行&#xff0c;重啟IDE 再試試。

UI美工設計崗位的工作職責

UI美工設計崗位的工作職責1 職責&#xff1a; 1、負責軟件界面的美術設計、創意工作和制作工作; 2、根據各種相關軟件的用戶群&#xff0c;提出構思新穎、有高度吸引力的創意設計; 3、對頁面進行優化&#xff0c;使用戶操作更趨于人性化; 4、維護現有的應用產品; 5、收集和…

NLP文本匹配任務Text Matching [無監督訓練]:SimCSE、ESimCSE、DiffCSE 項目實踐

NLP文本匹配任務Text Matching [無監督訓練]&#xff1a;SimCSE、ESimCSE、DiffCSE 項目實踐 文本匹配多用于計算兩個文本之間的相似度&#xff0c;該示例會基于 ESimCSE 實現一個無監督的文本匹配模型的訓練流程。文本匹配多用于計算兩段「自然文本」之間的「相似度」。 例如…

一百五十三、Kettle——Linux上安裝的kettle9.3啟動后說缺少libwebkitgtk-1.0(真是坑爹啊,剛龜速下載又忍痛卸載)

一、問題 在kettle9.3可以在本地連接hive312后&#xff0c;在Linux中安裝了kettle9.3&#xff0c;結果啟動時報錯WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable 而且如果直接下載libwebkitgtk的話也沒有用 [roothurys22 data-integration]# yu…

Python學習筆記第五十六(Pandas JSON)

Python學習筆記第五十六天 Pandas JSONread_json()to_string()字典轉為 DataFrame 數據 內嵌的 JSON 數據json_normalize() 后記 Pandas JSON JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript 對象表示法&#xff09;&#xff0c;是存儲和交換文本信息的語…

在線吉他調音

先看效果&#xff08;圖片沒有聲&#xff0c;可以下載源碼看看&#xff0c;比這更好~&#xff09;&#xff1a; 再看代碼&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

【第二階段】kotlin的函數類型作為返回類型

fun main() {//調用,返回的是一個匿名類型&#xff0c;所以info就是一個匿名函數val infoshow("",0)//info接受的返回值為匿名類型&#xff0c;此時info就是一個匿名函數println(info("kotlin",20)) }//返回類型為一個匿名函數的返回類型fun show(name:Str…

01 - 工作區、暫存區、版本庫、遠程倉庫 - 以一次連貫的提交操作為例

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. 工作區、暫存區、版本庫、遠程倉庫1.1 工作區1.2 工作區 > 暫存區&#xff1a;git add1.3 暫存區 > 版本庫&#xff1a;git commit1.4 push到遠程倉庫 1. 工作區、暫存區、版本…

【生成式AI】ProlificDreamer論文閱讀

ProlificDreamer 論文閱讀 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 論文簡介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD優化方法 前置芝士:text-to-3D任務簡介 text-to-3D Problem text-to-3D…