有哪些官网做的比较好的网站,班服定制网站,网站被挂马怎么处理,虚拟服务器和如何创建网站文章目录 #xff08;157#xff09;异构存储概述概述异构存储的shell操作 #xff08;158#xff09;异构存储案例实操参考文献 #xff08;157#xff09;异构存储概述
概述
异构存储#xff0c;也叫做冷热数据分离。其中#xff0c;经常使用的数据被叫做是热数据157异构存储概述概述异构存储的shell操作 158异构存储案例实操参考文献 157异构存储概述
概述
异构存储也叫做冷热数据分离。其中经常使用的数据被叫做是热数据不经常使用的数据被叫做冷数据。
把冷热数据分别存储在不同的存储介质里从而达到对每个介质的利用率最高从而实现整体最佳性能或者说性价比更高比如说高性能硬盘放经常使用的数据。
简单的说就是这么一个问题经常使用的数据、不经常使用的数据是分别放在固态硬盘里更好还是放在机械硬盘里更好亦或者是放在内存里更好
一般来讲集群里会有这么几种存储类型
RAM_DISK内存镜像文件系统SSDSSD固态硬盘DISK普通磁盘。在HDFS中如果没有主动声明那么数据目录存储类型默认都是DISKARCHIVE没有特指哪种存储介质主要是指计算能力弱而存储密度比较高的存储介质用来解决数据量的容量扩增问题一般用于归档
关于存储策略 注意 默认存储策略是HOT策略 即所有副本都保存在磁盘里。
访问速度最快的是Lazy_persist策略一个副本保存在内存中其它副本保存在磁盘中。
异构存储的shell操作
1查看当前有哪些存储策略可以用
[atguiguhadoop102 hadoop-3.1.3]$ hdfs storagepolicies -listPolicies2为指定路径数据存储目录设置指定的存储策略
hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx3获取指定路径数据存储目录或文件的存储策略
hdfs storagepolicies -getStoragePolicy -path xxx4取消存储策略执行改命令之后该目录或者文件以其上级的目录为准如果是根目录那么就是HOT
hdfs storagepolicies -unsetStoragePolicy -path xxx5查看某个路径下的文件块的分布
bin/hdfs fsck path -files -blocks -locations6查看集群节点
hadoop dfsadmin -report可以看到跟纠删码一样异构存储针对的对象也是某一个路径。
158异构存储案例实操
这块在教程里比较长都是实验各种存储策略的代码所以只挑选个人感兴趣的地方做简单记录就不批量复制了仅做了解即可。
关于集群如何识别自己的存储介质的类型
是无法自动辨别的需要在节点的hdfs-site.xml中手动指定一个路径如果你指定了是SSD的话那集群就认为它就是SSD。
举例我要给一个节点配置上SSD目录和RAM_DISK目录就可以打开该节点上的hdfs-site.xml添加或修改如下信息
propertynamedfs.replication/namevalue2/value
/property
propertynamedfs.storage.policy.enabled/namevaluetrue/value
/property
propertynamedfs.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上面代码里第一个property是设置副本数量为2第二个property是设置异构存储策略为打开状态最后一个property则是将两个路径分别指定成SSD目录和RAM_DISK目录。
教程里一共列举了5个节点分别修改它们的hdfs-site.xml做不同的存储类型分配如下
节点存储类型分配hadoop102RAM_DISKSSDhadoop103SSDDISKhadoop104DISKRAM_DISKhadoop105ARCHIVEhadoop106ARCHIVE
我们在HDFS上创建一个新目录然后上传一个新文件到目录里
hadoop fs -mkdir /hdfsdata
hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt /hdfsdata新建的目录默认是HOT存储策略即所有副本都存储在DISK上我们可以验证一下即使用下面命令查看上传的文件块分布
[atguiguhadoop102 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]]其实执行命令之后打印出来的信息有很多我们只展示了一小部分从输出上可以看到一个副本存储在了104的DISK目录下另一个副本存储在了103的DISK目录下。
接下来我们尝试将这个目录的存储策略修改为WARM策略即一个副本在DISK上其他副本在ARCHIVE上。
1首先修改这个目录的存储策略修改为WARM策略
[atguiguhadoop102 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM2再次查看文件块分布我们可以看到文件块依然放在原处。
[atguiguhadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations3我们需要让他HDFS按照存储策略自行移动文件块
[atguiguhadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata4再次查看文件块分布
[atguiguhadoop102 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]]可以看到执行了hdfs mover /hdfsdata之后在103的DISK目录里的那个副本没有变化另一个副本移动到了105上的ARCHIVE目录里。
接下来教程里按照上面的流程依次测试了其他几种策略基本流程和命令都是一样的所以这里就不展示了。
唯一需要注意的是LAZY_PERSIST策略理论上执行了策略之后会达到一个副本在RAM_DISK即内存中另一个副本在DISK中的效果。但实际中并不是。有两个原因
一是在Hadoop的配置文件里有一个dfs.datanode.max.locked.memory它控制了你往内存里存储副本数据的大小这个参数默认是0即不能往内存里存数据。
二是如果你用的是linux虚拟机的话虚拟机也会限制你往内存中放数据的大小。
基于这两个原因实际中的LAZY_PERSIST策略并不会生效。从而导致所有副本都被放进了DISK目录里。
如果实在想往内存里放副本可以尝试将dfs.datanode.max.locked.memory修改为文件块大小默认128M的倍数但是生产中是不推荐的。毕竟放在内存里容易宕机丢失后果还是蛮严重的。
参考文献
【尚硅谷大数据Hadoop教程hadoop3.x搭建到集群调优百万播放】