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

2023-10-22 05:52

本文主要是介绍Hadoop3教程(三十一):(生产调优篇)异构存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • (157)异构存储概述
    • 概述
    • 异构存储的shell操作
  • (158)异构存储案例实操
  • 参考文献

(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,添加或修改如下信息:

<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,做不同的存储类型分配,如下:

节点存储类型分配
hadoop102RAM_DISK,SSD
hadoop103SSD,DISK
hadoop104DISK,RAM_DISK
hadoop105ARCHIVE
hadoop106ARCHIVE

我们在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搭建到集群调优,百万播放】

这篇关于Hadoop3教程(三十一):(生产调优篇)异构存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259473

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑