异构存储主要解决,不同的数据,储存在不同类型的硬盘中,达到最佳性能的问题

1)存储类型

RAM_DISK:内存镜像文件系统

SSD:SSD固态硬盘

DISK:普通磁盘,在HDFS中,如果没有主动声明数据目录储存类型默认都是DISK

ARCHIVE:没有特指哪种存储介质,主要指的是计算能力比较弱而储存密度比较高的介质,用来解决数据容量扩增的问题,一般用于归档

原文:sw-code

2)储存策略

策略ID 策略名称 副本分布
15 Lazy_Persist RAM_DISK:1, DISK: n-1
12 All_SSD SSD :n
10 One_SSD SSD:1, DISK: n-1
7 Host(default) DISK: n
6 Warm DISK:1, ARCHIVE: n-1
2 Cold ARCHIVE: n

Shell操作

(1)查看当前有哪些存储策略可用。原文:sw-code

[hadoop@hadoop102 ~]$ 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)查看文件块的分布

hdfs fsck xxx -files -blocks -locations

(6)查看集群节点

hadoop dfsadmin -report

测试环境准备

1)环境描述

服务器规模:5台

集群配置:副本数为2,创建好带有存储类型的目录(提前创建)

集群规划

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

2)配置文件信息

(1)为hadoop102节点的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>

(3)为hadoop103节点的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,[DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/disk</value>
</property>

(4)为hadoop104节点的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>[RAM_DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/ram_disk,[DISK]file:///opt/module/hadoop-3.1.3/hdfsdata/disk</value>
</property>

(5)为hadoop105节点的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>[ARCHIVE]file:///opt/module/hadoop-3.1.3/hdfsdata/archive</value>
</property>

(6)为hadoop106节点的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>[ARCHIVE]file:///opt/module/hadoop-3.1.3/hdfsdata/archive</value>
</property>

3)数据准备

(1)启动集群

[hadoop@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
[hadoop@hadoop102 hadoop-3.1.3]$ myhadoop.sh start

(2)在HDFS上创建文件目录

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /hdfsdata

(3)上传文件

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -put NOTICE.txt /hdfsdata

可在Browsing HDFS查看文件信息

HOT存储策略案例

(1)最开始我们未设置存储策略的情况下,我们获取该目录的存储策略

[hadoop@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -getStoragePolicy -path /hdfsdata
The storage policy of /hdfsdata is unspecified

(2)查看上传的文件块分布

[hadoop@hadoop102 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]

未设置存储策略,所有文件都存储在DISK下。所以,默认存储策略为HOT。

WARM存储策略测试

(1)接下来为数据降温

[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM

(2)再次查看文件块分布,我们可以看到文件块依然放在原处

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

(3)我们需要让他HDFS按照存储策略自行移动文件夹

[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata

(4)再次查看文件块分布

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.106:9866,DS-a417ad5b-f80a-4f8c-a500-d6d5a6c52d6d,ARCHIVE], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]

文件一半在DISK,一半在ARCHIVE,符合我们设置的WARM策略

COLD策略测试

(1)继续降温为clod

[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy COLD

注意:当我们将目录设置为COLD并且我们未配置ARCHIVE存储目录的情况下,不可以直接向该目录直接上传文件,会报出异常。

(2)手动转移

[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata

(3)检查文件快分布

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.106:9866,DS-a417ad5b-f80a-4f8c-a500-d6d5a6c52d6d,ARCHIVE], DatanodeInfoWithStorage[192.168.10.105:9866,DS-1c17f839-d8f5-4ca2-aa4c-eaebbdd7c638,ARCHIVE]]

ONE_SSD策略测试

(1)更改策略为ONE_SSD

[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy ONE_SSD

(2)手动转移

[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata

(3)检查文件快分布

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-0a858711-8264-4152-887a-9408e2f83c3a,SSD]]

ALL_SSD策略测试

(1)更改策略为ALL_SSD

[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy ALL_SSD

(2)手动转移

[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata

(3)检查文件快分布

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.102:9866,DS-b4a0eba9-0335-409a-aab5-2ebfe724fe0a,SSD], DatanodeInfoWithStorage[192.168.10.103:9866,DS-0a858711-8264-4152-887a-9408e2f83c3a,SSD]]

LAZY_PERSIST策略测试

(1)更改策略为LAZY_PERSIST

[hadoop@hadoop102 ~]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy LAZY_PERSIST

(2)手动转移

[hadoop@hadoop102 ~]$ hdfs mover /hdfsdata

(3)检查文件快分布

[hdoop@hadoop102 ~]$ hdfs fsck /hdfsdata -files -blocks -locations

[DatanodeInfoWithStorage[192.168.10.104:9866,DS-e3ce2615-178f-4489-b58e-27a577f4b72f,DISK], DatanodeInfoWithStorage[192.168.10.103:9866,DS-e8c8d524-7005-4dc4-99ed-30820ff67ef5,DISK]]

文件块都存储在了DISK中,与预期的不一样,这是因为,还需要配置dfs.datanode.max.locked.memorydfs.block.size参数。

当存储策略为LAZY_PERSIST时,文件块副本都存储在DISK上的原因有如下两点:

(1)当客户端所在节点没有RAM_DISK时,则会写入客户端所在的DataNode节点的DISK磁盘。其余副本会写入其他节点的DISK磁盘。

(2)当客户端所在的DataNode有RAM_DISK时,但dfs.datanode.max.locked.memory参数未设置或设置过小(小于dfs.block.size参数值)时,则会写入客户端所在的DataNode节点的DISK磁盘,其余会写入其他节点的DISK磁盘。

但是由于虚拟机的max locked memory为64KB,所以如果参数配置过大,会报错

我们可以通过该命令查看此参数的内存

[hadoop@hadoop102 ~]$ ulimit -a

max locked memory       (kbytes, -l) 64
max memory size (kbytes, -m) unlimited

大数据之Hadoop的HDFS存储优化—异构存储(冷热数据分离)的更多相关文章

  1. Hadoop基础-HDFS分布式文件系统的存储

    Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...

  2. 大数据笔记04:大数据之Hadoop的HDFS(基本概念)

    1.HDFS是什么? Hadoop分布式文件系统(HDFS),被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点. 2.HDFS ...

  3. 大数据:Hadoop(HDFS 读写数据流程及优缺点)

    一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...

  4. 大数据笔记05:大数据之Hadoop的HDFS(数据管理策略)

            HDFS中数据管理与容错 1.数据块的放置       每个数据块3个副本,就像上面的数据库A一样,这是因为数据在传输过程中任何一个节点都有可能出现故障(没有办法,廉价机器就是这样的) ...

  5. 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)

    一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...

  6. 大数据笔记07:大数据之Hadoop的HDFS(特点)

    1. HDFS的特点: (1)数据冗余,硬件容错 (2)流式的数据访问(写一次读多次,不能直接修改已写入的数据,只能删除之后再去写入) (3)存储大文件 2. HDFS适用性和局限性 适用性:(1)适 ...

  7. 大数据笔记06:大数据之Hadoop的HDFS(文件的读写操作)

    1. 首先我们看一看文件读取: (1)客户端(java程序.命令行等等)向NameNode发送文件读取请求,请求中包含文件名和文件路径,让NameNode查询元数据. (2)接着,NameNode返回 ...

  8. 大数据笔记09:大数据之Hadoop的HDFS使用

    1. HDFS使用: HDFS内部中提供了Shell接口,所以我们可以以命令行的形式操作HDFS

  9. 软件架构设计学习总结(4):大数据架构hadoop

    摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...

  10. [置顶] 大数据架构hadoop

    摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...

随机推荐

  1. C# 运算符详解:包含算术、赋值、比较、逻辑运算符及 Math 类应用

    运算符用于对变量和值执行操作.在C#中,有多种运算符可用,包括算术运算符.关系运算符.逻辑运算符等. 算术运算符 算术运算符用于执行常见的数学运算: int x = 100 + 50; // 加法,结 ...

  2. 【Insights直播】3D建模服务,快速构建高质量3D模型

    2021年7月15日,HMS Core 6.0面向全球开发者正式上线.华为在HMS Core 6.0中,为开发者开放了一个全新的服务--3D建模服务(3D Modeling Kit),为应用开发者提供 ...

  3. HMS Core 3D Engine助您实现逼真3D渲染效果,构筑大型3D数字世界

    HMS Core 3D Engine是一款高性能.高画质.高可靠的实时3D引擎,旨在帮助开发者制作高品质的3D应用.3D Engine将为您提供可编程渲染管线,多维粒子系统,3D角色与动画,超大地形地 ...

  4. 知识图谱在RAG中的应用探讨

    在这篇文章中,我们来详细探讨知识图谱(KG)在RAG流程中的具体应用场景. 缘起 关于知识图谱在现在的RAG中能发挥出什么样的作用,之前看了360 刘焕勇的一个分享,简单的提了使用知识图谱增强大模型的 ...

  5. Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 准备工作:现有一个User类.Student 类和Ticket类,加入相关依赖 @Data public class User { / ...

  6. MVC如何创建区域

    前言 MVC 划分区域可以为项目成立不同的小模块,方便团队之间开发,与增强项目结构的清晰度. 正文 建立区域: 在areas里面建立区域.,然后填写命名. 然后区域注册即可: 但是这样做依然无法解决项 ...

  7. idea引用lombok一直不成功

    idea引用lombok一直不成功 比如想使用lombok的@data注解一直报错,尽管已经声明了import lombok.Data,且在pom里面也增加了lombok依赖,但是就是不成功的时候 建 ...

  8. 国庆集训 Day1 复盘笔记

    9.25 \({\color{Green} \mathrm{A\ -\ Powered\ Addition}}\) 只要把序列扫一遍,然后求出目前最大值与当前值的差的最大值 \(x\),再 \(log ...

  9. [FAQ] Argument 3 passed to Lcobucci\JWT\Signer\Hmac::doVerify() must be an instance of Lcobucci\JWT\Signer\Key, null given

    出现这个错误,说明没有找到 key,在使用 laravel-jwt 之前需要生成加密 key,使用: $ php artisan jwt:secret Link:https://www.cnblogs ...

  10. kubeadm安装多master节点的k8s集群(1)

    一.环境准备 k8s集群角色 IP 主机名 安装的相关组件 控制节点 192.168.1.10 master apiserver.controller-manager.scheduler.kubele ...