`
thomas0988
  • 浏览: 483993 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

Htable数据的访问问题

 
阅读更多

做了几天工程,对HBase中的表操作熟悉了一下。下面总结一下常用的表操作和容易出错的几个方面。当然主要来源于大牛们的文章。我在前人的基础上稍作解释。

 

 

1.连接HBase中的表testtable,用户名:root,密码:root

 

public void ConnectHBaseTable()
 {
  Configuration conf = new Configuration();       
        conf.set("hadoop.job.ugi", "root,root");     
  HBaseConfiguration config = new HBaseConfiguration();
  try
  {
   table = new HTable(config, "testtable");
  }catch(Exception e){e.printStackTrace();}
 }

 

2.根据行名name获得一行数据,存入Result.注意HBase中的表数据是字节存储的。

   下面的例子表示获得行名为name的行的famA列族col1列的数据。

      String rowId = "name";
     
Get get = new Get(rowId);
     
Result result = hTable.get(get);
     
byte[] value = result.getValue(famA, col1);
     
System.out.println(Bytes.toString(value));

3.向表中存数据

      下面的例子表示写入一行。行名为abcd,famA列族col1列的数据为"hello world!"。

      byte[] rowId = Bytes.toBytes("abcd");
     
byte[] famA = Bytes.toBytes("famA");
     
byte[] col1 = Bytes.toBytes("col1");
     
Put put = new Put(rowId).
         add
(famA, col1, Bytes.toBytes("hello world!"));
      hTable
.put(put);
     

4.扫描的用法(scan):便于获得自己需要的数据,相当于SQL查询。

      byte[] famA = Bytes.toBytes("famA");
     
byte[] col1 = Bytes.toBytes("col1");  

     
HTable hTable = new HTable("test");  

      //表示要查询的行名是从a开始,到z结束。
     
Scan scan = new Scan(Bytes.toBytes("a"), Bytes.toBytes("z"));
     

      //用scan.setStartRow(Bytes.toBytes(""));设置起始行

      //用scan.setStopRow(Bytes.toBytes(""));设置终止行

 

      //表示查询famA族col1列

      scan.addColumn(famA, col1);  

      //注意,下面是filter的写法。相当于SQL的where子句

      //表示famA族col1列的数据等于"hello world!"
     
SingleColumnValueFilter singleColumnValueFilterA = new SingleColumnValueFilter(
           famA
, col1, CompareOp.EQUAL, Bytes.toBytes("hello world!"));
      singleColumnValueFilterA
.setFilterIfMissing(true);  

      //表示famA族col1列的数据等于"hello hbase!"
     
SingleColumnValueFilter singleColumnValueFilterB = new SingleColumnValueFilter(
           famA
, col1, CompareOp.EQUAL, Bytes.toBytes("hello hbase!"));
      singleColumnValueFilterB
.setFilterIfMissing(true);  
      

      //表示famA族col1列的数据是两者中的一个
     
FilterList filter = new FilterList(Operator.MUST_PASS_ONE, Arrays
           
.asList((Filter) singleColumnValueFilterA,
                singleColumnValueFilterB
));  

      scan
.setFilter(filter);  

     
ResultScanner scanner = hTable.getScanner(scan);  
      //遍历每个数据
     
for (Result result : scanner) {
         
System.out.println(Bytes.toString(result.getValue(famA, col1)));
     
}

5.上面的代码容易出错的地方在于,需要导入HBase的类所在的包。导入时需要选择包,由于类可能出现在HBase的各个子包中,所以要选择好,下面列出常用的包。尽量用HBase的包

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

 

6.下面列出HBase常用的操作

(1)时间戳到时间的转换.单一的时间戳无法给出直观的解释。

public String GetTimeByStamp(String timestamp)
 {

  long datatime= Long.parseLong(timestamp);
     Date date=new Date(datatime);  
     SimpleDateFormat   format=new   SimpleDateFormat("yyyy-MM-dd HH:MM:ss");  
     String timeresult=format.format(date);
     System.out.println("Time : "+timeresult);
     return timeresult;
 }

(2)时间到时间戳的转换。注意时间是字符串格式。字符串与时间的相互转换,此不赘述

public String GetStampByTime(String time)
 {
  String Stamp="";
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  Date date;
  try
  {
   date=sdf.parse(time);
   Stamp=date.getTime()+"000";
   System.out.println(Stamp);
  }catch(Exception e){e.printStackTrace();}
  return Stamp;
 }

 

 

上面就是我的一点心得。以后碰到什么问题,再来解决。

 

参考文献:http://www.nearinfinity.com/blogs/aaron_mccurry/using_hbase-dsl.html

分享到:
评论

相关推荐

    藏经阁-HBase多语言访问.pdf

    HBase多语言访问 HBase是一种基于分布式的、面向列的NoSQL数据库,它提供了Java API、Thrift API、REST API等多种访问方式,以满足不同语言和平台的需求。本文将详细介绍HBase的多语言访问机制,包括Thrift API、...

    hbase访问方式之javaapi共3页.pdf.zip

    通过HTable类,可以向HBase表中插入数据。首先,创建一个HTable实例,然后使用Put对象来指定要插入的行键和列值: ```java HTable table = new HTable(conf, "myTable"); Put put = new Put(Bytes.toBytes("rowKey")...

    Hbase性能测试详细设计文档及用例.pdf

    设计时要考虑数据访问模式,利用字典序存储特性,将关联数据放在一起,并考虑时间戳作为部分key,以便新数据能快速被访问。此外,多HTable并发写能提高写入吞吐量,适合大数据量写入场景。 HTable参数的设置也是...

    HBASE使用注意事项

    - **RowKey的重要性**:良好的RowKey设计可以显著提升数据访问效率。 - **灵活性**:支持存储任意二进制数据,无需预先定义数据类型。 - **列族统一性**:同一列族内的数据通常遵循相同的访问模式。 - **索引机制**...

    HBASE性能调优方法1

    Rowkey设计应考虑到查询模式和数据访问频率,将常一起读取的数据放在一起,并将热点数据设计在Rowkey的前面,以利用HBase的Bloom Filter和Memstore缓存提高查询效率。 综上所述,HBase性能调优涉及多个层面,需要...

    HBase详细讲解

    设计Rowkey时需要考虑到数据访问模式和访问频率,以及如何利用其排序特性实现高效的范围查询。 HBase作为列式存储数据库,其面向列的特性带来了极高的灵活性和可扩展性。HBase适合于需要快速读写大量数据的场景,...

    java访问Hbase数据库Demo

    对于插入数据,我们需要创建一个`Put`对象并设置行键和列族的值,然后将其添加到`HTable`实例中: ```java Table table = connection.getTable(TableName.valueOf("MyTable")); Put put = new Put(Bytes.toBytes(...

    某大数据公司内部Hbase性能测试详细设计文档及用例

    如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE – timestamp作为row key,这样能保证新写入的数据在读取时可以被快速命中。...

    HBase的详细简介

    HBase通常被用在需要快速读写和随机访问大量数据的应用场景中,例如日志分析、数据仓库、大数据处理等。由于HBase基于列的存储方式,它在处理某些特定的数据模型时比传统关系型数据库具有更好的性能。

    hbase0.94java源代码

    HBase是Apache Hadoop生态系统中的一个分布式、高性能、版本化、列族式数据库,它主要设计用于处理海量数据...同时,了解源代码有助于开发者更好地利用HBase特性,优化数据访问性能,以及在遇到问题时进行排查和解决。

    nosql-实验三HBase管理工具和客户端.docx

    例如,用户可以使用 HConnection 对象来连接 HBase 数据库,然后使用 HTable 对象来创建表、添加数据、删除数据等。 三、 数据操作 在 HBase 中,数据操作主要包括创建表、添加数据、删除数据、获取数据等。 1. ...

    大数据hbase.zip

    其设计灵感来源于Google的Bigtable,但HBase更注重于提供高并发和低延迟的数据访问。HBase的数据模型是基于行的,每个表由行和列族组成,列族下又包含多个列,这样的设计使得数据的存储和查询更加灵活。 在Java API...

    hadoop和hbase集成所需jar包

    在大数据处理领域,Hadoop和HBase是两个重要的开源组件,它们分别扮演着分布式存储和实时数据访问的角色。Hadoop提供了强大的数据处理能力,而HBase则是一个基于Hadoop的分布式列式数据库,适合处理大规模的半结构化...

    Hadoop平台技术 模块5 分布式数据库Hbase-单元设计.docx

    4. 实时读/写:提供了低延迟的数据访问。 5. 索引和查询:支持基于行键的快速查找,同时可以通过时间戳进行版本控制。 HBase的体系结构主要包括Region Server、Master Server、ZooKeeper和HDFS四个组件。Region ...

    HBase实例演习

    - **实时读写能力**:提供低延迟的数据访问能力,适合实时应用的需求。 #### 二、HBase基本操作详解 ##### 1. 表的管理 HBase中的表是基本的数据存储单位,通过`HBaseAdmin`类可以进行表的创建、删除、显示以及...

    HBase表和RDB表的转化的Java源码资源

    HBase的数据模型是基于行、列族和时间戳的,适合于大数据的快速随机访问。 另一方面,关系型数据库如MySQL、Oracle等,遵循ACID(原子性、一致性、隔离性和持久性)原则,提供结构化的表格数据存储,以及SQL语言...

    HBase源码分析

    这里涉及到HBase的Region分裂和合并机制,以确保数据分布的均匀性和高效访问。Region分裂是自动进行的,当一个Region的大小超过设定阈值时,Region Server会将该Region分裂成两个新的Region,然后更新Meta表记录新...

    Hadoop+HBase+Java API

    **HBase** 是构建在Hadoop之上的非关系型数据库(NoSQL),设计用于大规模、实时的数据访问。它是一个列族数据库,支持随机读写,适用于大数据分析场景。HBase利用Hadoop的HDFS作为底层存储,通过Zookeeper进行协调...

Global site tag (gtag.js) - Google Analytics