1. 程式人生 > 其它 >HDFS(Hadoop Distributed File System )概述

HDFS(Hadoop Distributed File System )概述

目錄

一、HDFS概述

二、HDFS特點

三、HDFS叢集組成:主從架構---一個主節點,多個從節點

1. NameNode(名稱節點 / 主節點)-----HDFS叢集的管理者

2. DataNode (資料節點 / 從節點)

3. SecondaryNameNode (第二名稱節點)

四、HDFS傳輸檔案方式

五、HDFS常用命令

六、如何實現啟動HDFS和yarn的時候不輸入密碼


一、HDFS概述

Hadoop 分散式檔案系統,用於儲存檔案,與Windows不同的是他是一個分散式的,由很多伺服器聯合起來實現其功能。

二、HDFS特點

  1. 一次寫入,多次讀取,寫入後只允許刪除或檢視,不支援檔案修改。
  2. HDFS檔案讀取或寫入都比較慢,不適合實時性或者低延時的操作

Notes適合用來做資料分析,不適合做網盤應用。

三、HDFS叢集組成:主從架構---一個主節點,多個從節點

1. NameNode(名稱節點 / 主節點)-----HDFS叢集的管理者

  1. 管理檔案儲存的元資料
    • 元資料包括了檔案的資訊、大小。檔案的上傳時間、作者、檔案在那個DataNode上儲存
    • 元資料中還包含了 檔案義工分成了幾個板塊,每個板塊在那個DataNode上儲存著
    • 但是 NameNode 只儲存這些資訊,檔案中真正的內容 NameNode 不儲存,主要由 DataNode 儲存
  2. NameNode 也管理檔案的上傳和下載操作,作為客戶端的請求響應

2. DataNode (資料節點 / 從節點)

HDFS 儲存的檔案 最終是有DataNode節點儲存的

檔案儲存的時候,DataNode並不是把檔案直接儲存的,而是將檔案按照檔案大小劃分為有一個的block塊,檔案都是以block塊去在DataNode上儲存的

Hadoop 1.x 預設是64M

Hadoop 2.x 預設是128M

block塊大小預設是128M,但是可以更改,在hdfs-site.xml中配置一個配置項 dfs.blocksize 即可(注意單位是B位元組)

Notes:HDFS預設有一個備份機制,儲存一個檔案的時候,劃分成不同的 block 塊,每一個 block

塊都會備份,預設HDFS備份三份,可以通過修改 hdfs-site.xml 中配置一個配置項 dfs.replication 即可

3. SecondaryNameNode (第二名稱節點)

是NameNode的小助手,幫助 NameNode 去合併日誌檔案和映象檔案。但是注意 SecondaryNameNode 雖然叫第二名稱節點,但它永遠是第二,永遠代替不了 NameNode。而且在一般情況下,NameNode 和 SecondaryNameNode 在分散式環境下不在一臺節點下NameNode 和 SecondaryNameNode、DataNode 都是需要記憶體執行的

四、HDFS傳輸檔案方式

HDFS是一個分散式檔案儲存系統,那麼必須可以上傳檔案和下載檔案

不管是通過命令去操作,還是 Java API操作,都必須把 HDFS叢集啟動起來

通過 HDFS 命令的方式上傳和下載

語法:

hdfs 操作符 檔案相關資訊

NotesHDFS是一個分散式檔案儲存系統,檔案系統路徑也是從 / 這個根路徑開始,只不過 / 根路徑預設是沒有任何檔案的

案例:

# 檢視這個路徑下有哪些檔案和資料夾
hdfs dfs -ls / hdfs 上的資料夾路徑           
 
#  建立某個資料夾,如果這個資料夾有父目錄,父目錄不存在,則會報錯
hdfs dfs -mkdir 檔名                               
 
# 若要在空目錄下建立目錄,需要加 -p 選項
hdfs dfs -mkdir -p 檔名 
 
# 將Linux本地的檔案上傳到HDFS指定目錄下
hdfs dfs -put linux本地檔案路徑 /上傳檔案路徑
 
# 將HDFS上的一個檔案下載到Linux本地
hdfs dfs -get /HDFS上的要下載的路徑 Linux本地的路徑

五、HDFS常用命令

  • -help:輸出這個命令引數

bin/hdfs dfs -help rm

  • -ls: 顯示目錄資訊

hadoop fs -ls /

  • -mkdir:在hdfs上建立目錄

# -p引數代表遞迴建立
hadoop fs -mkdir -p /aaa/bbb/cc/dd

  • -moveFromLocal從本地剪下貼上到hdfs

hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd

  • -moveToLocal:從hdfs剪下貼上到本地(尚未實現)

[uek@node2 hadoop-2.8.5]$ hadoop fs -help moveToLocal
-moveToLocal <src> <localdst> :
Not implemented yet

  • --appendToFile :追加一個檔案到已經存在的檔案末尾

hadoop fs -appendToFile ./hello.txt /hello.txt

  • -cat :顯示檔案內容

hadoop fs -cat /aaa/bbb/cc/dd/test.txt

  • -tail:顯示一個檔案的末尾

hadoop fs -tail /weblog/access_log.1

  • -chgrp 、-chmod、-chown:linux檔案系統中的用法一樣,修改檔案所屬許可權

hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt

  • -copyFromLocal:從本地檔案系統中拷貝檔案到hdfs路徑去:

```sh
hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/

  • -copyToLocal:從hdfs拷貝到本地

hadoop fs -copyToLocal /user/hello.txt ./hello.txt

  • -cp :從hdfs的一個路徑拷貝到hdfs的另一個路徑

hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

  • -mv:在hdfs目錄中移動檔案

hadoop fs -mv /aaa/jdk.tar.gz /

  • -get:等同於copyToLocal,就是從hdfs下載檔案到本地

hadoop fs -get /user/hello.txt ./

  • -getmerge :合併下載多個檔案,比如hdfs的目錄 /aaa/下有多個檔案:log.1, log.2,log.3,…

hadoop fs -getmerge /aaa/log.* ./log.sum

  • -put:等同於copyFromLocal

hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2​​​​​​​​​​​​​​

  • -rm:刪除檔案或資料夾

​​​​​​​​​​​​​​hadoop fs -rm -r /aaa/bbb/

  • -rmdir:刪除空目錄

​​​​​​​​​​​​​​hadoop fs -rmdir /aaa/bbb/ccc

  • -df :統計檔案系統的可用空間資訊

​​​​​​​​​​​​​​hadoop fs -df -h /

  • -du:統計資料夾的大小資訊

​​​​​​​​​​​​​[uek@node2 hadoop-2.8.5]$ hadoop fs -du -s -h /user/uek/wcinput
188.5 M /user/uek/wcinput
[uek@node2 hadoop-2.8.5]$ hadoop fs -du -h /user/uek/wcinput
188.5 M /user/uek/wcinput/hadoop-2.8.5.tar.gz
97 /user/uek/wcinput/wc.input

  • -count:統計一個指定目錄下的檔案節點數量

​​​​​​​​​​​​​​hadoop fs -count /aaa/
[uek@node2 hadoop-2.8.5]$ hadoop fs -count /user/uek/wcinput
1 2 197657784 /user/uek/wcinput
巢狀檔案層級包含檔案的總數

  • -setrep:設定hdfs中檔案的副本數量

hadoop fs -setrep 3 /aaa/jdk.tar.gz

# 這裡設定的副本數只是記錄在namenode的元資料中,是否真的會有這麼多副本,還得看datanode的數量。因為目前只有3臺裝置,最多也就3個副本,只有節點數的增加到10臺時,副本數才能達到10。

六、如何實現啟動HDFSyarn的時候不輸入密碼

  解決方式就是讓電腦知道自己的登入密碼或者是別的電腦的登入密碼 這樣的花啟動的時候就不需要輸入密碼;

  配置ssh免金鑰登入----配置不使用密碼可以登入

  核心思想:就是在當前使用者的家目錄的.ssh目錄下生成一個公鑰私鑰

  然後講公鑰傳給別人 那麼別人再去登入你的時候就可以不用輸入密碼了

  1、生成金鑰

   必須在~/.ssh這個目錄下執行命令 ssh-keygen -t rsa

  2、怎麼把密碼給別人

  ssh-copy-id 你要給的主機ip