当前位置: 首页 > 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;但我们要根据实际情况选…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...