目錄
五、常用的shell指令
六、hdfs中塊的概念
6.1 傳統檔案系統的塊的缺點
6.2 HDFS的塊的特點
6.3 HDFS的塊大小
6.4 塊的相關引數設定
6.5 HDFS塊的存盤位置
6.6 HDFS塊大小的選擇
6.7 塊的引數
6.8 HDFS的優缺點
五、常用的shell指令
在命令上輸入hdfs dfs 或者是hadoop fs后,直接回車就會提示相關的引數的用法
Usage: hadoop fs [generic options]
-- 創建目錄指令
[-mkdir [-p] <path> ...]
--檔案的上傳指令
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-moveFromLocal <localsrc> ... <dst>]
--檔案的下載指令
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-moveToLocal <src> <localdst>]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
--檔案的查看指令
[-cat [-ignoreCrc] <src> ...]
[-tail [-f] <file>]
[-ls [-d] [-h] [-R] [<path> ...]]
--檔案內容追加指令
[-appendToFile <localsrc> ... <dst>]
?
--檔案的權限管理制定
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
?
--hdfs系統的查看指令
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
--檔案的洗掉指令
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
六、hdfs中塊的概念
6.1 傳統檔案系統的塊的缺點
傳統檔案系統中的塊 沒有規定塊的大小是統一的,因此有以下缺點 -- 1. 負載不均衡: 每臺機器上存盤的檔案大小非常不均勻,有的機器只存盤很小的檔案,有的機器存盤很大的檔案, -- 2. 網路瓶頸問題: 網路帶寬本來就稀缺,用戶在使用時,集中到某幾臺機器上讀取檔案,因此本來就已經很稀缺的網路帶寬有被稀釋了,
6.2 HDFS的塊的特點
-- hdfs的塊大小統一,固定的,
-- hdfs的塊大小可以自定義
默認情況:hadoo2.x ---->128M
hadoo1.x ---->64M
hadoo3.x ---->256M
-- 塊是hdfs的最小存盤單元
-- 塊使用了副本的概念(提高資料的安全性,可靠性)
-- 塊的多個副本一定是布局到不同的機器上的(一個機器不可能有一個塊的兩個副本)
-- 檔案的最后一個塊,通常是小于128M,實際大小是多少,就占磁盤多少空間,
?
注意:塊的數量 和塊的個數要區別開,
6.3 HDFS的塊大小
HDFS上的塊大小為什么會遠遠大于傳統檔案?
1. 目的是為了最小化尋址開銷時間,
在I/O開銷中,機械硬碟的尋址時間是最耗時的部分,一旦找到第一條記錄,剩下的順序讀取效率是非常高的,因此以塊為單位讀寫資料,可以盡量減少總的磁盤尋道時間,
HDFS尋址開銷不僅包括磁盤尋道開銷,還包括資料塊的定位開銷,當客戶端需要訪問一個檔案時,首先從名稱節點獲取組成這個檔案的資料塊的位置串列,然后根據位置串列獲取實際存盤各個資料塊的資料節點的位置,最后,資料節點根據資料塊資訊在本地Linux檔案系統中找到對應的檔案,并把資料回傳給客戶端,設計成一個比較大的塊,可以減少每個塊兒中資料的總的尋址開銷,相對降低了單位資料的尋址開銷
磁盤的尋址時間為大約在5~15ms之間,平均值為10ms,而最小化尋址開銷時間普遍認為占1秒的百分之一是最優的,那么塊大小的選擇就參考1秒鐘的傳輸速度,比如2010年硬碟的傳輸速率是100M/s,那么就選擇塊大小為128M,
?
2. 為了節省記憶體的使用率
一個塊的元資料大約150個位元組,1億個塊,不論大小,都會占用20G左右的記憶體,因此塊越大,集群相對存盤的資料就越多,所以暴漏了HDFS的一個缺點,不適合存盤小檔案(殺雞用牛刀的感覺)
6.4 塊的相關引數設定
當然塊大小在默認組態檔hdfs-default.xml中有相關配置,我們可以在hdfs-site.xml中進行重置
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>默認塊大小,以位元組為單位,可以使用以下后綴(不區分大小寫):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>
?
<property>
<name>dfs.namenode.fs-limits.min-block-size</name>
<value>1048576</value>
<description>以位元組為單位的最小塊大小,由Namenode在創建時強制執行,這可以防止意外創建帶有小塊的檔案降低性能,</description>
</property>
?
<property>
<name>dfs.namenode.fs-limits.max-blocks-per-file</name>
<value>1048576</value>
<description>每個檔案的最大塊數,由寫入時的Namenode執行,這可以防止創建降低性能的超大檔案</description>
</property>
6.5 HDFS塊的存盤位置
在hdfs-site.xml中我們配置過下面這個屬性,這個屬性的值就是塊在linux系統上的存盤位置
<!-- 確定DFS資料節點應該將其塊存盤在本地檔案系統的何處-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
6.6 HDFS塊大小的選擇
--1. 塊不能太大, 原因是網路帶寬稀缺,下載時間長,帶寬被稀釋的就越多
--2. 塊不能太小:
##1. 最小化尋址開銷時間
尋址時間在大約在5ms~15ms左右,平均是10ms,如果塊大小,那么傳輸這個塊的時間就非常小,比如是10ms,那么傳輸時間和尋址時間的比例就是1:1的關系,尋址時間不能被忽略,相對來說,占用了整個作業時間的比例比較大,應該讓尋址時間的比例越小越好,小到忽略不計,而開發人員認為1:100的比例是最優的,
因此選擇了10ms:1000ms的比例,也就是選擇1000ms能傳輸的資料大小,
在2010年左右, 磁盤每1s傳入的資料大小是100M左右,選擇2的冪次數,因此選擇128M.
在hadoop1.x版本時,磁盤速率在50M左右,選擇2的冪次數,因此選擇64M.
在hadoop3.x版本時,磁盤速率在300M左右,選擇2的冪次數,因此選擇256M.
##2. namenode記憶體的利用率:
無論塊是多大,對應的元資料都是150位元組左右, 假如namenode的記憶體是20G,能存盤塊的數量為1.4億左右,
如果塊大小為1M,那么這個集群大約存盤133TB的資料,那么集群的存盤能力非常低
如果塊大小為128M,那么這個集群大約存盤16PB的資料
如果塊大小為512M,那么這個集群大約存盤64PB的資料
--3.擴展:怎么提高集群的存盤能力
(1). 在namenode記憶體是固定的情況下,提高塊的大小
(2). 在namenode記憶體充足的情況下,橫向擴展集群的datanode個數,
6.7 塊的引數
--1. dfs.blocksize:
塊的大小對應的引數
--2. dfs.namenode.fs-limits.min-block-size:
塊大小的最小值,默認是1M
--3. dfs.namenode.fs-limits.max-blocks-per-file:
每個檔案的塊的最大數量,默認是1048576個,
--4. 塊的存盤位置:
由dfs.datanode.data.dir引數決定: 默認值${hadoop.tmp.dir}/dfs/data
6.8 HDFS的優缺點
##1. 優點:
1. 高容錯性(硬體故障是常態,高可靠性):資料自動保存多個副本,副本丟失后,會自動恢復
2. 適合大資料集:GB、TB、甚至PB級資料、千萬規模以上的檔案數量,1000以上節點規模,
3. 資料訪問: 一次性寫入,多次讀取;保證資料一致性,安全性
4. 構建成本低:可以構建在廉價機器上,
5. 多種軟硬體平臺中的可移植性
6. 高效性:Hadoop能夠在節點之間動態地移動資料,并保證各個節點的動態平衡,因此處理速度非常快,
?
##2. 缺點
1. 不適合做低延遲資料訪問:
HDFS的設計目標有一點是:處理大型資料集,高吞吐率,這一點勢必要以高延遲為代價的,因此HDFS不適合處理用戶要求的毫秒級的低延遲應用請求
2. 不適合小檔案存取:
一個是大量小檔案需要消耗大量的尋址時間,違反了HDFS的盡可能減少尋址時間比例的設計目標,第二個是記憶體有限,一個block元資料大記憶體消耗大約為150個位元組,存盤一億個block和存盤一億個小檔案都會消耗20G記憶體,因此相對來說,大檔案更省記憶體
3. 不適合并發寫入,檔案隨機修改:
HDFS上的檔案只能擁有一個寫者,僅僅支持append操作,不支持多用戶對同一個檔案的寫操作,以及在檔案任意位置進行修改
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/377443.html
標籤:其他
