`
zy19982004
  • 浏览: 662227 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252056
社区版块
存档分类
最新评论

Hadoop学习三十七:HBase比较负数

 
阅读更多

一.HBase存储

     HBase存储的都是字节码。我们也知道,计算机系统里,数值一律采用补码来表示和存储(http://zy19982004.iteye.com/blog/1706138)。

     那么Integer(-1)在HBase里将被存储为\xFF\xFF\xFF\xFF,Integer(1)在Hbase里将被存储为\x00\x00\x00\x01。

     再来看看在比较大小时的PureJavaComparer.compareTo,会将字节码,通过&0xff,转换成一个无符号位的正数。此时将出现\xFF\xFF\xFF\xFF & 0xff = \xFF = 255,x00\x00\x00\x01 & 0xff = \x01 = 1,所以-1>1。

     最终,HBase认为数值类从小到大为:0 1 +∞ -∞ -1

 

二.怎么解决

      至少有三种思路

  1. 细分四种查询条件,过滤掉多查的,加上少查的。如查询>某一正数时,要加上<+∞这个条件来过滤掉[-∞ -1]。显然这种方法管用但过于繁琐,新增了许多过滤器对regionserver也是一种压力。
  2. 存储时将负数转成正数,将正数转成更大的正数,查询时根据相同规则转换查询条件,查询出来的结果再反转回去。这样存储的结果就只能对查询有用了,其它系统使用你这些HBase数据时,它并不一定知道你的存储规则。
  3. 自己写一个数字类比较器NumberComparator,子类DoubleComparator,IntegerComparator等里重写compareTo方法。这个也是我采用的方式。

 

三.关于比较器 等于

      在容器里面,会涉及到equals,compareTo等方法来比较两个数的等于关系和大小关系。

      容器A里已经插入1 2 3三个数据,要插入4的时候,会把4当做this,与1 2 3分别equals或者compareTo,即4.compareTo(1)。所以我们重写equals,compareTo等方法时,也是this 4在前,参数1在后。如果你想得到相反的顺序,就把参数放前,this放后。

package org.apache.hadoop.hbase.filter;

import org.apache.hadoop.hbase.util.Bytes;


public class DoubleComparator extends NumberComparator {

	public DoubleComparator() {
	}

	public DoubleComparator(final byte[] value) {
		super(value);
	}
	
	@Override
	public int compareTo(byte[] value, int offset, int length) {
		double d1 = Bytes.toDouble(super.value);
		double d2 = Bytes.toDouble(value, offset);
		if (d1 < d2)
            return -1;		 // Neither val is NaN, thisVal is smaller
        if (d1 > d2)
            return 1;		 // Neither val is NaN, thisVal is larger

        long thisBits = Double.doubleToLongBits(d1);
        long anotherBits = Double.doubleToLongBits(d2);

        return (thisBits == anotherBits ?  0 : // Values are equal
                (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
                 1));          
	}


}

 

 

1
1
分享到:
评论

相关推荐

    Hadoop学习四十二:HBase 过滤器

    在Hadoop生态系统中,HBase是一个分布式的、版本化的、基于列族的NoSQL数据库,它提供了高吞吐量的数据访问。本节我们将深入探讨HBase中的过滤器机制,这是优化数据查询性能的关键技术。 HBase过滤器允许我们在读取...

    HBase学习利器:HBase实战

    ### HBase学习利器:HBase实战 #### 一、HBase简介与背景 HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于...

    hbase-0.90.5.tar.gz与hadoop0.20.2版本匹配

    3. **强一致性**:HBase使用主键(Row Key)确保数据的一致性,并通过Zookeeper实现分布式协调,保证数据的准确性和可用性。 4. **可扩展性**:HBase是水平扩展的,可以通过添加更多的服务器来增加存储和处理能力,...

    hadoop_hadoop-2.7.2-hbase-jar.rar linux下包

    4. **HBase**:HBase是一个NoSQL数据库,基于Google的Bigtable设计,运行在Hadoop之上。它提供实时读写操作,适合半结构化数据的存储。HBase支持列族存储,具备时间戳特性,可实现高效的数据查询和分析。 5. **...

    hbase-hadoop2-compat-1.2.12-API文档-中文版.zip

    赠送jar包:hbase-hadoop2-compat-1.2.12.jar; 赠送原API文档:hbase-hadoop2-compat-1.2.12-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...

    Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境搭建

    Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境搭建 Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境搭建是大数据处理和存储的重要组件,本文档将指导用户从零开始搭建一个完整的Hadoop2.2+Zookeeper3.4.5+HBase0.96集群...

    分布式存储系统hadoop:hbase安装

    分布式存储系统hadoop:hbase安装经验,非常不错的hadoop之hbase,入门环境搭建。

    hbase-hadoop-compat-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    hadoop,hive,hbase学习资料

    【标题】:“hadoop,hive,hbase学习资料”是一份综合性的学习资源,涵盖了大数据处理领域中的三个核心组件——Hadoop、Hive和Hbase。这些工具在大数据处理和分析中发挥着至关重要的作用。 【描述】:描述指出这份...

    hadoop-2.7.2-hbase-jar.tar.gz

    《Hadoop 2.7.2与HBase的集成——深入理解hadoop-2.7.2-hbase-jar.tar.gz》 Hadoop是Apache软件基金会的一个开源项目,它为大规模数据处理提供了一个分布式计算框架。Hadoop的核心包括HDFS(Hadoop Distributed ...

    hbase-hadoop-compat-1.1.3-API文档-中英对照版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    hbase-hadoop2-compat-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-hadoop2-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop2-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第11期_HBase简介及安装_V1.0 共21页.pdf

    【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第11期_HBase简介及安装_V1.0 共21页.pdf】这篇文档主要介绍了HBase这一大数据处理的重要组件,以及其在Hadoop生态系统中的角色。HBase是一个基于列族的...

    论文:HBase: A NoSQL database

    4. **大数据分析**:HBase可以与Hadoop MapReduce等工具结合使用,进行复杂的数据分析任务。 5. **文档存储**:对于需要存储大量文档的应用场景,如电子病历系统等。 #### 结论 HBase作为一种强大的NoSQL数据库,...

    zookeeper+hadoop+hbase+hive(集成hbase)安装部署教程(超详细).docx

    jdk1.8.0_131、apache-zookeeper-3.8.0、hadoop-3.3.2、hbase-2.4.12 mysql5.7.38、mysql jdbc驱动mysql-connector-java-8.0.8-dmr-bin.jar、 apache-hive-3.1.3 2.本文软件均安装在自建的目录/export/server/下 ...

    hbase版本1.2.6,Hadoop版本2.7.1,eclipse链接hbase所需jar包

    Hadoop的版本选择必须与HBase兼容,因为HBase依赖于Hadoop的HDFS(Hadoop Distributed File System)和MapReduce组件。 要将Eclipse与HBase连接起来,你需要首先确保Eclipse中安装了Hadoop和HBase的开发工具,例如...

    3.基于hadoop集群搭建hbase

    - **高效的数据访问**:HBase通过提供一个表格模型来组织数据,使得数据能够被高效地检索和访问。 - **可扩展性**:HBase是分布式架构的一部分,可以轻松地水平扩展到成千上万台服务器。 - **高可用性**:HBase支持...

    hbase-hadoop2-compat-1.1.3-API文档-中英对照版.zip

    赠送jar包:hbase-hadoop2-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop2-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop2-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop2-compat-...

    HBase安装与配置资源下载:hbase-1.2.6

    1. **分布式存储**:HBase将数据分布在多台服务器上,通过Hadoop的HDFS进行底层存储,实现数据的横向扩展,能够处理PB级别的数据。 2. **列式存储**:与传统的关系型数据库不同,HBase以列族(Column Family)的...

    hadoop2.7.1+zk3.5+hbase2.1+phoenix 安装部署环境打包

    3. 安装Hadoop:解压hadoop-2.7.1,配置HADOOP_HOME环境变量,并编辑配置文件如`core-site.xml`、`hdfs-site.xml`和`yarn-site.xml`,设置HDFS和YARN的相关参数。 4. 安装ZooKeeper:解压zookeeper,配置ZOOKEEPER_...

Global site tag (gtag.js) - Google Analytics