異構存儲主要解決,不同的資料,儲存在不同類型的硬碟中,達到最佳性能的問題
1)存儲類型
RAM_DISK:記憶體鏡像檔案系統
SSD:SSD固态硬碟
DISK:普通磁盤,在HDFS中,如果沒有主動聲明資料目錄儲存類型預設都是DISK
ARCHIVE:沒有特指哪種存儲媒體,主要指的是計算能力比較弱而儲存密度比較高的媒體,用來解決資料容量擴增的問題,一般用于歸檔
原文:sw-code
2)儲存政策
政策ID | 政策名稱 | 副本分布 |
---|---|---|
15 | Lazy_Persist | RAM_DISK:1, DISK: n-1 |
12 | All_SSD | SSD :n |
10 | One_SSD | SSD:1, DISK: n-1 |
7 | Host(default) | DISK: n |
6 | Warm | DISK:1, ARCHIVE: n-1 |
2 | Cold | ARCHIVE: n |
Shell操作
(1)檢視目前有哪些存儲政策可用。原文:sw-code
[hadoop@hadoop102 ~]$ hdfs storagepolicies -listPolicies
(2)為指定路徑(資料存儲目錄或檔案)的存儲政策
hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx
(3)擷取指定路徑(資料存儲目錄或檔案)的存儲政策
hdfs storagepolicies -getStoragePolicy -path xxx
(4)取消政策:執行該指令後該目錄或檔案,及其上級的目錄為準,如果是根目錄,那麼就是HOT
hdfs storagepolicies -unsetStoragePolicy -path xxx
(5)檢視檔案塊的分布
hdfs fsck xxx -files -blocks -locations
(6)檢視叢集節點
hadoop dfsadmin -report
測試環境準備
1)環境描述
伺服器規模:5台
叢集配置:副本數為2,建立好帶有存儲類型的目錄(提前建立)
叢集規劃
節點 | 存儲類型配置設定 |
---|---|
hadoop102 | RAM_DISK,SSD |
hadoop103 | SSD,DISK |
hadoop104 | DISK,RAM_DISK |
hadoop105 | ARCHIVE |
hadoop106 | ARCHIVE |
2)配置檔案資訊
(1)為hadoop102節點的
hdfs-site.xml
添加如下資訊
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>[SSD]file:///opt/module/hadoop-3.1.3/hdfsdata/ssd,[RAM_DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/ram_disk</value>
</property>
(3)為hadoop103節點的
hdfs-site.xml
添加如下資訊
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>[SSD]file:///opt/module/hadoop-3.1.3/hdfsdata/ssd,[DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/disk</value>
</property>
(4)為hadoop104節點的
hdfs-site.xml
添加如下資訊
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>[RAM_DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/ram_disk,[DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/disk</value>
</property>
(5)為hadoop105節點的
hdfs-site.xml
添加如下資訊
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>[ARCHIVE]file:///opt/module/hadoop-3.1.3/hdfsdata/archive</value>
</property>
(6)為hadoop106節點的
hdfs-site.xml
添加如下資訊
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.storage.policy.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>[ARCHIVE]file:///opt/module/hadoop-3.1.3/hdfsdata/archive</value>
</property>
3)資料準備
(1)啟動叢集
[hadoop@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
[hadoop@hadoop102 hadoop-3.1.3]$ myhadoop.sh start
(2)在HDFS上建立檔案目錄
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /hdfsdata
(3)上傳檔案
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -put NOTICE.txt /hdfsdata
可在Browsing HDFS檢視檔案資訊
HOT存儲政策案例
(1)最開始我們未設定存儲政策的情況下,我們擷取該目錄的存儲政策
[hadoop@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -getStoragePolicy -path /hdfsdata
The storage policy of /hdfsdata is unspecified
(2)檢視上傳的檔案塊分布
[hadoop@hadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]
未設定存儲政策,所有檔案都存儲在DISK下。是以,預設存儲政策為HOT。
WARM存儲政策測試
(1)接下來為資料降溫
[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM
(2)再次檢視檔案塊分布,我們可以看到檔案塊依然放在原處
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
(3)我們需要讓他HDFS按照存儲政策自行移動檔案夾
[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata
(4)再次檢視檔案塊分布
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.106:9866,DS-a417ad5b-f80a-4f8c-a500-d6d5a6c52d6d,ARCHIVE], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]
檔案一半在DISK,一半在ARCHIVE,符合我們設定的WARM政策
COLD政策測試
(1)繼續降溫為clod
[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy COLD
注意:當我們将目錄設定為COLD并且我們未配置ARCHIVE存儲目錄的情況下,不可以直接向該目錄直接上傳檔案,會報出異常。
(2)手動轉移
[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata
(3)檢查檔案快分布
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.106:9866,DS-a417ad5b-f80a-4f8c-a500-d6d5a6c52d6d,ARCHIVE], DatanodeInfoWithStorage[192.168.10.105:9866,DS-1c17f839-d8f5-4ca2-aa4c-eaebbdd7c638,ARCHIVE]]
ONE_SSD政策測試
(1)更改政策為ONE_SSD
[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy ONE_SSD
(2)手動轉移
[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata
(3)檢查檔案快分布
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-0a858711-8264-4152-887a-9408e2f83c3a,SSD]]
ALL_SSD政策測試
(1)更改政策為ALL_SSD
[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy ALL_SSD
(2)手動轉移
[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata
(3)檢查檔案快分布
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.102:9866,DS-b4a0eba9-0335-409a-aab5-2ebfe724fe0a,SSD], DatanodeInfoWithStorage[192.168.10.103:9866,DS-0a858711-8264-4152-887a-9408e2f83c3a,SSD]]
LAZY_PERSIST政策測試
(1)更改政策為LAZY_PERSIST
[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy LAZY_PERSIST
(2)手動轉移
[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata
(3)檢查檔案快分布
[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]
檔案塊都存儲在了DISK中,與預期的不一樣,這是因為,還需要配置
dfs.datanode.max.locked.memory
和
dfs.block.size
參數。
當存儲政策為LAZY_PERSIST時,檔案塊副本都存儲在DISK上的原因有如下兩點:
(1)當用戶端所在節點沒有RAM_DISK時,則會寫入用戶端所在的DataNode節點的DISK磁盤。其餘副本會寫入其他節點的DISK磁盤。
(2)當用戶端所在的DataNode有RAM_DISK時,但
dfs.datanode.max.locked.memory
參數未設定或設定過小(小于
dfs.block.size
參數值)時,則會寫入用戶端所在的DataNode節點的DISK磁盤,其餘會寫入其他節點的DISK磁盤。
但是由于虛拟機的
max locked memory
為64KB,是以如果參數配置過大,會報錯
我們可以通過該指令檢視此參數的記憶體
[hadoop@hadoop102 ~]$ ulimit -a
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
本文來自部落格園,作者:sw-code,轉載請注明原文連結:https://www.cnblogs.com/sw-code/p/16391434.html