初識HDFS原理及框架
目錄
-
HDFS是什麼
-
HDFS的優缺點
-
HDFS的框架
-
HDFS的讀寫流程
-
HDFS命令
-
HDFS引數
1. HDFS是什麼
HDFS(Hadoop Distributed File System)是Hadoop專案的核心子專案,首先 它是一個檔案系統 ,用於儲存檔案,通過目錄樹來定位檔案位置;其次, 它是分散式的 ,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各自的角色。
2.HDFS的優缺點
之所以選擇HDFS來儲存資料,是具有如下優勢:
No | 優勢 | 描述 |
1 | 高容錯性 |
|
2 | 適合批處理 |
|
3 | 適合大資料處理 |
|
4 | 流式檔案訪問 |
|
5 | 可構建在廉價機器上 |
|
HDFS也有不適合的場景:
No | 缺點 | 描述 |
1 | 低延時資料訪問 |
|
2 | 小檔案儲存 |
|
3 | 併發寫入、檔案隨機修改 |
|
3. HDFS框架結構
HDFS 採用Master/Slave的架構來儲存資料,這種架構主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分。
No | 角色 | 功能描述 |
1 | Client:就是客戶端 |
|
2 | NameNode:就是 master,它是一個主管、管理者 |
|
3 | DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作 |
|
4 | Secondary NameNode:並非 NameNode 的熱備。當NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務 |
|
4. HDFS的讀寫流程
4.1. HDFS的塊大小
HDFS中的檔案在物理上是分塊儲存(block),塊的大小可以通過配置引數( dfs.blocksize )來規定,預設大小在hadoop2.x版本中是128M,老版本中是64M
HDFS的塊比磁碟的塊大,其目的是為了最小化定址開銷。如果塊設定得足夠大,從磁碟傳輸資料的時間會明顯大於定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的檔案的時間取決於磁碟傳輸速率。
如果定址時間約為10ms,而傳輸速率為100MB/s,為了使定址時間僅佔傳輸時間的1%,我們要將塊大小設定約為100MB。 預設的塊大小128MB 。
塊的大小:10ms*100*100M/s = 100M
4.2. HDFS寫資料流程
1)客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。
2)namenode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode伺服器上。
4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答佇列等待應答
8)當一個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)
4.3. HDFS讀資料流程
1)客戶端向namenode請求下載檔案,namenode通過查詢元資料,找到檔案塊所在的datanode地址。
2)挑選一臺datanode(就近原則,然後隨機)伺服器,請求讀取資料。
3)datanode開始傳輸資料給客戶端(從磁盤裡面讀取資料放入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。
5.HDFS命令
1)基本語法
bin/hadoop fs 具體命令
2)常用命令實操
(1)-help:輸出這個命令引數
bin/hdfs dfs -help rm
(2)-ls: 顯示目錄資訊
hadoop fs -ls /
(3)-mkdir:在hdfs上建立目錄
hadoop fs -mkdir -p /aaa/bbb/cc/dd
(4)-moveFromLocal從本地剪下貼上到hdfs
hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
(5)-moveToLocal:從hdfs剪下貼上到本地(尚未實現)
hadoop fs -help moveToLocal
-moveToLocal <src> <localdst> :
Not implemented yet
(6)--appendToFile :追加一個檔案到已經存在的檔案末尾
hadoop fs -appendToFile ./hello.txt /hello.txt
(7)-cat :顯示檔案內容
(8)-tail:顯示一個檔案的末尾
hadoop fs -tail /weblog/access_log.1
(9)-chgrp 、-chmod、-chown:linux檔案系統中的用法一樣,修改檔案所屬許可權
hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt
(10)-copyFromLocal:從本地檔案系統中拷貝檔案到hdfs路徑去
hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/
(11)-copyToLocal:從hdfs拷貝到本���
hadoop fs -copyToLocal /user/hello.txt ./hello.txt
(12)-cp :從hdfs的一個路徑拷貝到hdfs的另一個路徑
hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(13)-mv:在hdfs目錄中移動檔案
hadoop fs -mv /aaa/jdk.tar.gz /
(14)-get:等同於copyToLocal,就是從hdfs下載檔案到本地
hadoop fs -get /user/hello.txt ./
(15)-getmerge :合併下載多個檔案,比如hdfs的目錄 /aaa/下有多個檔案:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
(16)-put:等同於copyFromLocal
hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(17)-rm:刪除檔案或資料夾
hadoop fs -rm -r /aaa/bbb/
(18)-rmdir:刪除空目錄
hadoop fs -rmdir /aaa/bbb/ccc
(19)-df :統計檔案系統的可用空間資訊
hadoop fs -df -h /
(20)-du統計資料夾的大小資訊
hadoop fs -du -s -h /user/data/wcinput
188.5 M /user/data/wcinput
hadoop fs -du -h /user/data/wcinput
188.5 M /user/data/wcinput/hadoop-2.7.2.tar.gz
97 /user/data/wcinput/wc.input
(21)-count:統計一個指定目錄下的檔案節點數量
hadoop fs -count /aaa/
hadoop fs -count /user/data/wcinput
1 2 197657784 /user/data/wcinput
巢狀檔案層級; 包含檔案的總數
(22)-setrep:設定hdfs中檔案的副本數量
hadoop fs -setrep 3 /aaa/jdk.tar.gz
這裡設定的副本數只是記錄在namenode的元資料中,是否真的會有這麼多副本,還得看datanode的數量。如果只有3臺裝置,最多也就3個副本,只有節點數的增加到10臺時,副本數才能達到10。
6.HDFS相關引數
No | 引數名稱 | 預設值 | 所屬引數檔案 | 描述 |
1 | dfs.block.size, dfs.blocksize |
134217728 | hdfs-site.xml | 以位元組計算的新建 HDFS 檔案預設塊大小。請注意該值也用作 HBase 區域伺服器 HLog 塊大小。 |
2 | dfs.replication | 3 | hdfs-site.xml | HDFS檔案的資料塊複製份數。 |
3 | dfs.webhdfs.enabled | TRUE | hdfs-site.xml | 啟用 WebHDFS 介面,啟動50070埠。 |
4 | dfs.permissions | TRUE | hdfs-site.xml | HDFS檔案許可權檢查。 |
5 | dfs.datanode.failed.volumes.tolerated | 0 | hdfs-site.xml | 能夠導致DN掛掉的壞硬碟最大數,預設0就是隻要有1個硬碟壞了,DN就會shutdown。 |
6 | dfs.data.dir, dfs.datanode.data.dir |
xxx,xxx | hdfs-site.xml | DataNode資料儲存路徑,可以寫多塊硬碟,逗號分隔 |
7 | dfs.name.dir, dfs.namenode.name.dir |
xxx,xxx | hdfs-site.xml | NameNode本地元資料儲存目錄,可以寫多塊硬碟,逗號分隔 |
8 | fs.trash.interval | 1 | core-site.xml | 垃圾桶檢查頻度(分鐘)。要禁用垃圾桶功能,請輸入0。 |
9 | dfs.safemode.min.datanodes | 0 | hdfs-site.xml | 指定在名稱節點存在 safemode 前必須活動的 DataNodes 數量。輸入小於或等於 0 的值,以在決定啟動期間是否保留 safemode 時將活動的 DataNodes 數量考慮在內。值大於群集中 DataNodes 的數量時將永久保留 safemode。 |
10 | dfs.client.read.shortcircuit | TRUE | hdfs-site.xml | 啟用 HDFS short circuit read。該操作允許客戶端直接利用 DataNode 讀取 HDFS 檔案塊。這樣可以提升本地化的分散式客戶端的效能 |
11 | dfs.datanode.handler.count | 3 | hdfs-site.xml | DataNode 伺服器執行緒數。預設為3,較大叢集,可適當調大些,比如8。 |
12 | dfs.datanode.max.xcievers, dfs.datanode.max.transfer.threads | 256 | hdfs-site.xml | 指定在 DataNode 內外傳輸資料使用的最大執行緒數,datanode在進行檔案傳輸時最大執行緒數 |
13 | dfs.balance.bandwidthPerSec, dfs.datanode.balance.bandwidthPerSec | 1048576 | hdfs-site.xml | 每個 DataNode 可用於平衡的最大頻寬。單位為位元組/秒 |
以上引數中可能有2個名稱,前面一個是老版本1.x的後面的是新版本2.x的。
使用HDFS dfs命令對檔案進行增刪改查操作 Linux/2018-10/../../Linux/2018-08/153641.htm" rel="nofollow,noindex" target="_blank">https://www.linuxidc.com/Linux/2018-08/153641.htm
Hadoop叢集間的HDFS檔案拷貝 https://www.linuxidc.com/Linux/2017-09/146879.htm
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-10/154604.htm