`
kanpiaoxue
  • 浏览: 1744971 次
  • 性别: 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从入门到上手企业开发

    020 结合WordCount实例讲解Hadoop的数据存储和数据计算 021 Hadoop 五大服务与配置文件中的对应关系 022 分析Hadoop 三种启动停止方式的Shell 脚本 023 去除警告【Warning$HADOOP HOME is deprecated。】 024 Hadoop...

    Hadoop权威指南 第二版(中文版)

     本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...

    Hadoop权威指南(中文版)2015上传.rar

    第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用...

    Hadoop实战中文版.PDF

    1649.2.2 获得命令行工具 1669.2.3 准备SSH密钥对 1689.3 在EC2上安装Hadoop 1699.3.1 配置安全参数 1699.3.2 配置集群类型 1699.4 在EC2上运行MapReduce程序 1719.4.1 将代码转移到Hadoop集群上 1719...

    Hadoop实战(第2版)

    尤其适用于大数据系统,Hadoop为苹果、eBay、LinkedIn、雅虎和Facebook等公司提供重要软件环境。它为开发者进行数据存储、管理以及分析提供便利的方法。 《Hadoop硬实战》收集了85个问题场景以及解决方案的实战演练...

    hadoop大数据实战手册

    2.4.6 BlockPlacementPolicyWithNo deGroup 继承类……………………·· …… …….. 84 2.4.7 副本放置策略的结果验证… …… ..... . ... . … … …………………………………… 85 2.5 HDFS 内部的认证机制……...

    Apache Hadoop---Hive.docx

    Hive是Hadoop中的一个重要子项目,最早由Facebook设计,是建立在Hadoop基础上的数据仓库架构,它为数据仓库的管理提供了许多功能,包括:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析...

    rmstateutils:分析Hadoop Yarn Resource Manager状态存储的工具

    cp ~/etc/hadoop/conf:./rmstateutils-1.0-SNAPSHOT-jar-with-dependencies.jar org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateCopy fs zkHadoop conf dir和“带有依赖项的jar”必须存在于类路径...

    (orc + snappy / zlib ) 多线程并行合并小文件工具类 (出自:flink自定义合并orc小文件处)

    通过指定目录进行多线程执行合并小文件程序,由于hdfs小文件过多,可用于自定义合并orc小文件。

    Hadoop各组件详解(Hive篇)

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL); 其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,hive可以理解为一个将...

    Hadoop-Programs:Hadoop 程序

    该程序将一个数组从映射器传递给化简器,为了传递数组,需要扩展 ArrayWritable 类以指定存储在数组中的值的类型 Hadoop 传递 jar: 该程序将 jar 文件作为命令行参数并在映射器中使用它。 为此,必须使用工具转轮...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    前言 致谢 关于本书 第1 部分 背景和基本原理 1 跳跃中的Hadoop 1.1 什么是Hadoop ...附录B Hadoop 内置的数据导入导出工具 附录C HDFS 解剖. 附录D 优化MapReduce 合并框架 索引 收起全部↑

    【前端素材】大数据-集群存储管理.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    hbase2.1.5官网下载的版本

    HBase的设计思想来源于Google的BigTable论文,是一个面向列式存储的分布式数据库。 HBase底层存储基于HDFS实现,集群的管理基于ZooKeeper实现。其良好的分布式架构设计为海量数据的快速存储和随机访问提供了可能。...

    Big-Data-Processing-with-Hadoop---A-Complete-Reference-Guide:使用高级Hadoop概念设计,构建和执行有效的大数据策略

    使用高级Hadoop概念设计,构建和执行有效的大数据策略Apache Hadoop是用于分布式存储和数据处理的最受欢迎的大数据解决方案之一。 该学习路径将使您能够轻松地使用Hadoop以及一系列其他大数据工具来构建解决方案。 ...

    Hive 用户指南 v1.0

    它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。...

    【前端素材】大数据-国家工商总局.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-大数据可视化系统数据分析通用模版ii.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-大数据分析模板.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

    【前端素材】大数据-智慧物流服务中心.zip

    NoSQL数据库:NoSQL数据库(如MongoDB、Cassandra等)则更适用于处理这类数据。 数据仓库:数据仓库是一个用于集成和分析大规模数据的存储系统,一些知名的数据仓库包括Snowflake、Amazon Redshift等。 数据湖:...

Global site tag (gtag.js) - Google Analytics