1、纠删码原理

HDFS默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。Hadoop3.x引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。

1.2、纠删码操作相关的命令

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs ec
Usage: bin/hdfs ec [COMMAND][-listPolicies][-addPolicies -policyFile <file>][-getPolicy -path <path>][-removePolicy -policy <policy>][-setPolicy -path <path> [-policy <policy>] [-replicate]][-unsetPolicy -path <path>][-listCodecs][-enablePolicy -policy <policy>][-disablePolicy -policy <policy>][-help <command-name>].

1.3、查看当前支持的纠删码策略

[atguigu@hadoop102 hadoop-3.1.3] hdfs ec -listPoliciesErasure Coding Policies:
ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5], State=DISABLEDErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2], State=DISABLEDErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1], State=ENABLEDErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k, Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=3], State=DISABLEDErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor, numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4], State=DISABLED

1.4、纠删码策略解释:

RS-3-2-1024k:使用RS编码,每3个数据单元,生成2个校验单元,共5个单元,也就是说:这5个单元中,只要有任意的3个单元存在(不管是数据单元还是校验单元,只要总数=3),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-10-4-1024k:使用RS编码,每10个数据单元(cell),生成4个校验单元,共14个单元,也就是说:这14个单元中,只要有任意的10个单元存在(不管是数据单元还是校验单元,只要总数=10),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-6-3-1024k:使用RS编码,每6个数据单元,生成3个校验单元,共9个单元,也就是说:这9个单元中,只要有任意的6个单元存在(不管是数据单元还是校验单元,只要总数=6),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-LEGACY-6-3-1024k:策略和上面的RS-6-3-1024k一样,只是编码的算法用的是rs-legacy。

 XOR-2-1-1024k:使用XOR编码(速度比RS编码快),每2个数据单元,生成1个校验单元,共3个单元,也就是说:这3个单元中,只要有任意的2个单元存在(不管是数据单元还是校验单元,只要总数= 2),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

2、纠删码案例实操

纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。

默认只开启对RS-6-3-1024k策略的支持,如要使用别的策略需要提前启用。

1)需求:将/input目录设置为RS-3-2-1024k策略

2)具体步骤

        (1)开启对RS-3-2-1024k策略的支持

[atguigu@hadoop102 hadoop-3.1.3]$  hdfs ec -enablePolicy  -policy RS-3-2-1024k
Erasure coding policy RS-3-2-1024k is enabled

(2)在HDFS创建目录,并设置RS-3-2-1024k策略

[atguigu@hadoop102  hadoop-3.1.3]$  hdfs dfs -mkdir /input[atguigu@hadoop202 hadoop-3.1.3]$ hdfs ec -setPolicy -path /input -policy RS-3-2-1024k

(3)上传文件,并查看文件编码后的存储情况

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs dfs -put web.log /input

注:你所上传的文件需要大于2M才能看出效果。(低于2M,只有一个数据单元和两个校验单元)

(4)查看存储路径的数据单元和校验单元,并作破坏实验

3、异构存储(冷热数据分离)

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

3.1、存储类型和存储策略

3.2、异构存储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 xxx -files -blocks -locations

(6)查看集群节点

hadoop dfsadmin -report

3.3、测试环境准备

1)测试环境描述

服务器规模:5台

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

集群规划:

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>

(2)为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>

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

(4)为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>

(5)为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)启动集群

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

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

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

(3)并将文件资料上传

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

3.4、HOT存储策略案例

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

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -getStoragePolicy -path /hdfsdata

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

[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]]

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

3.5、WARM存储策略测试

(1)接下来我们为数据降温

[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]]

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

3.6、COLD策略测试

(1)我们继续将数据降温为cold

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

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

(2)手动转移

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata

(3)检查文件块的分布

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs fsck /hdfsdata -files -blocks -locations[DatanodeInfoWithStorage[192.168.10.105:9866,DS-d46d08e1-80c6-4fca-b0a2-4a3dd7ec7459,ARCHIVE], DatanodeInfoWithStorage[192.168.10.106:9866,DS-827b3f8b-84d7-47c6-8a14-0166096f919d,ARCHIVE]]

所有文件块都在ARCHIVE,符合COLD存储策略。

3.6、ONE_SSD策略测试

(1)接下来我们将存储策略从默认的HOT更改为One_SSD

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy One_SSD

(2)手动转移文件块

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata

(3)转移完成后,我们查看文件块分布,

[atguigu@hadoop102 hadoop-3.1.3]$ bin/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-2481a204-59dd-46c0-9f87-ec4647ad429a,SSD]]

文件块分布为一半在SSD,一半在DISK,符合One_SSD存储策略。

3.7、ALL_SSD策略测试

(1)接下来,我们再将存储策略更改为All_SSD

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy All_SSD

(2)手动转移文件块

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata

(3)查看文件块分布,我们可以看到,

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hdfs fsck /hdfsdata -files -blocks -locations[DatanodeInfoWithStorage[192.168.10.102:9866,DS-c997cfb4-16dc-4e69-a0c4-9411a1b0c1eb,SSD], DatanodeInfoWithStorage[192.168.10.103:9866,DS-2481a204-59dd-46c0-9f87-ec4647ad429a,SSD]]

所有的文件块都存储在SSD,符合All_SSD存储策略。

3.8、LAZY_PERSIST策略测试

(1)继续改变策略,将存储策略改为lazy_persist

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy lazy_persist

(2)手动转移文件块

[atguigu@hadoop102 hadoop-3.1.3]$ hdfs mover /hdfsdata

(3)查看文件块分布

[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]]

这里我们发现所有的文件块都是存储在DISK,按照理论一个副本存储在RAM_DISK,其他副本存储在DISK中,这是因为,我们还需要配置“dfs.datanode.max.locked.memory”,“dfs.block.size”参数。

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

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

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

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

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.lang.RuntimeException: Cannot start datanode because the configured max locked memory size (dfs.datanode.max.locked.memory) of 209715200 bytes is more than the datanode's available RLIMIT_MEMLOCK ulimit of 65536 bytes.

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

[atguigu@hadoop102 hadoop-3.1.3]$ ulimit -amax locked memory       (kbytes, -l) 64

HDFS之存储优化纠删码原理、纠删码案例实操 、异构存储(冷热数据分离)相关推荐

  1. Shopee ClickHouse 冷热数据分离存储架构与实践

    本文首发于微信公众号"Shopee技术团队". 摘要 Shopee ClickHouse 是一款基于开源数据库 ClickHouse 做二次开发.架构演进的高可用分布式分析型数据库 ...

  2. MySQL基于冷热数据分离优化的LRU刷盘策略

    MySQL基于冷热数据分离优化的LRU刷盘策略 前言 对于计算机刷盘这个概念相信大家都非常熟悉了,刷盘策略,其实在操作系统层面来说的话就是页面置换算法. 不知道各位朋友们还记得页面置换算法有哪些吗? ...

  3. (六)大白话MySQL是如何基于冷热数据分离的方案,来优化LRU算法?

    (一)大白话MySQL执行SQL的流程 (二)大白话InnoDB存储引擎的架构设计 (三)大白话MySQL Binlog是什么? (四)MySQL的Buffer Pool内存结构 (五)MySQL的B ...

  4. MySQL - 索引优化案例实操

    文章目录 生猛干货 DB Version Table Case 1 : 联合索引第一个字段用范围不一定会走索引 优化一 强制走索引 force index(idx_name_age_position) ...

  5. 腾讯乘车码公众号裂变涨粉实操案例分析!

    前一阵子,小编注意到腾讯乘车码做了一场公众号裂变活动,当然,腾讯作为BAT三大巨头之一,随便一个小动作就非常引人关注,这次乘车码做的裂变活动已经在运营圈里被疯转. 乘车码(腾讯)是微信用户的一个应用场 ...

  6. OpenFlow协议原理及基本配置-网络测试仪实操

    一.OpenFlow协议原理 1.OpenFlow技术背景 ●转发和控制分离是SDN网络的本质特点之一.在SDN网络架构中,控制平面与转发平面分离,网络的管理和状态在逻辑上集中到一起,底层的网络基础从 ...

  7. (限时删)199买的 Excel表格 实操大全,0.01送粉丝!

    过往跟大家分享过不少数据分析的干货,工具使用也详细梳理过,负责任地说,门槛低又能快速出效果的工具非Excel莫属. 今天特别给大家搞一波超值福利,厚着脸皮求来的,仅开放1天特惠权限. 1份Excel实 ...

  8. 几句话聊聊HDFS的异构存储策略

    在设计海量数据的存储架构时,我们往往会面临成本和速率方面的抉择:普通HDD容量大且廉价,但读写速率较慢:SSD的读写比HDD要快数倍到十数倍,但是成本高,单位成本的容量小.所以,当数据量大到一定程度之 ...

  9. 【mysql进阶】MTS主从同步原理及实操指南(七)

    0.引言 随着业务场景的深入和请求量的剧增,单库实现读写越来越趋近瓶颈,于是我们想到搭建主从库,主库负责写,从库负责读,从而实现读写分离,提高查询效率. 但是主从库之间的数据如何同步呢?很明显我们写入 ...

  10. 极简实现 TiDB 冷热数据分层存储 | He3 团队访谈

    参加 Hackathon 可以接触到内核.工具.生态各个领域中志同道合的小伙伴,通过他们的项目学习到非常好的创意.大家的想法都很奇妙,充满了创新力,在平时的研发过程中,很少能接触到这些,Hackath ...

最新文章

  1. 如何按值对字典排序?
  2. html页面vertical,vertical.html
  3. 中国靶材行业需求前景分析及发展形势研究报告2021版
  4. 计算字符在字符串是出现的次数
  5. 8.22 13.1-13.3
  6. c# groupbox大小_【已解决】C#中使得控件随着WinForm窗体的大小改变而自动变化
  7. python语法31[with来自动释放对象]
  8. 鸿蒙(HarmonyOS)刷机指南
  9. 因市场垄断 高通被欧盟开出巨额罚单 高通:我不服
  10. 【Spring】Bean instantiation via constructor failed nested exception Constructor threw exception
  11. SpringCloud工作笔记057---常用免费数据接口
  12. Linux Linux程序练习九
  13. 点击树形相应车型,置顶
  14. shell 脚本返回上级目录_cmd返回上级目录
  15. JAVA互联网架构师VIP项目实战(完整)
  16. python多元逻辑回归_Python机器学习的练习四:多元逻辑回归
  17. 自删除技术小记:Gary Nebbett
  18. 《小猫猫大课堂》1——小喵是如何开启敲代码之路的?
  19. 商品id- item_id /条形码/skuid
  20. java和c#通过esb服务互调用组件

热门文章

  1. word文档打印表格时预览时看的到表格打印出来的表格没有上下两根横线?
  2. SEM常用的数据统计工具之百度统计
  3. Selenium 官网打不开怎么办?
  4. jmeter进行http压力测试
  5. 基于图像的三维模型重建 ——双视角SFM
  6. excel相同字段多行合并_EXCEL里如何快速把多行数据合并为一行并以逗号隔开?...
  7. 密码学的安全性浅析2
  8. redis集群 原理
  9. Windows 安装maven
  10. Python 随机抽奖