FSShell-EC-du

FS Shell 基础 1 FS Shell调用文件系统 (FS)Shell 命令应使用 bin/hadoop fs <args>的形式。 所有的的 FS shell 命令使用 URI路径作为参数。URI 格式是 scheme://authority/path对HDFS文件系统,scheme 是 hdfs,对本地文件系统,scheme 是 file。其中 scheme 和 authority 参数都是可选的,如果未加指定, 阅读详情

client端du的调用:
public static class Du extends FsUsage
在这里插入图片描述

public ContentSummary getContentSummary(Path f) throws IOException {
    FileStatus status = getFileStatus(f);
    if (status.isFile()) {
      // f is a file
      long length = status.getLen();
      return new ContentSummary.Builder().length(length).
          fileCount(1).directoryCount(0).spaceConsumed(length).build();
    }
    // f is a directory
    long[] summary = {0, 0, 1};
    for(FileStatus s : listStatus(f)) {
      long length = s.getLen();
      ContentSummary c = s.isDirectory() ? getContentSummary(s.getPath()) :
          new ContentSummary.Builder().length(length).
          fileCount(1).directoryCount(0).spaceConsumed(length).build();
      summary[0] += c.getLength();
      summary[1] += c.getFileCount();
      summary[2] += c.getDirectoryCount();
    }
    return new ContentSummary.Builder().length(summary[0]).
        fileCount(summary[1]).directoryCount(summary[2]).
        spaceConsumed(summary[0]).build();
  }

getContentSummary 如果是目录,则循环调用直到是文件。
调用DFSClient的方法RPC调用:

  ContentSummary getContentSummary(String src) throws IOException {
    checkOpen();
    try (TraceScope ignored = newPathTraceScope("getContentSummary", src)) {
      return namenode.getContentSummary(src);
    } catch (RemoteException re) {
      throw re.unwrapRemoteException(AccessControlException.class,
          FileNotFoundException.class,
          UnresolvedPathException.class);
    }
  }

**断点调试NameNode的时候,一定要在命令行模式搞。客户端就不要再搞Shell调试了。**经验,否则出不来。
在这里插入图片描述
iip:

INodesInPath: path = /ec/t.log
  inodes = [, ec, t.log], length=3
  isSnapshot        = false
  snapshotId        = 2147483646

在这里插入图片描述

关键方法:

ContentSummary cs = targetNode.computeAndConvertContentSummary(
            iip.getPathSnapshotId(), cscc);

跳转到Inode中:

 public final ContentSummary computeAndConvertContentSummary(int snapshotId,
      ContentSummaryComputationContext summary) throws AccessControlException {
    computeContentSummary(snapshotId, summary);
    final ContentCounts counts = summary.getCounts();
    final ContentCounts snapshotCounts = summary.getSnapshotCounts();
    final QuotaCounts q = getQuotaCounts();
    return new ContentSummary.Builder().
        length(counts.getLength()).
        fileCount(counts.getFileCount() + counts.getSymlinkCount()).
        directoryCount(counts.getDirectoryCount()).
        quota(q.getNameSpace()).
        spaceConsumed(counts.getStoragespace()).
        spaceQuota(q.getStorageSpace()).
        typeConsumed(counts.getTypeSpaces()).
        typeQuota(q.getTypeSpaces().asArray()).
        snapshotLength(snapshotCounts.getLength()).
        snapshotFileCount(snapshotCounts.getFileCount()).
        snapshotDirectoryCount(snapshotCounts.getDirectoryCount()).
        snapshotSpaceConsumed(snapshotCounts.getStoragespace()).
        erasureCodingPolicy(summary.getErasureCodingPolicyName(this)).
        build();
  }
  //
  public abstract ContentSummaryComputationContext computeContentSummary(
      int snapshotId, ContentSummaryComputationContext summary)
      throws AccessControlException;
      

计算EC文件的物理存储:

// TODO: support EC with heterogeneous storage
  public final QuotaCounts storagespaceConsumedStriped() {
    QuotaCounts counts = new QuotaCounts.Builder().build();
    for (BlockInfo b : blocks) {
      Preconditions.checkState(b.isStriped());
      long blockSize = b.isComplete() ?
          ((BlockInfoStriped)b).spaceConsumed() : getPreferredBlockSize() *
          ((BlockInfoStriped)b).getTotalBlockNum();
      counts.addStorageSpace(blockSize);
    }
    return  counts;
  }

在这里插入图片描述
在这里插入图片描述
numBytes是逻辑空间。
对于每个块都调用 ((BlockInfoStriped)b).spaceConsumed() 方法来计算实际存储。

  public long spaceConsumed() {
    // In case striped blocks, total usage by this striped blocks should
    // be the total of data blocks and parity blocks because
    // `getNumBytes` is the total of actual data block size.
    return StripedBlockUtil.spaceConsumedByStripedBlock(getNumBytes(),
        ecPolicy.getNumDataUnits(), ecPolicy.getNumParityUnits(),
        ecPolicy.getCellSize());
    }

在这里插入图片描述

    return numDataBlkBytes + numParityBlkBytes;

数据空间+校验空间
数据空间就是我们说的逻辑空间,直接就知道。
校验空间。

逻辑空间:

    long numParityBlkBytes = getInternalBlockLength(numDataBlkBytes, cellSize,
        dataBlkNum, parityIndex) * parityBlkNum;

StripedBlockUtil:

public static long getInternalBlockLength(long dataSize,
      int cellSize, int numDataBlocks, int idxInBlockGroup) {
    Preconditions.checkArgument(dataSize >= 0);
    Preconditions.checkArgument(cellSize > 0);
    Preconditions.checkArgument(numDataBlocks > 0);
    Preconditions.checkArgument(idxInBlockGroup >= 0);
    // Size of each stripe (only counting data blocks)
    final int stripeSize = cellSize * numDataBlocks;
    // If block group ends at stripe boundary, each internal block has an equal
    // share of the group
    final int lastStripeDataLen = (int)(dataSize % stripeSize);
    if (lastStripeDataLen == 0) {
      return dataSize / numDataBlocks;
    }

    final int numStripes = (int) ((dataSize - 1) / stripeSize + 1);
    return (numStripes - 1L)*cellSize
        + lastCellSize(lastStripeDataLen, cellSize,
        numDataBlocks, idxInBlockGroup);
  }

在这里插入图片描述
计算有几个条带非常巧妙:(分组算法)

final int numStripes = (int) ((dataSize - 1) / stripeSize + 1);
    return (numStripes - 1L)*cellSize
        + lastCellSize(lastStripeDataLen, cellSize,
        numDataBlocks, idxInBlockGroup);

lastStripeDataLen: 最后一个条带的大小。
numDataBlocks:3-2策略下就是3。
idxInBlockGroup:numDataBlocks+1=4

  private static int lastCellSize(int size, int cellSize, int numDataBlocks,
      int i) {
    if (i < numDataBlocks) {  //前边已经传了比numDataBlocks+1个,所以不可能小
      // parity block size (i.e. i >= numDataBlocks) is the same as
      // the first data block size (i.e. i = 0).
      size -= i*cellSize;
      if (size < 0) {
        size = 0;
      }
    }
    return size > cellSize? cellSize: size;  //直接走的这个逻辑
  }

总结

  1. 要知道总的逻辑大小,如300M的文件。
  2. 要知道划分了多少个块组。如3-2策略下,128M一个块,一个块组就能放128*3=384M的逻辑空间。
  public static long spaceConsumedByStripedBlock(long numDataBlkBytes,
      int dataBlkNum, int parityBlkNum, int cellSize) {
    int parityIndex = dataBlkNum + 1;
    long numParityBlkBytes = getInternalBlockLength(numDataBlkBytes, cellSize,
        dataBlkNum, parityIndex) * parityBlkNum;
    return numDataBlkBytes + numParityBlkBytes;
  }

这个值为什么始终 dataBlkNum + 1; ?

【HDFS】 bugfix: router getContentSummary rpc的bug修复 阅读详情

相关推荐

Xilinx VU+系列多DIE FPGA时序约束与跨DIE信号优化策略

本文深入探讨了Xilinx VU+系列多DIE FPGA的时序约束与跨DIE信号优化策略。针对2.5D/3D封装技术带来的时序挑战,详细解析了SLR区域约束、Laguna寄存器配置及跨时钟域约束等关键技术,提供了实用的TCL脚本和RTL优化示例,帮助开发者有效提升设计性能和时序收敛效率。

weixin_29209801的博客 653

hdfs命令

文档地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统(FS)Shell命令应使用bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径...

chongxiting3307的博客 307

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 421

hadoop2.8.2 FS SHELL

概述文件系统(FS)shell包含很多很像shell的命令,可以直接和HDFS交互。就像 Local FS,HFTP FS,S3 FS等。FS SHELL 可以用下面的命令执行:bin/hadoop fs <args>所有的FS SHELL命令都需要一个URI作为参数,URI的格式为:scheme://authority/path对于HDFS来说,scheme就是hdfs。对于Local FS来说s

貌似君子的专栏 1185

TLSv1.0与TLSv1.1安全漏洞深度解析与实战修复指南

本文深度解析TLSv1.0与TLSv1.1的安全漏洞,包括POODLE和BEAST攻击原理,并提供实战修复指南。通过禁用老旧协议、配置安全加密套件和网络层防护措施,有效提升系统安全性。文章还针对无法立即升级的场景,给出了补偿性防御方案,帮助管理员全面应对传输层安全风险。

weixin_29322855的博客 206

分支界定法(branch and bound)与背包问题的代码实现

分支界定法(branch and bound)与背包问题的代码实现 LastEditTime: - 2021.2.3 不卖茶的吴龙茗茶 分支界定法是一种在整数规划中常用的算法,其主要思想为将大问题分割成小问题进行求解。分支界定法是围绕着一个二叉树进行的,以背包问题为例: 假设小明有一个背包,其总的容积为30,小明有三件东西可以带,三件东西的体积分别为:10,15,20。求问小明如何能够在背包中装下更大体积的物品? .

小吴同学的小屋 1882

Hadoop FS Shell常用命令

1.调用Hadoop的文件系统Shell(FileSystem Shell)的命令格式:语法:hadoop fs &lt;args&gt;:前提是位置位于hadoop/bin下,其中fs是参数,表示FS Shell,&lt;args&gt;是fs的子命令2.使用FS Shell命令行管理文件:mkdir  -创建目录语法:hadoop fs -mkdir &lt;paths&gt; 例子: had...

六月星海的博客 5120

Charles 抓包工具下载安装及基础使用

本篇内容主讲关于Charles抓包工具,从下载安装以及配置信息,证书的下载安装以及PC端设置代理配置和移动端设备配置代理,阐述关于Charles抓包工具面板的基础使用以及如何进行抓包和设置断点,对于软件测试以及对抓包感兴趣的读者可以翻阅!感谢大家的支持!!!

灵魂学者的博客 2957

HDFS工具DsfAdmin和FsShell

使用HDFS时两个常用工具是多任务工具DfsAdmin和文件系统Shell命令。FsShell Hadoop文件系统Shell命令可以执行其他 文件系统中常见的操作,如读取文件、移动文件、创建目录、删除数据等等。在终端上可以通过下面命令,获得Shell命令的详细帮助信息,[hdfs@cent-2 ~]$ hadoop fs -help Usage: hadoop fs [generic optio

数据源的港湾 2591

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

Silvaco Atlas入门指南——从零开始掌握半导体器件仿真

本文为Silvaco Atlas半导体器件仿真软件的入门指南,详细介绍了从零开始掌握该工具的核心流程。内容涵盖Atlas的基本概念、仿真流程、核心文件(输入、结构、输出文件)、交互式与批处理两种操作模式,并逐步演示了如何从定义网格、划分区域、设置电极到进行掺杂、选择物理模型并求解,最终获取和分析器件特性的完整步骤。旨在帮助微电子相关专业人员和工程师快速上手这一强大的“数字实验室”,提升半导体器件设计与研发效率。

weixin_29306317的博客 398

Hadoop 3.1.3学习笔记1

Hadoop 3.1.3学习笔记1 本部分主要分析EC策略下的条带化读取、写入过程,包括StripeReader、StripeWriter、StripedBlockReader、StripedBlockWriter、StripedBlockUtil部分源码。另外,整个过程还涉及EC策略下的数据重构,包括StripedReconstruction、StripedBlockReconstruction、BlockRecoveryWorker,还涉及HDFS的数据读写流DFSStripedOutputStream

u014245138的博客 848

人像美肤 人体美型 CVPR 2022 ABPN

人像美肤 CVPR 2022 ABPN

jacke121的专栏 841

使用hadoop_restful_api实现对集群信息的一些统计

全文链接 (适用于hadoop 2.7及以上版本) 涉及到RESTful API ResourceManager REST API’s: https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html WebHDFS REST API:

bystarlight的博客 1777

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Hadoop官方文档——HDFS配额Quota

概述 Hadoop分布式文件系统(HDFS)允许管理员为所使用的名称数量和单个目录使用的空间量设置配额。name quota和space quota独立运作,但这两种配额的管理和实施是相当类似的。 name quota name quota是对当前目录树中的文件和目录名称的数量的硬限制。如果超出配额,文件和目录创建将会失败。配额与重新命名目录操作绑定;如果操作会导致配额违规...

qq_28069577的博客 2123

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hadoop3.2.1 【 HDFS 】源码分析 :数据块管理解析

Table of Contents 一.前言 二. Block、 Replica、 BlocksMap 2.1.Block 2.2.BlockInfo 2.3.BlockUnderConstructionFeature 2.4.BlocksMap类 2.5.Replica类状态 2.6.Block类状态 三.数据块副本状态 3.1.BlockManager数据结构 3.2.CorruptReplicasMap类 3.3.InvalidateBlocks类 3.4.LowRedun.

张伯毅的专栏 8389

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

The DiskSpace quota of /five is exceeded: quota = 4096 B = 4 KB but diskspace consumed = 402653184

进行配置hdfs出现 '‘The DiskSpace quota of /five is exceeded: quota = 4096 B = 4 KB but diskspace consumed = 402653184 B = 384 MB’'问题 当你用hdfs上传文件时,出现 类似的问题时,你不要慌张,其实这个只是你对文件进行了空间限额不规范导致的,空间大小限额最小384M,你只需要解除限额并重新设置限额大小即可 ...

qq_44920169的博客 2522

Hadoop Erasure Coding结构分析

前言Hadoop-3.0-alpha2版本最近已经发布了,在Hadoop-3.0-alpha2版本中,社区继续fix了许多关于HDFS EC特性相关的issue。而Hadoop EC作为3.0版本中具有重大意义的feature,我们非常有必要去学习,并用好这个特性。在之前的文章中,笔者或多或少介绍过EC技术的原理知(再聊HDFS Erasure Coding)以及EC技术在Hadoop中的运用(Ha

走在前往架构师的路上 5387

HDFS的shell操作

一、HDFS的shell命令简介 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS 的操作命令类似于lLinux 的shell 对文件的操作,如ls、mkdir、rm 等。 我们在执行HDFS的shell操作的时候,一定要确定hadoop 是正常运行的,我们可

cloud-2014的专栏 558

HDFS的shell命令简介

一、HDFS的shell命令简介 ​ 我们都知道HDFS 是存取数据的分布式文件系统,那么对HDFS 的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS 的操作命令类似于lLinux 的shell 对文件的操作,如ls、mkdir、rm 等。 我们在执行HDFS的shell操作的时候,一定要确定hadoop 是正常运行的,我们可以使用使用jps 命令确保看到各个hadoop 进程。 我们可以执行命令hadoop fs,来查看HDFS

Laity 6455

Hadoop学习笔记5

Hadoop学习笔记5 本节介绍EC模式下,HDFS在文件下载过程中遇到目标节点失效,是如何处理的。 过程简述 用户从HDFS中下载文件的过程如上图所示,在web下载模式中,用户首先登陆web服务器,web服务器会从namenode中获取文件存储的信息,客户端又从web服务器上获得存储信息,然后从存储该文件的其中一个(实际就是第一个)服务器上开始下载文件。显然,被选中的服务器(称为currentnode)上只有该文件的一部分数据,其他数据由其他节点发送给currentnode(实际中是由currentno

ziye00__的博客 475

Hadoop 3.1.3学习笔记2

Hadoop3.1.3学习笔记2 本文主要探讨StripedBlockReconstruction过程,即条带化存储下如何恢复损坏的block,以下内容涉及StripedReader、StripedWriter等相关类的内容,将在后面进行介绍 /** * StripedBlockReconstructor reconstruct one or more missed striped block in * the striped block group, the minimum number of liv

u014245138的博客 492

Hadoop shell

<br /><br />1 Hadoop shell<br />1.1 引言<br />调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/pa

royesir的专栏 1390

ClientProtocol.getContentSummary

ContentSummary returned by ClientProtocol.getContentSummary public class ContentSummary implements Writable{ private long length; private long fileCount; private long directoryCount; private...

houzhizhen的专栏 1403

HDFS内存配置

下图是HDFS的架构: 从上图中可以知道,HDFS包含了NameNode、DataNode以及Client三个角色,当我们的HDFS没有配置HA的时候,那还有一个角色就是SecondaryNameNode,这四个角色都是基于JVM之上的Java进程。既然是Java进程,那我们肯定可以调整这四个角色使用的内存的大小。接下来我们就详细来看下怎么配置HDFS每个角色的内...

aohuang8877的博客 1105

FS Shell命令与JAVA实现操作HDFS文件

FS Shell命令与JAVA实现操作HDFS文件

hfbin的博客 9203
上一篇: SET EC调试版
下一篇: hdfs oiv分析调试篇
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值