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

news2024/11/15 10:16:56

文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

寻找Windows API 原始字节(x64dbg)

首先我们将我们的木马移入x64dbg 第一种方法 通过命令寻找 disasm CreateRemoteThreadEx第二种方法 将调试器附加到kernelbase.dll后转到符号选项卡&#xff0c;最后&#xff0c;在搜索栏中&#xff0c;我们可以搜索CreateRemoteThreadEx函数并双击它以获取下列&#xff1a…

深度学习---神经网络基础

深度学习概述 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的一个子集&#xff0c;深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下图所示&#xff1a; 传统机器学习算术依赖人工设计特征&#xff0c;并进行特征提取&#xff0c;而深度学…

java新特性流 stream01

案例描述 今天跟着黑马程序员的视频&#xff0c;完成“瑞吉外卖”项目的菜品信息管理模块的时候&#xff0c;遇到了一个比较陌生的写法 用到了Java8的新特性 stream().map((item) -> {}).collect() List<DishDto> collect records.stream().map((item) -> {DishDt…

Elasticsearch 8.9 Master节点处理请求源码

大家看可以看ElasticSearch源码&#xff1a;Rest请求与Master节点处理流程&#xff08;1&#xff09; 这个图非常好&#xff0c;下午的讲解代码在各个类和方法之间流转&#xff0c;都体现这个图上 一、Master节点处理请求的逻辑1、节点(数据节点)要和主节点进行通讯&#xff0…

H5随机短视频滑动版带打赏源码,可封装APP软件或嵌入式观看

H5随机短视频滑动版带打赏源码&#xff0c;可封装APP软件或嵌入式观看&#xff0c;网站引流必备源码&#xff01; 数据来源抖音和快手官方短视频链接&#xff0c;无任何违规内容&#xff01;可自行添加广告等等&#xff01; 手机端完美支持滑动屏幕观看&#xff08;向上或向右…

STM32不使用 cubeMX实现外部中断

这篇文章将介绍如何不使用 cubeMX完成外部中断的配置和实现。 文章目录 前言一、文件加入工程二、代码解析exti.cexti.hmain.c 注意&#xff1a;总结 前言 实验开发板&#xff1a;STM32F103C8T6。所需软件&#xff1a;keil5 &#xff0c; cubeMX 。实验目的&#xff1a;如何不…

【【萌新的FPGA学习之分频器的介绍】】

萌新的FPGA学习之分频器的介绍 分频器的介绍 分频就是生成一个新时钟&#xff0c;该新时钟的频率是原有时钟频率的整数分之一倍&#xff0c;新周期是原有周期的整数倍。再简单来说&#xff0c;让你手撕一个四分频电路&#xff0c;就是写代码生成一个周期是原来四倍的时钟&…

PMP的智慧(2) - 系统性思考及复杂性

PMP的智慧(2) - 系统性思考及复杂性 在2021年推出的第七版《管理专业知识体系指南》中&#xff0c;PMI在传统的过程和ITTO的基础上&#xff0c;重新增加了12大项目管理原则。 管家式管理 stewardship团队 team干系人 stakeholders价值 value系统思考 system thinking领导力 l…

Excel函数中单元格的引用方式

如下图在D列第一行输入sum(A1:C1)&#xff1b; 回车之后结果如下&#xff1b;先要输入等号&#xff0c;然后输入sum&#xff0c;以及左括号&#xff0c;这是调用了sum求和函数&#xff1b; A1表示A列第一行&#xff0c;C1表示C列第一行&#xff1b; A1:C1&#xff0c;中间是冒号…

实践DDD模拟电商系统总结

目录 一、事件风暴 二、系统用例 三、领域上下文 四、架构设计 &#xff08;一&#xff09;六边形架构 &#xff08;二&#xff09;系统分层 五、系统实现 &#xff08;一&#xff09;项目结构 &#xff08;二&#xff09;提交订单功能实现 &#xff08;三&#xff0…

【Objective-C】浅析Block及其捕获机制

目录 Block的基本使用Block的声明Block的实现Block的调用 Block作为形参使用Block作为属性使用给Block起别名Block的copy Block的捕获机制auto类型的局部变量__block浅析static类型的局部变量全局变量 其他问题 Block的基本使用 什么是Block&#xff1f; Block &#xff08;块…

【深度学习实验】循环神经网络(五):基于GRU的语言模型训练(包括自定义门控循环单元GRU)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容&#xff08;一&#xff09;自定义门控循环单元&#xff08;GRU&#xff0c;Gated Recurrent Unit&#xff09;1. get_params2. init_gru_state3. gru &#xff08;二&#xff09;创建模型0. 超参数…

[AUTOSAR][诊断管理][$11] 复位服务

文章目录 一、简介(1) 应用场景&#xff08;2&#xff09; 请求格式&#xff08;3&#xff09; 重启类型 二、示例代码(1) 11_ecu_reset.c 一、简介 ECU复位服务就是可以此诊断指令来命令ECU执行自复位&#xff0c;复位有多种形式&#xff0c;依据子功能参数来区分&#xff08…

【Javascript】构造函数之new的作用

目录 new的作用 把对象返回了回来 无new 有new 把构造函数的this指向了要返回的对象 无new​编辑 有new new的执行流程 new的作用 创建了新空对象将构造函数的作用域赋值给新对象(this指向新对象)执行构造函数代码 &#xff08;为这个新对象添加属性&#xff09;返回新对…

网络协议--Ping程序

7.1 引言 “ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写&#xff0c;目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机&#xff0c;并等待返回ICMP回显应答&#xff08;图6-3列出了所有的ICMP报文类型&#xff09;。 一般来说&#x…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

​CUDA学习笔记(三)CUDA简介

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 前言 线程的组织形式对程序的性能影响是至关重要的&#xff0c;本篇博文主要以下面一种情况来介绍线程组织形式&#xff1a; 2D grid 2D block 线程索引 矩阵在memory中是row-major线性…

Cannot load from short array because “sun.awt.FontConfiguration.head“ is null

错误描述 在使用Easyexcel时发生了报错&#xff0c;请求返回空白 但是只在Linux上出现了该报错&#xff0c;在本地windows环境没有出现 JDK都使用的是17版本 错误原因 由于在linux上缺失Easyexcel使用的字体导致 解决办法 下载一个jdk1.8 在其jre/lib目录里复制fontconfi…

聊聊昨日ChatGPT全球宕机事件,带给我们的警示

作者 | 卖萌酱&#xff0c;王二狗 昨日&#xff0c;ChatGPT崩了&#xff01; 大模型研究测试传送门 GPT-4传送门&#xff08;免墙&#xff0c;可直接测试&#xff0c;遇浏览器警告点高级/继续访问即可&#xff09;&#xff1a;https://gpt4test.com 许多人发现无论是 ChatGPT…

腾讯云创建了jenkins容器,但无法访问

1、首先&#xff0c;查看本机能不能ping通你的腾讯云服务器 如果ping的通那就下一步 2、查看腾讯云服务器的防火墙关了没&#xff0c;没关关掉、 firewall-cmd --state not running 3、那就在云服务器的控制台开放端口