(157)異構(gòu)存儲概述
概述
異構(gòu)存儲,也叫做冷熱數(shù)據(jù)分離。其中,經(jīng)常使用的數(shù)據(jù)被叫做是熱數(shù)據(jù),不經(jīng)常使用的數(shù)據(jù)被叫做冷數(shù)據(jù)。
把冷熱數(shù)據(jù),分別存儲在不同的存儲介質(zhì)里,從而達(dá)到對每個(gè)介質(zhì)的利用率最高,從而實(shí)現(xiàn)整體最佳性能,或者說性價(jià)比更高(比如說高性能硬盤放經(jīng)常使用的數(shù)據(jù))。
簡單的說,就是這么一個(gè)問題:經(jīng)常使用的數(shù)據(jù)、不經(jīng)常使用的數(shù)據(jù),是分別放在固態(tài)硬盤里更好,還是放在機(jī)械硬盤里更好,亦或者是放在內(nèi)存里更好?
一般來講,集群里會(huì)有這么幾種存儲類型:
- RAM_DISK:內(nèi)存鏡像文件系統(tǒng);
- SSD:SSD固態(tài)硬盤;
- DISK:普通磁盤。在HDFS中,如果沒有主動(dòng)聲明,那么數(shù)據(jù)目錄存儲類型默認(rèn)都是DISK;
- ARCHIVE:沒有特指哪種存儲介質(zhì),主要是指計(jì)算能力弱而存儲密度比較高的存儲介質(zhì),用來解決數(shù)據(jù)量的容量擴(kuò)增問題,一般用于歸檔;
關(guān)于存儲策略:
注意, 默認(rèn)存儲策略是HOT策略 ,即所有副本都保存在磁盤里。
訪問速度最快的是Lazy_persist策略,一個(gè)副本保存在內(nèi)存中,其它副本保存在磁盤中。
異構(gòu)存儲的shell操作
(1)查看當(dāng)前有哪些存儲策略可以用
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -listPolicies
(2)為指定路徑(數(shù)據(jù)存儲目錄)設(shè)置指定的存儲策略
hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx
(3)獲取指定路徑(數(shù)據(jù)存儲目錄或文件)的存儲策略
hdfs storagepolicies -getStoragePolicy -path xxx
(4)取消存儲策略;執(zhí)行改命令之后該目錄或者文件,以其上級的目錄為準(zhǔn),如果是根目錄,那么就是HOT
hdfs storagepolicies -unsetStoragePolicy -path xxx
(5)查看某個(gè)路徑下的文件塊的分布
bin/hdfs fsck <path> -files -blocks -locations
(6)查看集群節(jié)點(diǎn)
hadoop dfsadmin -report
可以看到,跟糾刪碼一樣,異構(gòu)存儲針對的對象,也是某一個(gè)路徑。
(158)異構(gòu)存儲案例實(shí)操
這塊在教程里比較長,都是實(shí)驗(yàn)各種存儲策略的代碼,所以只挑選個(gè)人感興趣的地方做簡單記錄,就不批量復(fù)制了,僅做了解即可。
關(guān)于集群如何識別自己的存儲介質(zhì)的類型?
是無法自動(dòng)辨別的,需要在節(jié)點(diǎn)的hdfs-site.xml中手動(dòng)指定,一個(gè)路徑如果你指定了是SSD的話,那集群就認(rèn)為它就是SSD。
舉例,我要給一個(gè)節(jié)點(diǎn),配置上SSD目錄和RAM_DISK目錄,就可以打開該節(jié)點(diǎn)上的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>
上面代碼里,第一個(gè)property是設(shè)置副本數(shù)量為2,第二個(gè)property是設(shè)置異構(gòu)存儲策略為打開狀態(tài),最后一個(gè)property則是將兩個(gè)路徑分別指定成SSD目錄和RAM_DISK目錄。
教程里一共列舉了5個(gè)節(jié)點(diǎn),分別修改它們的hdfs-site.xml,做不同的存儲類型分配,如下:
節(jié)點(diǎn) | 存儲類型分配 |
---|---|
hadoop102 | RAM_DISK,SSD |
hadoop103 | SSD,DISK |
hadoop104 | DISK,RAM_DISK |
hadoop105 | ARCHIVE |
hadoop106 | ARCHIVE |
我們在HDFS上創(chuàng)建一個(gè)新目錄,然后上傳一個(gè)新文件到目錄里:
hadoop fs -mkdir /hdfsdata
hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt /hdfsdata
新建的目錄默認(rèn)是HOT存儲策略,即所有副本都存儲在DISK上,我們可以驗(yàn)證一下,即使用下面命令,查看上傳的文件塊分布:
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.104:9866,DS-0b133854-7f9e-48df-939b-5ca6482c5afb,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-ca1bd3b9-d9a5-4101-9f92-3da5f1baa28b,DISK]]
其實(shí)執(zhí)行命令之后,打印出來的信息有很多,我們只展示了一小部分,從輸出上可以看到,一個(gè)副本存儲在了104的DISK目錄下,另一個(gè)副本存儲在了103的DISK目錄下。
接下來,我們嘗試將這個(gè)目錄的存儲策略修改為WARM策略,即一個(gè)副本在DISK上,其他副本在ARCHIVE上。
(1)首先,修改這個(gè)目錄的存儲策略修改為WARM策略
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM
(2)再次查看文件塊分布,我們可以看到文件塊依然放在原處。
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
(3)我們需要讓他HDFS按照存儲策略自行移動(dòng)文件塊
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata
(4)再次查看文件塊分布,
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
[DatanodeInfoWithStorage[192.168.10.105:9866,DS-d46d08e1-80c6-4fca-b0a2-4a3dd7ec7459,ARCHIVE], DatanodeInfoWithStorage[192.168.10.103:9866,DS-ca1bd3b9-d9a5-4101-9f92-3da5f1baa28b,DISK]]
可以看到,執(zhí)行了hdfs mover /hdfsdata
之后,在103的DISK目錄里的那個(gè)副本沒有變化,另一個(gè)副本移動(dòng)到了105上的ARCHIVE目錄里。
接下來,教程里按照上面的流程,依次測試了其他幾種策略,基本流程和命令都是一樣的,所以這里就不展示了。
唯一需要注意的,是LAZY_PERSIST策略,理論上執(zhí)行了策略之后,會(huì)達(dá)到一個(gè)副本在RAM_DISK,即內(nèi)存中,另一個(gè)副本在DISK中的效果。但實(shí)際中并不是。有兩個(gè)原因:
一是在Hadoop的配置文件里,有一個(gè)dfs.datanode.max.locked.memory
,它控制了你往內(nèi)存里存儲副本數(shù)據(jù)的大小,這個(gè)參數(shù)默認(rèn)是0,即不能往內(nèi)存里存數(shù)據(jù)。
二是如果你用的是linux虛擬機(jī)的話,虛擬機(jī)也會(huì)限制你往內(nèi)存中放數(shù)據(jù)的大小。
基于這兩個(gè)原因,實(shí)際中的LAZY_PERSIST策略并不會(huì)生效。從而導(dǎo)致所有副本都被放進(jìn)了DISK目錄里。文章來源:http://www.zghlxwxcb.cn/news/detail-720426.html
如果實(shí)在想往內(nèi)存里放副本,可以嘗試將dfs.datanode.max.locked.memory
修改為文件塊大?。J(rèn)128M)的倍數(shù),但是生產(chǎn)中是不推薦的。畢竟放在內(nèi)存里容易宕機(jī)丟失,后果還是蠻嚴(yán)重的。文章來源地址http://www.zghlxwxcb.cn/news/detail-720426.html
參考文獻(xiàn)
- 【尚硅谷大數(shù)據(jù)Hadoop教程,hadoop3.x搭建到集群調(diào)優(yōu),百萬播放】
到了這里,關(guān)于Hadoop3教程(三十一):(生產(chǎn)調(diào)優(yōu)篇)異構(gòu)存儲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!