Hadoop 中的大数据技术:调优篇(2)

HDFS---存储优化

纠删码
纠删码原理
  • 概述

    HDFS默认情况下,一个文件有3个副本,这虽然提高了数据的可靠性,但也带来了2倍的冗余开销。Hadoop 3.x引入了纠删码机制,通过计算方法,可以节省大约50%的存储空间。

  • 纠删码操作命令

    复制代码
    [lzl@hadoop12 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>].
  • 查看支持的纠删码策略

    复制代码
    [lzl@hadoop12 hadoop-3.1.3] hdfs ec -listPolicies
  • 策略解释

    RS-3-2-1024k:使用RS编码,每3个数据单元,生成2个校验单元,共5个单元。只要存在任意3个单元(无论是数据单元还是校验单元),就可以恢复原始数据。每个单元大小为1024k。

    RS-10-4-1024k:使用RS编码,每10个数据单元,生成4个校验单元,共14个单元。只要存在任意10个单元,就可以恢复原始数据。每个单元大小为1024k。

    RS-6-3-1024k:使用RS编码,每6个数据单元,生成3个校验单元,共9个单元。只要存在任意6个单元,就可以恢复原始数据。每个单元大小为1024k。

    RS-LEGACY-6-3-1024k:策略与RS-6-3-1024k相同,但使用的编码算法是rs-legacy。

    XOR-2-1-1024k:使用XOR编码(速度比RS编码快),每2个数据单元,生成1个校验单元,共3个单元。只要存在任意2个单元,就可以恢复原始数据。每个单元大小为1024k。

纠删码案例实操
  • 策略应用

    • 纠删码策略是针对具体路径设置的。所有上传到该路径下的文件都将遵循此策略。
  • 具体步骤

    启用RS-3-2-1024k策略支持

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs ec -enablePolicy -policy RS-3-2-1024k
    Erasure coding policy RS-3-2-1024k is enabled

    创建HDFS目录并设置策略

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs dfs -mkdir /input
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs ec -setPolicy -path /input -policy RS-3-2-1024k

    上传文件并查看存储情况

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs dfs -put web.log /input

    注意:上传的文件大小需要大于2M才能看到纠删码的效果(低于2M时,只会有一个数据单元和两个校验单元)。

    1. 查看存储路径的数据单元和校验单元
    2. 破坏实验
异构存储(冷热数据分离)
异构存储Shell操作

查看可用存储策略

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -listPolicies

为指定路径设置存储策略

复制代码
hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx

获取指定路径的存储策略

复制代码
hdfs storagepolicies -getStoragePolicy -path xxx

取消存储策略

复制代码
hdfs storagepolicies -unsetStoragePolicy -path xxx

查看文件块的分布

复制代码
bin/hdfs fsck xxx -files -blocks -locations

查看集群节点

复制代码
hadoop dfsadmin -report
测试环境准备
  • 环境描述

    服务器规模:5台

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

    集群规划:

    节点 存储类型分配
    hadoop12 RAM_DISK,SSD
    hadoop13 SSD,DISK
    hadoop14 DISK,RAM_DISK
    hadoop15 ARCHIVE
    hadoop16 ARCHIVE
  • 配置文件信息

    hadoop12节点

    复制代码
    <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>

    hadoop13节点

    复制代码
    <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>

    hadoop14节点

    复制代码
    <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>

    hadoop15节点

    复制代码
    <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>

    hadoop16节点

    复制代码
    <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>
  • 数据准备

    启动集群

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs namenode -format
    [lzl@hadoop12 hadoop-3.1.3]$ myhadoop.sh start

    创建HDFS文件目录

    复制代码
    1[lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -mkdir /hdfsdata

    上传文件

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt /hdfsdata
HOT存储策略案例
  • 获取初始存储策略

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -getStoragePolicy -path /hdfsdata
  • 查看文件块分布

    复制代码
    1[lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
  • 默认存储策略为HOT

WARM存储策略测试
  • 设置WARM存储策略

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy WARM
  • 查看文件块分布

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
  • 手动迁移文件块

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs mover /hdfsdata
  • 再次查看文件块分布

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
COLD策略测试

设置COLD存储策略

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy COLD

手动迁移文件块

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs mover /hdfsdata

查看文件块分布

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
ONE_SSD策略测试

设置ONE_SSD存储策略

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy One_SSD

手动迁移文件块

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs mover /hdfsdata

查看文件块分布

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
ALL_SSD策略测试

设置ALL_SSD存储策略

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy All_SSD

手动迁移文件块

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs mover /hdfsdata

查看文件块分布

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations
LAZY_PERSIST策略测试

设置LAZY_PERSIST存储策略

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs storagepolicies -setStoragePolicy -path /hdfsdata -policy lazy_persist

手动迁移文件块

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs mover /hdfsdata

查看文件块分布

复制代码
[lzl@hadoop12 hadoop-3.1.3]$ hdfs fsck /hdfsdata -files -blocks -locations

注意事项

  • 当客户端所在的DataNode节点没有RAM_DISK时,文件块将被写入客户端所在的DataNode节点的DISK磁盘,其余副本将写入其他节点的DISK磁盘。

  • 如果客户端所在的DataNode有RAM_DISK,但"dfs.datanode.max.locked.memory"参数值未设置或者设置过小(小于"dfs.block.size"参数值),文件块同样会被写入客户端所在的DataNode节点的DISK磁盘,其余副本将写入其他节点的DISK磁盘。

  • 虚拟机的"max locked memory"限制为64KB,因此,如果参数配置过大,将会报错。

  • 查询"max locked memory"参数

    复制代码
    [lzl@hadoop12 hadoop-3.1.3]$ ulimit -a
相关推荐
无忧智库19 分钟前
产业数字化平台建设方案:从单点工厂改造到城市产业生态的全景落地指南(PPT)
大数据·人工智能
wuhanzhanhui23 分钟前
轻盈的力量:2026 武汉国际发泡材料技术工业展览会,重构未来工业的“呼吸感”
大数据·人工智能
冻感糕人~37 分钟前
大模型学习指南:收藏这份AI Agent四层工程地图(小白程序员必备)
java·大数据·人工智能·学习·大模型·agent·大模型学习
问商十三载38 分钟前
2026工业制造AI引擎生成式优化怎么做?3层适配法避通用坑,零成本提31%抓取权重附校验清单
大数据·人工智能·制造
ACP广源盛139246256731 小时前
国产算力互联IX8024@ACP#Kimi K3 开源后的端侧部署硬件架构分析
大数据·人工智能·分布式·单片机·嵌入式硬件
商业模式源码开发2 小时前
小米新车未发布即遭 AI 谣言攻击:黑色 GEO 的运作原理与企业正规防御方案
大数据·人工智能·ai·geo
edtoplort2 小时前
A股最大IPO长鑫科技295亿:从年亏163亿到日赚3亿
大数据·人工智能·科技
花生了什么事o2 小时前
分布式 ID 生成方案:从数据库自增到雪花算法
数据库·分布式·算法
一次旅行2 小时前
【效率秘籍】Shell 函数+别名组合拳,让 80% 的重复命令变 1 个字母
大数据·elasticsearch·搜索引擎
SEONIB_Explorer3 小时前
2026独立站AI收录底层逻辑:为什么内容可被Google收录,却无法被AI检索引用?
大数据·人工智能·跨境电商·视频制作·seonib·veonib