一、简介
异构存储主要解决,不同的数据,存储在不同类型的硬盘中,达到最佳性能的效果。
它的使用,也是针对存储路径
进行配置的。
二、存储类型和存储策略
1、存储类型
2、存储策略
3、常用命令
1、查看集群支持的策略
hdfs storagepolicies -listPolicies
可以看出,支持7种,但是,我们这里只做6种策略的配置。
2、查看指定路径的存储策略
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
3、设置路径的存储策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM
4、取消存储策略
执行改命令之后该目录或者文件,以其上级的目录为准,如果是根目录,那么就是HOT
5、查看文件块的分布
hdfs fsck /hdfsdata -files -blocks -locations
6、查看集群节点
三、环境准备
1、方案规划
服务器规模:5台
集群配置:副本数为2,创建好带有存储类型的目录(提前创建)
集群规划:
节点 存储类型分配
2、修改配置
由上规划可知,这次的配置,每个节点都是不同的,所以,不能群发。
配置文件:hdfs-site.xml
102
<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>
103
<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>
104
<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/hdfsdata/ram_disk,[DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/disk</value>
</property>
105
<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>
106
<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>
我们可以看出,给对应路径前添加了标识
Hadoop集群是不会自己监测路径对应的磁盘属性的。
我们只能通过标识,然后,给对应的路径挂载对应类型的存储介质
3、集群重置
停止集群,删除data、logs
目录,格式化NameNode
,启动集群
myhadoop stop
jpsall
cd /opt/module/hadoop-3.1.3
rm -rf data/ logs/
hdfs namenode -format
创建目录
hadoop fs -mkdir /hdfsdata
上传数据
hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt /hdfsdata
四、HOT策略实验
策略逻辑:DISK:n
1、查看路径策略
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
没有定义,就是采用默认策略,就是HOT策略。
2、查看上传的文件分布
hdfs fsck /hdfsdata -files -blocks -locations
两个副本,都存储在DISK类型的路径里。
五、WARM策略实验
策略逻辑:DISK:1,ARCHIVE:n-1
1、设置WARM策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
2、查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
发现没有变化
3、移动文件
hdfs mover /hdfsdata
4、再次查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
已经按照WARM
策略分布文件
所以,我们在跟新路径存储策略之后,需要执行一下移动命令!
六、COLD策略实验
策略逻辑:ARCHIVE:n
1、设置COLD策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy COLD
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
注意:当我们将目录设置为COLD并且我们未配置ARCHIVE存储目录的情况下,不可以向该目录直接上传文件,会报出异常。
2、移动文件
hdfs mover /hdfsdata
3、查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
七、ONE_SSD策略实验
策略逻辑:SSD:1,DISK:n-1
1、设置ONE_SSD策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy One_SSD
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
2、移动文件
hdfs mover /hdfsdata
3、查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
八、ALL_SSD策略实验
策略逻辑:SSD:n
1、设置ALL_SSD策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy All_SSD
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
2、移动文件
hdfs mover /hdfsdata
3、查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
九、LAZY_PERSIST策略实验
策略逻辑:RAM_DISK:1,DISK:n-1
1、设置LAZY_PERSIST策略
hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy lazy_persist
hdfs storagepolicies -getStoragePolicy -path /hdfsdata
2、移动文件
hdfs mover /hdfsdata
3、查看文件分布
hdfs fsck /hdfsdata -files -blocks -locations
发现,没有在内存里存储数据。
注意:
这是因为,我们还需要配置“dfs.datanode.max.locked.memory”,“dfs.block.size”
参数。
dfs.block.size
:设置块大小
dfs.datanode.max.locked.memory
:设置内存存储数据的大小,默认0kb。
另外,内存存储数据的大小值设置,必须大于等于块大小。
同时,Linux
系统也限制了内存存储数据的大小,默认64KB
ulimit -a
所以,无论是HDFS
,还是Linux
系统,都不建议把数据存放在内存中
因为,不安全,断电即丢失。