目錄
1. NameNode(名稱節點 / 主節點)----- HDFS集群的管理者
一、HDFS概述
Hadoop 分布式文件系統,用於存儲文件,與Windows不同的是他是一個分布式的,由很多服務器聯合起來實現其功能。
二、HDFS特點
- 一次寫入,多次讀取,寫入后只允許刪除或查看,不支持文件修改。
- HDFS文件讀取或寫入都比較慢,不適合做實時性或者低延時的操作
Notes:適合用來做數據分析,不適合做網盤應用。
三、HDFS集群組成:主從架構---一個主節點,多個從節點
1. NameNode(名稱節點 / 主節點)----- HDFS集群的管理者
- 管理文件存儲的元數據
- 元數據包括了文件的信息、大小。文件的上傳時間、作者、文件在那個DataNode上存儲
- 元數據中還包含了 文件義工分成了幾個板塊,每個板塊在那個DataNode上存儲着
- 但是 NameNode 只存儲這些信息,文件中真正的內容 NameNode 不存儲,主要由 DataNode 存儲
- 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 操作符 文件相關信息
Notes:HDFS是一個分布式文件存儲系統,文件系統路徑也是從 / 這個根路徑開始,只不過 / 根路徑默認是沒有任何文件的
案例:
# 查看這個路徑下有哪些文件和文件夾 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。
六、如何實現啟動HDFS和yarn的時候不輸入密碼
解決方式就是讓電腦知道自己的登錄密碼或者是別的電腦的登錄密碼 這樣的花啟動的時候就不需要輸入密碼;
配置ssh免密鑰登錄----配置不使用密碼可以登錄
核心思想:就是在當前用戶的家目錄的.ssh目錄下生成一個公鑰和私鑰
然后講公鑰傳給別人 那么別人再去登錄你的時候就可以不用輸入密碼了
1、生成密鑰
必須在~/.ssh這個目錄下執行命令 ssh-keygen -t rsa
2、怎么把密碼給別人
ssh-copy-id 你要給的主機ip