当前位置: 首页 > news >正文

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录

  • (155)纠删码原理
    • 纠删码原理
    • 纠删码相关命令
    • 纠删码策略解释
  • (156)纠删码案例实操
  • 参考文献

(155)纠删码原理

纠删码原理

默认情况下,一个文件在HDFS里会保留3个副本,以此提高数据的可靠性(容灾),但也带来了2倍的存储上的冗余开销。

于是Hadoop3.x引入了纠删码,采用计算的方式来提高数据的可靠性,可以节省50%左右的存储空间。

在这里插入图片描述

如上图(黄色部分),默认情况下,对于一个300M大小的文件,实际上HDFS会消耗300M*3=900M的空间来存储。

那纠删码是怎么做的呢?(上图中绿色部分)

对于一个300M大小的文件,会拆分成3个数据单元和2个校验单元,每个单元占用100M,总共占用500M。(占用空间比默认情况下要少)

那纠删码是怎么保障数据的可靠性的呢?

如果其中任意两个单元挂掉,不管是校验单元还是数据单元,其他还存活的单元仍然可以通过计算的方式,将挂掉的单元恢复出来,不影响数据的正常使用。

因此纠删码属于是 节省了物理存储空间,但是牺牲了集群的计算资源 。这个优缺点要注意,因为一般来讲,计算资源更重要些,所以纠删码的应用场景相对会比较窄。

这里其实有个问题,就是纠删码能够恢复的上限是多少,即最多允许在丢失多少个单元的情况下,能够完成数据恢复?

这个教程里没有讲,我简单查了一下,是不超过校验单元的数量就可以,比如说上例里,校验单元数量为2,如果丢失3个及以上数量的单元,就没法恢复了。

纠删码相关命令

hdfs ec:查看帮助文档;

hdfs ec -listPolicies:列出所有支持的纠删码策略;

hdfs ec -getPolicy -path <path>:获取某一个路径的纠删码策略。可以看到纠删码策略很灵活啊,是可以分路径来配置不同的策略。

hdfs ec -setPolicy -path <path> -policy <policy>:对某一个路径设置纠删码策略;

其他不表。

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

[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

可以看到,当前启用的纠删码策略只有一个,即RS-6-3-1024k。因为只有它是State=ENABLED

纠删码策略解释

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。

这里的1024K怎么理解哈,以RS-3-2-1024K策略为例解释一下。

可以简单的理解成是大单元和小单元的区别。或者把1024K理解成一个常规情况下的最小size。

可以认为,1024K是一个小单元的大小,假设你有300M数据,要划分成3个大数据单元,那么每个大数据单元就包含了100个小数据单元。

假设你有2M数据,那就只能划分出2个小数据单元,分别分给2个大数据单元,每个大数据单元只有一个小数据单元。

假设你有1M以内的数据,那就最终都放在一个大的数据单元里。

(156)纠删码案例实操

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

默认只开启对RS-6-3-1024K策略的支持,其他策略如果想使用,必须要先手动开启。

教程里接下来的示例,都是以RS-3-2-1024K为例讲解,因为这样只需要5台节点就可以了。

具体步骤

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

[atguigu@hadoop102 hadoop-3.1.3]$  hdfs ec -enablePolicy  -policy RS-3-2-1024kErasure 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)查看存储路径的数据单元和校验单元,删掉部分数据,来作破坏实验,会发现很快就恢复回来了。

注意,纠删码应用后,数据的副本相当于是只有1份了。只不过是这一份数据,分布在5台节点上。直接查看存储的内容是看不懂的,因为是有自己的保存形式,用来计算的。

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

相关文章:

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 &#xff08;155&#xff09;纠删码原理纠删码原理纠删码相关命令纠删码策略解释 &#xff08;156&#xff09;纠删码案例实操参考文献 &#xff08;155&#xff09;纠删码原理 纠删码原理 默认情况下&#xff0c;一个文件在HDFS里会保留3个副本&#xff0c;以此提高…...

用nodejs爬虫台湾痞客邦相册

情景:是这样的,我想保存一些喜欢的小伙伴的照片,一张张保存太慢了, 所以我写了个js,放在国外服务器爬,国内的自己解决~ 使用方法 1.点相册随便一张, 复制url, 这张开始接下来的图片都会保存 /*** 2023年10月23日 22:58:44* 支持解析痞客邦相册* 只需要复制相册第一张图片的ur…...

物联网_01_物理设备的网络接入

设备的网络接入及物理层使用到的传输协议 现在物理设备有两种接入方式,一种是直接接入另一种是网关接入 直接接入 给物理设备添加NB-IOT通信模组等设备使之具有直接接入网络的能力 网关接入 物理设备在本地组网后通过统一的网关接入到网络(ZigBee无线组网网关).网关是处在本地…...

AD9371 官方例程之 tx_jesd 与 xcvr接口映射

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方例程HDL详解之JESD204B TX侧时钟生成&#xff08;一&#xff09; AD9371 官方例程 时钟间的关系与生成 &…...

UserWarning: CUDA initialization: CUDA unknown error

CUDA在suspend之后不可用问题 问题描述 一觉醒来&#xff0c;电脑cuda不可用 /home/你的电脑/pytorch/lib/python3.8/site-packages/torch/cuda/__init__.py:107: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up enviro…...

C算法:使用选择排序实现从(大到小/从小到大)排序数组,且元素交换不可使用第三变量。

需求&#xff1a; 使用选择排序实现从(大到小/从小到大)排序&#xff0c;且元素交换不可使用第三变量 (异或交换法) 代码实现&#xff1a; #include <stdio.h> void maopao(int* array,int len,int(*swap)(int a,int b)) {int i,j;for(i0;i<len-1;i){for(ji1;j<…...

用mysql客户端操作时,一直提示 Lost connection to MySQL server during query

问题&#xff1a;ERROR 2013 (HY000): Lost connection to MySQL server during query :查询期间失去与 MySQL 服务器的连接 原因&#xff1a;如果客户端如果太长时间没动静&#xff0c;连接器就会自动将连接断开&#xff0c; 这个时间是由参数wait_timeout控制的&#xff0c;…...

KubeSphere一键安装部署K8S集群(单master节点)-亲测过

1. 基础环境优化 hostnamectl set-hostname master1 && bash hostnamectl set-hostname node1 && bash hostnamectl set-hostname node2 && bashcat >> /etc/hosts << EOF 192.168.0.34 master1 192.168.0.45 node1 192.168.0.209…...

vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码

<template><el-table ref"multipleTableRef" :data"tableData" style"width: 100%"><el-table-column type"selection" width"55" /><el-table-column label"时间" width"120">…...

Redis --- 安装教程

Redis--- 特性&#xff0c;使用场景&#xff0c;安装 安装教程在Ubuntu下安装在Centos7.6下安装Redis5 特性在内存中存储数据可编程的扩展能力持久化集群高可用快速 应用场景实时数据存储作为缓存或者Session存储消息队列 安装教程 &#x1f680;安装之前切换到root用户。 在…...

代码阅读:LanGCN

toc 1训练 1.1 进度条 import tqdm as tqdm for i, data in tqdm(enumerate(train_loader),disablehvd.rank()):1.2 多进程通信 多线程通信依靠共享内存实现&#xff0c;但是多进程通信就麻烦很多&#xff0c;因此可以采用mpi库&#xff0c;如果是在python中使用&#xff0…...

基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

使用C#和Flurl.Http库的下载器程序

根据您的要求&#xff0c;我为您编写了一个使用C#和Flurl.Http库的下载器程序&#xff0c;用于下载凤凰网的图片。以下是一个简单的示例代码&#xff1a; using System; using Flurl.Http;namespace DownloadImage {class Program{static void Main(string[] args){string url…...

面试经典150题——Day19

文章目录 一、题目二、题解 一、题目 58. Length of Last Word Given a string s consisting of words and spaces, return the length of the last word in the string. A word is a maximal substring consisting of non-space characters only. Example 1: Input: s “…...

TP6首页加载报错 Call to a member function run() on null

最近新接入一个二开的项目&#xff0c;tp6的项目内置的composer.json文件里引入的topthink框架包文件却是"topthink/framework": "5.0.*",导致了以下错误&#xff1a; 错误&#xff1a; Fatal error: Uncaught Error: Call to a member function run() o…...

洗车小程序源码:10个必备功能,提升洗车体验

作为洗车行业的专家&#xff0c;我们深知在如今数字化时代&#xff0c;拥有一款功能强大的洗车小程序是提升用户体验和业务发展的关键。本文将向您介绍洗车小程序源码中的10个必备功能&#xff0c;让您的洗车业务达到新的高度。 在线预约系统 通过洗车小程序源码&#xff0c;…...

macOS telnet替代方式

前言 经过使用Linux&#xff0c;常常用Linux的telnet查看端口畅通&#xff0c;是否有防火墙&#xff0c;但是在mac上已经没有这个命令了&#xff0c;那么怎么使用这个命令或者有没有其他替代呢&#xff0c;win和linux是否可以使用相同的替代。macOS可以原生用nc命令替代&#…...

【leetcode】独特的电子邮件地址

题目描述 每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成&#xff0c;以 ‘’ 符号分隔。除小写字母之外&#xff0c;电子邮件地址还可以含有一个或多个 ‘.’ 或 ‘’ 。 例如&#xff0c;在 aliceleetcode.com中&#xff0c; alice 是 本地名 &#xff0c;而 lee…...

解密Java中神奇的Synchronized关键字

文章目录 &#x1f389; 定义&#x1f389; JDK6以前&#x1f389; 偏向锁和轻量级锁&#x1f4dd; 偏向锁&#x1f4dd; 轻量级锁&#x1f4dd; 自旋锁&#x1f4dd; 重量级锁&#x1f525; 1. 加锁&#x1f525; 2. 等待&#x1f525; 3. 撤销 &#x1f389; 锁优化&#x1f…...

微信删除的好友还能找回来吗?盘点5种超实用的方法!

当我们在认识新的朋友时&#xff0c;都喜欢通过添加对方微信来保持日后的联系。但是有时候可能会由于没有及时备注而不小心误删了对方。想要将对方加回来&#xff0c;又找不到有效的方法。微信删除的好友还能找回来吗&#xff1f;当然可以了&#xff01;但我们要根据实际情况选…...

如何快速掌握OpenEMS:开源能源管理系统的完整指南

如何快速掌握OpenEMS&#xff1a;开源能源管理系统的完整指南 【免费下载链接】openems OpenEMS - Open Source Energy Management System 项目地址: https://gitcode.com/gh_mirrors/op/openems 想要打造智能能源管理系统却不知从何入手&#xff1f;OpenEMS开源能源管理…...

百川2-13B-4bits+OpenClaw:科研实验记录自动化整理方案

百川2-13B-4bitsOpenClaw&#xff1a;科研实验记录自动化整理方案 1. 科研工作者的痛点与自动化契机 作为一名长期泡在实验室的研究员&#xff0c;我深知实验记录整理的痛苦。每天面对LabArchives里杂乱无章的实验数据、仪器导出的CSV文件和各种手写笔记&#xff0c;光是整理…...

小白必看!Qwen-Image-2512-SDNQ Web服务完整使用指南,附常见问题解决

小白必看&#xff01;Qwen-Image-2512-SDNQ Web服务完整使用指南&#xff0c;附常见问题解决 1. 从零开始&#xff1a;认识你的AI画师 Qwen-Image-2512-SDNQ是一款强大的图片生成模型&#xff0c;现在通过Web服务的形式让每个人都能轻松使用。想象一下&#xff0c;你只需要在…...

5分钟掌握Switch破解神器TegraRcmGUI:新手也能轻松上手的图形化注入教程

5分钟掌握Switch破解神器TegraRcmGUI&#xff1a;新手也能轻松上手的图形化注入教程 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 还在为Switch破解的复杂…...

第二十五节:Skill的打包、版本控制与社区发布

引言 上一章&#xff0c;我们为Skill精心打造了专业的README文档&#xff0c;这好比为产品准备好了精美的说明书。但要让用户能真正“安装”并使用你的成果&#xff0c;我们还需要完成从本地项目到可分发“产品”的关键转化。本章&#xff0c;我们将聚焦于Skill的打包、版本控制…...

IC版图新手避坑:用Layout XL做Floorplan时,关闭飞线的正确姿势与常见误区

IC版图设计实战&#xff1a;Layout XL飞线管理的艺术与科学 在IC版图设计的世界里&#xff0c;飞线&#xff08;Rubber Band&#xff09;就像一把双刃剑——它既是连接关系的直观体现&#xff0c;也可能成为视觉干扰的源头。特别是当设计规模达到数万甚至数十万门级时&#xff…...

原神帧率解锁指南:3步突破60FPS限制,释放硬件全部性能!

原神帧率解锁指南&#xff1a;3步突破60FPS限制&#xff0c;释放硬件全部性能&#xff01; 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 还在为《原神》的60帧上限而烦恼吗&#xff1f…...

Qwen2.5-7B-Instruct开源镜像部署:免编译、免conda、开箱即用

Qwen2.5-7B-Instruct开源镜像部署&#xff1a;免编译、免conda、开箱即用 1. 项目简介 如果你正在寻找一个既强大又容易上手的本地AI对话助手&#xff0c;Qwen2.5-7B-Instruct镜像绝对是你的理想选择。这个基于阿里通义千问旗舰版大模型构建的智能对话服务&#xff0c;完全在…...

多人对话场景模拟:交替使用不同音色生成对话片段

多人对话场景模拟&#xff1a;交替使用不同音色生成对话片段 1. 引言&#xff1a;让AI语音对话更真实自然 想象一下这样的场景&#xff1a;你需要制作一段多人对话的音频内容&#xff0c;可能是教学演示、广播剧、或者产品介绍。传统方法需要找不同的人录音&#xff0c;费时费…...

Qwen3-ASR-1.7B开源模型部署教程:Safetensors权重本地加载全流程

Qwen3-ASR-1.7B开源模型部署教程&#xff1a;Safetensors权重本地加载全流程 1. 引言&#xff1a;为什么选择Qwen3-ASR-1.7B 如果你正在寻找一个完全离线的语音识别解决方案&#xff0c;Qwen3-ASR-1.7B绝对值得关注。这个模型最大的优势就是"开箱即用"——不需要连…...