154-Hadoop-调优-hdfs存储优化:
5台服务器准备,基于已有的克隆添加
1.克隆
2.修改ip和hostname
[root@hadoop105 roo]# vim /etc/hostname
[root@hadoop105 roo]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启reboot
3、删除hadoop下面的data和logs,删除所有服务器下data和logs,格式化datanode,配置白名单,启动
hdfs namenode -format
4.修改分发脚本以及jpsall脚本到105和106
5、修改白名单和黑名单,黑空,白全(且暂时删除多目录配置),分发修改内容
6、修改workers并分发,启动,准备工作完成
纠删码 (计算换空间)
纠删码原理
HDFS 默认情况下,一个文件有 3 个副本,这样提高了数据的可靠性,但也带来了 2 倍
的冗余开销。Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约 50%左右的存储空间。
1)纠删码操作相关的命令
2)查看当前支持的纠删码策略
3)纠删码策略解释
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。 (其他同理)
XOR-2-1-1024k:使用 XOR 编码(速度比 RS 编码快),每 2 个数据单元,生成 1 个校 验单元,共 3 个单元,也就是说:这 3 个单元中,只要有任意的 2 个单元存在(不管是数据 单元还是校验单元,只要总数= 2),就可以得到原始数据。每个单元的大小是 1024k=1024*1024=1048576。
纠删码案例
纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k 策略的支持,如要使用别的策略需要提前启用。
1)需求:将/input 目录设置为 RS-3-2-1024k 策略
2)具体步骤
(1)开启对 RS-3-2-1024k 策略的支持
[root@hadoop102 hadoop-3.1.4]# hdfs ec -enablePolicy -policy RS-3-2-1024k
(2)在 HDFS 创建目录,并设置 RS-3-2-1024k 策略
[root@hadoop102 hadoop-3.1.4]# hadoop fs -mkdir /input
[root@hadoop102 hadoop-3.1.4]# hdfs ec -setPolicy -path /input -policy RS-3-2-1024k
上传一个大于2m的文件
(3)上传文件,并查看文件编码后的存储情况
[root@hadoop102 hadoop-3.1.4]# hdfs dfs -put web.log /input
注:你所上传的文件需要大于 2M 才能看出效果。(低于 2M,只有一个数据单元和两
个校验单元)
(4)查看存储路径的数据单元和校验单元,并作破坏实验,删除元数据,页面下载测试
异构存储(冷热数据分离)(暂做了解)
异构存储主要解决,不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。
存储类型和存储策略
异构存储 Shell 操作
(1)查看当前有哪些存储策略可以用
[root@hadoop105 subdir0]# 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
异构存储测试
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.4/hdfsdata/ssd,[RAM_DISK]file:///opt/module/hadoop-3.1.4/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.4/hdfsdata/ssd,[DISK]file:///opt/module/hadoop-
3.1.4/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:///o
pt/module/hadoop-3.1.4/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.4/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.4/hdfsdata/archive</value>
</property>
HOT 存储策略案例
(1)最开始我们未设置存储策略的情况下,我们获取该目录的存储策略
[root@hadoop102 hadoop-3.1.4]# hdfs storagepolicies -getStoragePolicy -path /hdfsdata
(2)我们查看上传的文件块分布
[root@hadoop102 hadoop-3.1.4]# hdfs fsck /hdfsdata -files -blocks - locations
未设置存储策略,所有文件块都存储在 DISK 下。所以,默认存储策略为 HOT。
WARM 存储策略测试 (其他策略同理,只改warm名字即可)
(1)接下来我们为数据降温
[root@hadoop102 hadoop-3.1.4]# hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy
WARM
(2)再次查看文件块分布,我们可以看到文件块依然放在原处。
[root@hadoop102 hadoop-3.1.4]# hdfs fsck /hdfsdata -files -blocks -locations
(3)我们需要让他 HDFS 按照存储策略自行移动文件块
[root@hadoop102 hadoop-3.1.4]# hdfs mover /hdfsdata
(4)再次查看文件块分布,
[root@hadoop102 hadoop-3.1.4]# hdfs fsck /hdfsdata -files -blocks -locations
文件块一半在 DISK,一半在 ARCHIVE,符合我们设置的 WARM 策略
.1.4]# hdfs fsck /hdfsdata -files -blocks -locations
(3)我们需要让他 HDFS 按照存储策略自行移动文件块
[root@hadoop102 hadoop-3.1.4]# hdfs mover /hdfsdata
(4)再次查看文件块分布,
[root@hadoop102 hadoop-3.1.4]# hdfs fsck /hdfsdata -files -blocks -locations
文件块一半在 DISK,一半在 ARCHIVE,符合我们设置的 WARM 策略