Hadoop3教程(三十一):(生产调优篇)异构存储

文章目录

(157)异构存储概述

概述

异构存储,也叫做冷热数据分离。其中,经常使用的数据被叫做是热数据,不经常使用的数据被叫做冷数据。

把冷热数据,分别存储在不同的存储介质里,从而达到对每个介质的利用率最高,从而实现整体最佳性能,或者说性价比更高(比如说高性能硬盘放经常使用的数据)。

简单的说,就是这么一个问题:经常使用的数据、不经常使用的数据,是分别放在固态硬盘里更好,还是放在机械硬盘里更好,亦或者是放在内存里更好?

一般来讲,集群里会有这么几种存储类型:

  • RAM_DISK:内存镜像文件系统;
  • SSD:SSD固态硬盘;
  • DISK:普通磁盘。在HDFS中,如果没有主动声明,那么数据目录存储类型默认都是DISK;
  • ARCHIVE:没有特指哪种存储介质,主要是指计算能力弱而存储密度比较高的存储介质,用来解决数据量的容量扩增问题,一般用于归档;

关于存储策略:

注意, 默认存储策略是HOT策略 ,即所有副本都保存在磁盘里。

访问速度最快的是Lazy_persist策略,一个副本保存在内存中,其它副本保存在磁盘中。

异构存储的shell操作

(1)查看当前有哪些存储策略可以用

复制代码
[atguigu@hadoop102 hadoop-3.1.3]$ 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)查看某个路径下的文件块的分布

复制代码
bin/hdfs fsck <path> -files -blocks -locations

(6)查看集群节点

复制代码
hadoop dfsadmin -report

可以看到,跟纠删码一样,异构存储针对的对象,也是某一个路径。

(158)异构存储案例实操

这块在教程里比较长,都是实验各种存储策略的代码,所以只挑选个人感兴趣的地方做简单记录,就不批量复制了,仅做了解即可。

关于集群如何识别自己的存储介质的类型?

是无法自动辨别的,需要在节点的hdfs-site.xml中手动指定,一个路径如果你指定了是SSD的话,那集群就认为它就是SSD。

举例,我要给一个节点,配置上SSD目录和RAM_DISK目录,就可以打开该节点上的hdfs-site.xml,添加或修改如下信息:

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>

上面代码里,第一个property是设置副本数量为2,第二个property是设置异构存储策略为打开状态,最后一个property则是将两个路径分别指定成SSD目录和RAM_DISK目录。

教程里一共列举了5个节点,分别修改它们的hdfs-site.xml,做不同的存储类型分配,如下:

节点 存储类型分配
hadoop102 RAM_DISK,SSD
hadoop103 SSD,DISK
hadoop104 DISK,RAM_DISK
hadoop105 ARCHIVE
hadoop106 ARCHIVE

我们在HDFS上创建一个新目录,然后上传一个新文件到目录里:

复制代码
hadoop fs -mkdir /hdfsdata
hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt /hdfsdata

新建的目录默认是HOT存储策略,即所有副本都存储在DISK上,我们可以验证一下,即使用下面命令,查看上传的文件块分布:

复制代码
[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]]

其实执行命令之后,打印出来的信息有很多,我们只展示了一小部分,从输出上可以看到,一个副本存储在了104的DISK目录下,另一个副本存储在了103的DISK目录下。

接下来,我们尝试将这个目录的存储策略修改为WARM策略,即一个副本在DISK上,其他副本在ARCHIVE上。

(1)首先,修改这个目录的存储策略修改为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按照存储策略自行移动文件块

复制代码
[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]]

可以看到,执行了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)的倍数,但是生产中是不推荐的。毕竟放在内存里容易宕机丢失,后果还是蛮严重的。

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】
相关推荐
哈哈很哈哈1 分钟前
Spark 运行流程核心组件(三)任务执行
大数据·分布式·spark
我星期八休息1 小时前
大模型 + 垂直场景:搜索/推荐/营销/客服领域开发新范式与技术实践
大数据·人工智能·python
最初的↘那颗心2 小时前
Flink Stream API - 源码开发需求描述
java·大数据·hadoop·flink·实时计算
白鲸开源2 小时前
收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态
大数据·数据库·开源
爱疯生活2 小时前
车e估牵头正式启动乘用车金融价值评估师编制
大数据·人工智能·金融
Lx3523 小时前
MapReduce作业调试技巧:从本地测试到集群运行
大数据·hadoop
计算机程序员小杨3 小时前
计算机专业的你懂的:大数据毕设就选贵州茅台股票分析系统准没错|计算机毕业设计|数据可视化|数据分析
java·大数据
BYSJMG3 小时前
计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】
大数据·hadoop·python·信息可视化·spark·django·课程设计
励志成为糕手4 小时前
大数据MapReduce架构:分布式计算的经典范式
大数据·hadoop·mapreduce·分布式计算·批处理
计算机毕设残哥4 小时前
大数据毕业设计选题推荐:护肤品店铺运营数据可视化分析系统详解
大数据·信息可视化·课程设计