`
kanpiaoxue
  • 浏览: 1780979 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

存储单位工具类(来自于hadoop)

 
阅读更多

 

/**
 * 存储单位工具类
 * @ClassName: StorageUnit
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime: 2020/12/25 17:25:12
 * @Description:
 *  来自于:https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/StorageUnit.java
 */
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Class that maintains different forms of Storage Units.
 */
public enum StorageUnit {
    /*
     * We rely on BYTES being the last to get longest matching short names
     * first.
     * The short name of bytes is b and it will match with other longer names.
     * if we change this order, the corresponding code in
     * Configuration#parseStorageUnit needs to be changed too, since values()
     * call returns the Enums in declared order and we depend on it.
     */

    EB {
        @Override
        public double fromBytes(double value) {
            return divide(value, EXABYTES);
        }

        @Override
        public double getDefault(double value) {
            return toEBs(value);
        }

        @Override
        public String getLongName() {
            return "exabytes";
        }

        @Override
        public String getShortName() {
            return "eb";
        }

        @Override
        public String getSuffixChar() {
            return "e";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, EXABYTES);
        }

        @Override
        public double toEBs(double value) {
            return value;
        }

        @Override
        public double toGBs(double value) {
            return multiply(value, EXABYTES / GIGABYTES);
        }

        @Override
        public double toKBs(double value) {
            return multiply(value, EXABYTES / KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return multiply(value, EXABYTES / MEGABYTES);
        }

        @Override
        public double toPBs(double value) {
            return multiply(value, EXABYTES / PETABYTES);
        }

        @Override
        public double toTBs(double value) {
            return multiply(value, EXABYTES / TERABYTES);
        }
    },
    PB {
        @Override
        public double fromBytes(double value) {
            return divide(value, PETABYTES);
        }

        @Override
        public double getDefault(double value) {
            return toPBs(value);
        }

        @Override
        public String getLongName() {
            return "petabytes";
        }

        @Override
        public String getShortName() {
            return "pb";
        }

        @Override
        public String getSuffixChar() {
            return "p";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, PETABYTES);
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES / PETABYTES);
        }

        @Override
        public double toGBs(double value) {
            return multiply(value, PETABYTES / GIGABYTES);
        }

        @Override
        public double toKBs(double value) {
            return multiply(value, PETABYTES / KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return multiply(value, PETABYTES / MEGABYTES);
        }

        @Override
        public double toPBs(double value) {
            return value;
        }

        @Override
        public double toTBs(double value) {
            return multiply(value, PETABYTES / TERABYTES);
        }
    },
    TB {
        @Override
        public double fromBytes(double value) {
            return divide(value, TERABYTES);
        }

        @Override
        public double getDefault(double value) {
            return toTBs(value);
        }

        @Override
        public String getLongName() {
            return "terabytes";
        }

        @Override
        public String getShortName() {
            return "tb";
        }

        @Override
        public String getSuffixChar() {
            return "t";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, TERABYTES);
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES / TERABYTES);
        }

        @Override
        public double toGBs(double value) {
            return multiply(value, TERABYTES / GIGABYTES);
        }

        @Override
        public double toKBs(double value) {
            return multiply(value, TERABYTES / KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return multiply(value, TERABYTES / MEGABYTES);
        }

        @Override
        public double toPBs(double value) {
            return divide(value, PETABYTES / TERABYTES);
        }

        @Override
        public double toTBs(double value) {
            return value;
        }
    },
    GB {
        @Override
        public double fromBytes(double value) {
            return divide(value, GIGABYTES);
        }

        @Override
        public double getDefault(double value) {
            return toGBs(value);
        }

        @Override
        public String getLongName() {
            return "gigabytes";
        }

        @Override
        public String getShortName() {
            return "gb";
        }

        @Override
        public String getSuffixChar() {
            return "g";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, GIGABYTES);
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES / GIGABYTES);
        }

        @Override
        public double toGBs(double value) {
            return value;
        }

        @Override
        public double toKBs(double value) {
            return multiply(value, GIGABYTES / KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return multiply(value, GIGABYTES / MEGABYTES);
        }

        @Override
        public double toPBs(double value) {
            return divide(value, PETABYTES / GIGABYTES);
        }

        @Override
        public double toTBs(double value) {
            return divide(value, TERABYTES / GIGABYTES);
        }
    },
    MB {
        @Override
        public double fromBytes(double value) {
            return divide(value, MEGABYTES);
        }

        @Override
        public double getDefault(double value) {
            return toMBs(value);
        }

        @Override
        public String getLongName() {
            return "megabytes";
        }

        @Override
        public String getShortName() {
            return "mb";
        }

        @Override
        public String getSuffixChar() {
            return "m";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, MEGABYTES);
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES / MEGABYTES);
        }

        @Override
        public double toGBs(double value) {
            return divide(value, GIGABYTES / MEGABYTES);
        }

        @Override
        public double toKBs(double value) {
            return multiply(value, MEGABYTES / KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return value;
        }

        @Override
        public double toPBs(double value) {
            return divide(value, PETABYTES / MEGABYTES);
        }

        @Override
        public double toTBs(double value) {
            return divide(value, TERABYTES / MEGABYTES);
        }
    },
    KB {
        @Override
        public double fromBytes(double value) {
            return divide(value, KILOBYTES);
        }

        @Override
        public double getDefault(double value) {
            return toKBs(value);
        }

        @Override
        public String getLongName() {
            return "kilobytes";
        }

        @Override
        public String getShortName() {
            return "kb";
        }

        @Override
        public String getSuffixChar() {
            return "k";
        }

        @Override
        public double toBytes(double value) {
            return multiply(value, KILOBYTES);
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES / KILOBYTES);
        }

        @Override
        public double toGBs(double value) {
            return divide(value, GIGABYTES / KILOBYTES);
        }

        @Override
        public double toKBs(double value) {
            return value;
        }

        @Override
        public double toMBs(double value) {
            return divide(value, MEGABYTES / KILOBYTES);
        }

        @Override
        public double toPBs(double value) {
            return divide(value, PETABYTES / KILOBYTES);
        }

        @Override
        public double toTBs(double value) {
            return divide(value, TERABYTES / KILOBYTES);
        }
    },
    BYTES {
        @Override
        public double fromBytes(double value) {
            return value;
        }

        @Override
        public double getDefault(double value) {
            return toBytes(value);
        }

        @Override
        public String getLongName() {
            return "bytes";
        }

        @Override
        public String getShortName() {
            return "b";
        }

        @Override
        public String getSuffixChar() {
            return "b";
        }

        @Override
        public double toBytes(double value) {
            return value;
        }

        @Override
        public double toEBs(double value) {
            return divide(value, EXABYTES);
        }

        @Override
        public double toGBs(double value) {
            return divide(value, GIGABYTES);
        }

        @Override
        public double toKBs(double value) {
            return divide(value, KILOBYTES);
        }

        @Override
        public double toMBs(double value) {
            return divide(value, MEGABYTES);
        }

        @Override
        public double toPBs(double value) {
            return divide(value, PETABYTES);
        }

        @Override
        public double toTBs(double value) {
            return divide(value, TERABYTES);
        }
    };

    private static final double BYTE = 1L;
    private static final double KILOBYTES = BYTE * 1024L;
    private static final double MEGABYTES = KILOBYTES * 1024L;
    private static final double GIGABYTES = MEGABYTES * 1024L;
    private static final double TERABYTES = GIGABYTES * 1024L;
    private static final double PETABYTES = TERABYTES * 1024L;
    private static final double EXABYTES = PETABYTES * 1024L;
    private static final int PRECISION = 4;

    /**
     * Using BigDecimal to avoid issues with overflow and underflow.
     *
     * @param value
     *            - value
     * @param divisor
     *            - divisor.
     * @return -- returns a double that represents this value
     */
    private static double divide(double value, double divisor) {
        BigDecimal val = new BigDecimal(value);
        BigDecimal bDivisor = new BigDecimal(divisor);
        return val.divide(bDivisor).setScale(PRECISION, RoundingMode.HALF_UP).doubleValue();
    }

    /**
     * Using BigDecimal so we can throw if we are overflowing the Long.Max.
     *
     * @param first
     *            - First Num.
     * @param second
     *            - Second Num.
     * @return Returns a double
     */
    private static double multiply(double first, double second) {
        BigDecimal firstVal = new BigDecimal(first);
        BigDecimal secondVal = new BigDecimal(second);
        return firstVal.multiply(secondVal).setScale(PRECISION, RoundingMode.HALF_UP).doubleValue();
    }

    public abstract double fromBytes(double value);

    public abstract double getDefault(double value);

    public abstract String getLongName();

    public abstract String getShortName();

    public abstract String getSuffixChar();

    public abstract double toBytes(double value);

    public abstract double toEBs(double value);

    public abstract double toGBs(double value);

    public abstract double toKBs(double value);

    public abstract double toMBs(double value);

    public abstract double toPBs(double value);

    @Override
    public String toString() {
        return getLongName();
    }

    public abstract double toTBs(double value);

}

 

分享到:
评论

相关推荐

    hadoop在win上搭建需要的工具类

    7. **格式化NameNode**:在首次启动Hadoop集群前,需要对NameNode进行格式化,这会创建HDFS的元数据存储。 8. **启动Hadoop服务**:依次启动DataNode、NameNode、ResourceManager、NodeManager和HistoryServer等...

    hadoop的winutils.exe工具和hadoop.dll

    在Windows 10环境下配置Hadoop,通常会遇到一些特有的挑战,因为Hadoop主要设计于类Unix系统,如Linux。不过,通过使用特定的工具,如winutils.exe和hadoop.dll,Windows用户也能顺利搭建Hadoop环境。下面我们将详细...

    eclipse 运行hadoop工具包

    标题 "eclipse 运行hadoop工具包" 涉及到的是在Eclipse集成开发环境中运行Hadoop项目的方法。Eclipse是一款广泛使用的Java IDE,而Hadoop是Apache开源项目,主要用于大数据处理和分析。通过特定的插件,Eclipse能够...

    hadoop-2.7.1

    Hadoop,作为一款免费开源的软件,已经成为大数据处理领域的核心工具,尤其在版本2.7.1中,它展现了强大的分布式系统基础架构能力。这款软件由Apache软件基金会开发,旨在解决海量数据的存储和计算问题,提供高容错...

    hadoop平台的海量数据分类应用

    该工具通过集成Hadoop MapReduce框架,能够在分布式环境下高效地执行数据分类任务。ICP:Data Mining Package内置了四种经典的机器学习算法: 1. **决策树**:决策树是一种直观的分类模型,它通过一系列判断来预测...

    Hadoop源代码分析(Task的内部类和辅助类)

    `FileSystemStatisticUpdater`是一个简单的工具类,用于记录文件系统的读写操作字节数。通过监控这些统计信息,可以更好地理解任务执行过程中的I/O性能瓶颈。 ### 总结 通过对`Task`类及其内部类和辅助类的深入...

    Hadoop源码分析(完整版)

    工具类(util包)提供了各种实用工具,便于开发者使用。record包根据DDL(数据描述语言)自动生成编解码函数,目前支持C++和Java语言。HTTP模块提供了基于Jetty的HTTPServlet,使得用户可以通过浏览器访问文件系统...

    hadoop2.7.2依赖文件

    依赖工具类通常指的是那些帮助Hadoop在非Unix-like系统上运行的工具,如模拟Linux环境的Cygwin、MinGW,或者专门为Windows优化的Hadoop发行版,如Apache Hadoop for Windows或Cloudera's Distribution Including ...

    hadoop操作工具.rar

    HBase是一个基于Hadoop的分布式、版本化、列族存储的数据库,适用于实时读写操作。Cassandra则是一个高度可扩展的分布式数据库,适合大规模数据的存储和查询。 4. **Java**: Hadoop主要是用Java编写的,因此对Java...

    Hadoop2.7.3 Window10 hadoop.dll winutils.exe

    其次,`winutils.exe`是Hadoop在Windows上的实用工具,类似于Linux环境下的`hadoop`命令行工具。它包含了诸如管理HDFS(Hadoop分布式文件系统)和设置Hadoop环境变量等功能。在Windows环境中,`winutils.exe`主要...

    hadoop插件apache-hadoop-3.1.0-winutils-master.zip

    标题中的"apache-hadoop-3.1.0-winutils-master.zip"是一个针对Windows用户的Hadoop工具包,它包含了运行Hadoop所需的特定于Windows的工具和配置。`winutils.exe`是这个工具包的关键组件,它是Hadoop在Windows上的一...

    hadoop2lib.tar.gz

    在当今数据驱动的世界中,Hadoop作为开源的大数据处理框架,已经成为企业级数据存储和分析的重要工具。Hadoop2lib.tar.gz是一个专门为Hadoop开发准备的Java开发工具包,它包含了一系列核心组件和库,使得开发者能够...

    hadoop环境缺少的hadoop.dll ,winutils.exe包

    3. 设置安全沙箱:在Windows上,Hadoop需要一个安全沙箱(如C:\tmp\hadoop-root)来存储临时文件和数据。创建这个目录并赋予`winutils.exe`必要的权限。 4. 验证安装:启动Hadoop服务或者运行简单的Hadoop命令,如`...

    hadoop2.8.3包含winutils.exe和hadoop.dll

    - 文件系统模拟:因为Windows的文件系统与Hadoop默认的HDFS不同,所以可能需要使用像cygwin这样的工具来模拟类Unix环境,或者使用MinGW等其他解决方案。 总的来说,Hadoop2.8.3中的winutils.exe和hadoop.dll是...

    基于hadoop的词频统计.docx

    Hadoop 是一种基于云计算的分布式计算框架,由 Apache 基金会在2002年发起,起源于 Apache Nutch 项目。它的核心是分布式文件系统 HDFS(Hadoop Distributed File System)和 MapReduce 计算模型。Hadoop 设计的目标...

    hadoop-3.1.0.rar windows 环境依赖

    在Windows上部署Hadoop可能与在Linux系统中有所不同,因为Hadoop最初是为类Unix系统设计的,但通过特定的配置和工具,它同样可以在Windows上运行。 Hadoop 3.1.0是Hadoop发展的一个重要版本,包含了众多改进和新...

    Hadoop开发

    - **Hive**:是一个建立在Hadoop之上的数据仓库工具,可以将SQL语句转换为MapReduce任务执行,使用户能够用类SQL语言查询数据,简化了Hadoop编程的复杂度。 - **MapReduce中的Shuffle和Sort分析**:MapReduce的...

    Hadoop+HBase+Java API

    总的来说,Hadoop、HBase和Java API的结合使用为大数据处理和存储提供了强大的工具,它们可以帮助开发者处理PB级别的数据,并支持实时查询。熟练掌握这些技术,对于任何想要在大数据领域深入发展的IT专业人员都是至...

    hadoop中文乱码问题

    对于开发者来说,深入理解Hadoop源码有助于找出乱码的根源。可以查看与字符编码相关的类,如`Text`、`Charsets`等,了解Hadoop如何处理字符编码。 解决Hadoop中文乱码问题的关键在于识别和匹配数据的正确编码,并...

    hadoop在windows上运行需要winutils支持和hadoop.dll等文件

    在Windows环境下运行Hadoop,与在Linux系统中的配置有所不同,因为Hadoop原生是为类Unix系统设计的。然而,通过一些额外的工具,如WinUtils,我们可以使Hadoop在Windows上运行。 首先,让我们来理解一下标题中的...

Global site tag (gtag.js) - Google Analytics