大数据之Hadoop的HDFS存储优化—异构存储(冷热数据分离)
异构存储主要解决,不同的数据,储存在不同类型的硬盘中,达到最佳性能的问题
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.memory和dfs.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存储优化—异构存储(冷热数据分离)的更多相关文章
- Hadoop基础-HDFS分布式文件系统的存储
Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...
- 大数据笔记04:大数据之Hadoop的HDFS(基本概念)
1.HDFS是什么? Hadoop分布式文件系统(HDFS),被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点. 2.HDFS ...
- 大数据:Hadoop(HDFS 读写数据流程及优缺点)
一.HDFS 写数据流程 写的过程: CLIENT(客户端):用来发起读写请求,并拆分文件成多个 Block: NAMENODE:全局的协调和把控所有的请求,提供 Block 存放在 DataNode ...
- 大数据笔记05:大数据之Hadoop的HDFS(数据管理策略)
HDFS中数据管理与容错 1.数据块的放置 每个数据块3个副本,就像上面的数据库A一样,这是因为数据在传输过程中任何一个节点都有可能出现故障(没有办法,廉价机器就是这样的) ...
- 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)
一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...
- 大数据笔记07:大数据之Hadoop的HDFS(特点)
1. HDFS的特点: (1)数据冗余,硬件容错 (2)流式的数据访问(写一次读多次,不能直接修改已写入的数据,只能删除之后再去写入) (3)存储大文件 2. HDFS适用性和局限性 适用性:(1)适 ...
- 大数据笔记06:大数据之Hadoop的HDFS(文件的读写操作)
1. 首先我们看一看文件读取: (1)客户端(java程序.命令行等等)向NameNode发送文件读取请求,请求中包含文件名和文件路径,让NameNode查询元数据. (2)接着,NameNode返回 ...
- 大数据笔记09:大数据之Hadoop的HDFS使用
1. HDFS使用: HDFS内部中提供了Shell接口,所以我们可以以命令行的形式操作HDFS
- 软件架构设计学习总结(4):大数据架构hadoop
摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...
- [置顶]
大数据架构hadoop
摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...
随机推荐
- SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析
SQL RIGHT JOIN关键字 SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录.如果没有匹配,则左侧的结果为0条记录. RIGHT JO ...
- Cloud-computing 实验镜像 chinaskills_cloud_iaas.iso chinaskills_cloud_paas.iso
Cloud-computing 实验镜像 最近因新项目再次进行云计算环境的搭建, 找这两个镜像( 找chinaskills_cloud_paas.iso chinaskills_cloud_iaas. ...
- three.js实现数字孪生3D仓库一期(开源)
大家好,本文使用three.js实现了3D仓库一期项目,给出了代码,分析了关键点,感谢大家~ 关键词:数字孪生.three.js.Web3D.WebGL.智慧仓库.开源 代码:Github 我正在承接 ...
- 这10款VS Code神仙插件,嵌入式程序员必备
大家好,我是知微! 嵌入式软件开发工程师平时可能更多的是使用Source Insight.Keil.IAR来阅读代码,写代码. VSCode大家都听说过,功能十分强大,而且免费! 或许是因为这款软件上 ...
- 力扣306(java)-累加数(中等)
题目: 累加数 是一个字符串,组成它的数字可以形成累加序列. 一个有效的 累加序列 必须 至少 包含 3 个数.除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和. 给你一个只包含数 ...
- EventBridge 特性介绍|以 IaC 的方式使用 EventBridge
简介:本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性. 作者:王川(弗丁) 引言 Eve ...
- 6 张图带你彻底搞懂分布式事务 XA 模式
简介: XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口.目前主流的数据库,比如 oracle.DB2 都是支持 XA 协议的 ...
- 配置审计(Config)变配报警设置
简介: 本文作者[紫极zj],本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍. 前言 配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局 ...
- [PHP] 小数转科学计数法, 小数保留 n 位
使用sprintf / printf 的 %e 或%E 格式说明符将其转换为科学计数法. 使用精度控制符指定保留多少位. 例如:sprintf('%.4e', 0.00000123); Link:ht ...
- dotnet 推荐一个使用 Json 直接路由通讯的 IPC 库
本文将和大家推荐一个我所在团队开源的本机多进程通讯 IPC 库,此 IPC 支持使用 JSON 格式进行直接路由通讯,具有使用方便,稳定性高,性能好的优点 这是我所在的团队在 GitHub 上使用最友 ...