/** * 存储单位工具类 * @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); }
相关推荐
7. **格式化NameNode**:在首次启动Hadoop集群前,需要对NameNode进行格式化,这会创建HDFS的元数据存储。 8. **启动Hadoop服务**:依次启动DataNode、NameNode、ResourceManager、NodeManager和HistoryServer等...
在Windows 10环境下配置Hadoop,通常会遇到一些特有的挑战,因为Hadoop主要设计于类Unix系统,如Linux。不过,通过使用特定的工具,如winutils.exe和hadoop.dll,Windows用户也能顺利搭建Hadoop环境。下面我们将详细...
标题 "eclipse 运行hadoop工具包" 涉及到的是在Eclipse集成开发环境中运行Hadoop项目的方法。Eclipse是一款广泛使用的Java IDE,而Hadoop是Apache开源项目,主要用于大数据处理和分析。通过特定的插件,Eclipse能够...
Hadoop,作为一款免费开源的软件,已经成为大数据处理领域的核心工具,尤其在版本2.7.1中,它展现了强大的分布式系统基础架构能力。这款软件由Apache软件基金会开发,旨在解决海量数据的存储和计算问题,提供高容错...
该工具通过集成Hadoop MapReduce框架,能够在分布式环境下高效地执行数据分类任务。ICP:Data Mining Package内置了四种经典的机器学习算法: 1. **决策树**:决策树是一种直观的分类模型,它通过一系列判断来预测...
`FileSystemStatisticUpdater`是一个简单的工具类,用于记录文件系统的读写操作字节数。通过监控这些统计信息,可以更好地理解任务执行过程中的I/O性能瓶颈。 ### 总结 通过对`Task`类及其内部类和辅助类的深入...
工具类(util包)提供了各种实用工具,便于开发者使用。record包根据DDL(数据描述语言)自动生成编解码函数,目前支持C++和Java语言。HTTP模块提供了基于Jetty的HTTPServlet,使得用户可以通过浏览器访问文件系统...
依赖工具类通常指的是那些帮助Hadoop在非Unix-like系统上运行的工具,如模拟Linux环境的Cygwin、MinGW,或者专门为Windows优化的Hadoop发行版,如Apache Hadoop for Windows或Cloudera's Distribution Including ...
HBase是一个基于Hadoop的分布式、版本化、列族存储的数据库,适用于实时读写操作。Cassandra则是一个高度可扩展的分布式数据库,适合大规模数据的存储和查询。 4. **Java**: Hadoop主要是用Java编写的,因此对Java...
其次,`winutils.exe`是Hadoop在Windows上的实用工具,类似于Linux环境下的`hadoop`命令行工具。它包含了诸如管理HDFS(Hadoop分布式文件系统)和设置Hadoop环境变量等功能。在Windows环境中,`winutils.exe`主要...
标题中的"apache-hadoop-3.1.0-winutils-master.zip"是一个针对Windows用户的Hadoop工具包,它包含了运行Hadoop所需的特定于Windows的工具和配置。`winutils.exe`是这个工具包的关键组件,它是Hadoop在Windows上的一...
3. 设置安全沙箱:在Windows上,Hadoop需要一个安全沙箱(如C:\tmp\hadoop-root)来存储临时文件和数据。创建这个目录并赋予`winutils.exe`必要的权限。 4. 验证安装:启动Hadoop服务或者运行简单的Hadoop命令,如`...
- 文件系统模拟:因为Windows的文件系统与Hadoop默认的HDFS不同,所以可能需要使用像cygwin这样的工具来模拟类Unix环境,或者使用MinGW等其他解决方案。 总的来说,Hadoop2.8.3中的winutils.exe和hadoop.dll是...
在当今数据驱动的世界中,Hadoop作为开源的大数据处理框架,已经成为企业级数据存储和分析的重要工具。Hadoop2lib.tar.gz是一个专门为Hadoop开发准备的Java开发工具包,它包含了一系列核心组件和库,使得开发者能够...
Hadoop 是一种基于云计算的分布式计算框架,由 Apache 基金会在2002年发起,起源于 Apache Nutch 项目。它的核心是分布式文件系统 HDFS(Hadoop Distributed File System)和 MapReduce 计算模型。Hadoop 设计的目标...
在Windows上部署Hadoop可能与在Linux系统中有所不同,因为Hadoop最初是为类Unix系统设计的,但通过特定的配置和工具,它同样可以在Windows上运行。 Hadoop 3.1.0是Hadoop发展的一个重要版本,包含了众多改进和新...
- **Hive**:是一个建立在Hadoop之上的数据仓库工具,可以将SQL语句转换为MapReduce任务执行,使用户能够用类SQL语言查询数据,简化了Hadoop编程的复杂度。 - **MapReduce中的Shuffle和Sort分析**:MapReduce的...
总的来说,Hadoop、HBase和Java API的结合使用为大数据处理和存储提供了强大的工具,它们可以帮助开发者处理PB级别的数据,并支持实时查询。熟练掌握这些技术,对于任何想要在大数据领域深入发展的IT专业人员都是至...
对于开发者来说,深入理解Hadoop源码有助于找出乱码的根源。可以查看与字符编码相关的类,如`Text`、`Charsets`等,了解Hadoop如何处理字符编码。 解决Hadoop中文乱码问题的关键在于识别和匹配数据的正确编码,并...
在Windows环境下运行Hadoop,与在Linux系统中的配置有所不同,因为Hadoop原生是为类Unix系统设计的。然而,通过一些额外的工具,如WinUtils,我们可以使Hadoop在Windows上运行。 首先,让我们来理解一下标题中的...