`

HBase client API Guide

 
阅读更多

Version: 0.20.x

 

  • 配置

HBaseConfiguration 是每一个 hbase client 都会使用到的对象,它代表的是 HBase 配置信息。它有两种构造方式:

 

public HBaseConfiguration()

public HBaseConfiguration(final Configuration c)

 

默认的构造方式会尝试从 hbase-default.xml hbase-site.xml 中读取配置。如果 classpath 没有这两个文件,就需要你自己设置配置。

 

Configuration HBASE_CONFIG = new Configuration();

HBASE_CONFIG.set(“hbase.zookeeper.quorum”, “zkServer”);

HBASE_CONFIG.set(“hbase.zookeeper.property.clientPort”, “2181″);

HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG);

 

  • 创建表

创建表是通过 HBaseAdmin 对象来操作的。 HBaseAdmin 负责表的 META 信息处理。 HBaseAdmin 提供了 createTable 这个方法:

public void createTable(HTableDescriptor desc)

 

HTableDescriptor 代表的是表的 schema, 提供的方法中比较有用的有

setMaxFileSize ,指定最大的 region size

setMemStoreFlushSize 指定 memstore flush HDFS 上的文件大小

增加 family 通过 addFamily 方法

public void addFamily(final HColumnDescriptor family)

 

HColumnDescriptor 代表的是 column schema ,提供的方法比较常用的有

setTimeToLive: 指定最大的 TTL, 单位是 ms, 过期数据会被自动删除。

setInMemory: 指定是否放在内存中,对小表有用,可用于提高效率。默认关闭

setBloomFilter: 指定是否使用 BloomFilter, 可提高随机查询效率。默认关闭

setCompressionType: 设定数据压缩类型。默认无压缩。

setMaxVersions: 指定数据最大保存的版本个数。默认为 3

 

一个简单的例子,创建了 4 family 的表:

HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);

HTableDescriptor t = new HTableDescriptor(tableName);

t.addFamily(new HColumnDescriptor(“f1″));

t.addFamily(new HColumnDescriptor(“f2″));

t.addFamily(new HColumnDescriptor(“f3″));

t.addFamily(new HColumnDescriptor(“f4″));

hAdmin.createTable(t);

  • 删除表

删除表也是通过 HBaseAdmin 来操作,删除表之前首先要 disable 表。这是一个非常耗时的操作,所以不建议频繁删除表。

 

disableTable deleteTable 分别用来 disable delete 表。

Example:

HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig );

if (hAdmin.tableExists(tableName)) {

       hAdmin.disableTable(tableName);

       hAdmin.deleteTable(tableName);

}

 

  • 查询数据

查询分为单条随机查询和批量查询。

单条查询是通过 rowkey table 中查询某一行的数据。 HTable 提供了 get 方法来完成单条查询。

批量查询是通过制定一段 rowkey 的范围来查询。 HTable 提供了个 getScanner 方法来完成批量查询。

 

public Result get(final Get get)

public ResultScanner getScanner( final Scan scan)

 

Get 对象包含了一个 Get 查询需要的信息。它的构造方法有两种:

  public Get(byte [] row)

  public Get(byte [] row, RowLock rowLock)

Rowlock 是为了保证读写的原子性,你可以传递一个已经存在 Rowlock ,否则 HBase 会自动生成一个新的 rowlock

 

Scan 对象提供了默认构造函数,一般使用默认构造函数。

 

Get/Scan 的常用方法有:

addFamily/addColumn: 指定需要的 family 或者 column, 如果没有调用任何 addFamily 或者 Column, 会返回所有的 columns.

setMaxVersions: 指定最大的版本个数。如果不带任何参数调用 setMaxVersions, 表示取所有的版本。如果不掉用 setMaxVersions, 只会取到最新的版本。

setTimeRange: 指定最大的时间戳和最小的时间戳,只有在此范围内的 cell 才能被获取。

setTimeStamp: 指定时间戳。

setFilter: 指定 Filter 来过滤掉不需要的信息

 

Scan 特有的方法:

setStartRow: 指定开始的行。如果不调用,则从表头开始。

setStopRow: 指定结束的行(不含此行)。

setBatch: 指定最多返回的 Cell 数目。用于防止一行中有过多的数据,导致 OutofMemory 错误。

 

ResultScanner Result 的一个容器,每次调用 ResultScanner next 方法,会返回 Result.

public Result next() throws IOException;

public Result [] next(int nbRows) throws IOException;

 

Result 代表是一行的数据。常用方法有:

getRow: 返回 rowkey

raw: 返回所有的 key value 数组。

getValue: 按照 column 来获取 cell 的值

 

Example:

Scan s = new Scan();

s.setMaxVersions();

ResultScanner ss = table.getScanner(s);

 

for (Result r:ss){

    System.out .println(new String(r.getRow()));

    for (KeyValue kv:r.raw()){

       System.out .println(new String(kv.getColumn()));

    }

}

 

  • 插入数据

HTable 通过 put 方法来插入数据。

 

public void put( final Put put) throws IOException

public void put( final List<Put> puts) throws IOException

 

可以传递单个批 Put 对象或者 List put 对象来分别实现单条插入和批量插入。

 

Put 提供了 3 种构造方式:

public Put(byte [] row)

public Put(byte [] row, RowLock rowLock)

public Put(Put putToCopy)

 

Put 常用的方法有:

add: 增加一个 Cell

setTimeStamp: 指定所有 cell 默认的 timestamp, 如果一个 Cell 没有指定 timestamp, 就会用到这个值。如果没有调用, HBase 会将当前时间作为未指定 timestamp cell timestamp.

setWriteToWAL: WAL Write Ahead Log 的缩写,指的是 HBase 在插入操作前是否写 Log 。默认是打开,关掉会提高性能,但是如果系统出现故障 ( 负责插入的 Region Server 挂掉 ) ,数据可能会丢失。

 

另外 HTable 也有两个方法也会影响插入的性能

setAutoFlash: AutoFlush 指的是在每次调用 HBase Put 操作,是否提交到 HBase Server 。默认是 true, 每次会提交。如果此时是单条插入,就会有更多的 IO, 从而降低性能 .

setWriteBufferSize: Write Buffer Size AutoFlush false 的时候起作用,默认是 2MB, 也就是当插入数据超过 2MB, 就会自动提交到 Server

 

Example:

HTable table = new HTable(hbaseConfig , tableName);

table.setAutoFlush(autoFlush);

List<Put> lp = new ArrayList<Put>();

int count = 10000;

byte [] buffer = new byte [1024];

Random r = new Random();

for (int i = 1; i <= count; ++i) {

       Put p = new Put(String.format (“row%09d” ,i).getBytes());

       r.nextBytes(buffer);

       p.add(“f1″ .getBytes(), null , buffer);

       p.add(“f2″ .getBytes(), null , buffer);

       p.add(“f3″ .getBytes(), null , buffer);

       p.add(“f4″ .getBytes(), null , buffer);

       p.setWriteToWAL(wal);

       lp.add(p);

       if (i%1000==0){

           table.put(lp);

           lp.clear();

       }

    }

 

  • 删除数据

HTable 通过 delete 方法来删除数据。

  public void delete(final Delete delete)

 

Delete 构造方法有:

public Delete(byte [] row)

public Delete(byte [] row, long timestamp, RowLock rowLock)

public Delete(final Delete d)

 

Delete 常用方法有

deleteFamily/deleteColumns: 指定要删除的 family 或者 column 的数据。如果不调用任何这样的方法,将会删除整行。

 

注意:如果某个 Cell timestamp 高于当前时间,这个 Cell 将不会被删除,仍然可以查出来。

 

Example:

HTable table = new HTable(hbaseConfig, “mytest” );

Delete d = new Delete(“row1″ .getBytes());

table.delete(d);

 

 

  • 切分表

HBaseAdmin 提供 split 方法来将 table 进行 split.

public void split(final String tableNameOrRegionName)

 

如果提供的 tableName ,那么会将 table 所有 region 进行 split ; 如果提供的 region Name ,那么只会 split 这个 region.

 

由于 split 是一个异步操作,我们并不能确切的控制 region 的个数。

 

Example:

public void split(String tableName,int number,int timeout) throws Exception {

    Configuration HBASE_CONFIG = new Configuration();

    HBASE_CONFIG.set(“hbase.zookeeper.quorum”, GlobalConf.ZOOKEEPER_QUORUM);

    HBASE_CONFIG.set(“hbase.zookeeper.property.clientPort”, GlobalConf.ZOOKEEPER_PORT);

    HBaseConfiguration cfg = new HBaseConfiguration(HBASE_CONFIG);

    HBaseAdmin hAdmin = new HBaseAdmin(cfg);

    HTable hTable = new HTable(cfg,tableName);

    int oldsize = 0;

    t =  System.currentTimeMillis();

    while(true){

       int size = hTable.getRegionsInfo().size();

       logger.info(“the region number=”+size);

       if(size>=number ) break;

       if(size!=oldsize){

           hAdmin.split(hTable.getTableName());

           oldsize = size;

       }

       else if(System.currentTimeMillis()-t>timeout){

           break;

       }

       Thread.sleep(1000*10);

    }

}

This entry was posted in CloudingComputing , HBase Research and tagged HBase . Bookmark the permalink .


原文:http://www.spnguru.com/?p=191

分享到:
评论

相关推荐

    HBase_Client_Api_Guide

    ### HBase客户端API指南知识点详解 #### 一、HBase数据读写流程 **1.1 创建表** 在HBase中,创建表是一项关键任务,通常由`Master`节点完成。这一过程涉及到以下步骤: - **获取Master地址**: 客户端首先需要从...

    hbase-client-1.4.3-API文档-中文版.zip

    赠送原API文档:hbase-client-1.4.3-javadoc.jar; 赠送源代码:hbase-client-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.4.3.pom; 包含翻译后的API文档:hbase-client-1.4.3-javadoc-API文档-...

    [原创]HbaseClient

    《HbaseClient详解》 HbaseClient是Apache HBase的核心组件之一,它是客户端与HBase分布式数据库进行交互的桥梁。本文将深入探讨HbaseClient的工作原理、主要功能以及使用技巧,帮助读者更好地理解和掌握HBase的...

    hbase-client-1.1.2-API文档-中文版.zip

    赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.1.2.pom; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-...

    hbase-client-1.2.12-API文档-中文版.zip

    赠送原API文档:hbase-client-1.2.12-javadoc.jar; 赠送源代码:hbase-client-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.2.12.pom; 包含翻译后的API文档:hbase-client-1.2.12-javadoc-API文档...

    基于HBase的client API设计的一款SQL查询器,专为简化HBase原生API的使用而打造

    HydraQL`是基于HBase的client API设计的一款SQL查询器,专为简化HBase原生API的使用而打造。 `HydraQL`旨在提供一种更直观、易用的方式来查询和操作HBase数据库。通过使用SQL语法或更精简的API,用户可以通过简单的...

    HBase Java API类介绍

    ### HBase Java API类介绍 #### 一、概述 HBase是一个分布式的、面向列的开源数据库,基于Google的Bigtable论文实现。它适合于非结构化数据存储,并且能够实时处理PB级别的数据。HBase提供了Java API供开发者使用...

    HBase The Definitive Guide, 2nd Edition

    HBase The Definitive Guide, 2nd Edition HBase The Definitive Guide, 2nd Edition

    hbase的java client实例

    本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...

    阿里巴巴开源的Hbase Client node-hbase-client.zip

    当前状态:完全通过 HBase 0.94 和 0.94.16Java hbase-client支持 HBase 服务器的版本[√] 0.94.x[√] 0.94.0[√] 0.94.160.95.x0.96.x安装$ npm install hbase-client使用 CRUD:通过 zookeeper 创建 HBase ...

    hbase资料api

    HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...

    hbase-client-1.1.2-API文档-中英对照版.zip

    赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId...

    Hbase权威指南(HBase: The Definitive Guide)

    - **存储API**(Storage API):HBase提供了一套用于数据存储和访问的API,使得开发人员能够方便地与之交互。 - **实现细节**:HBase的核心组件包括Master、RegionServer等,其中Master负责管理和监控整个集群的...

    hbase java api 访问 增加修改删除(一)

    在本文中,我们将深入探讨如何使用HBase的Java API进行数据的增加、修改和删除操作。HBase是一个基于Google Bigtable设计的开源分布式数据库,它属于Apache Hadoop生态系统的一部分,适用于处理大规模数据存储。通过...

    HBase 1.2.0 Javadoc API CHM

    自行制作的HBase 1.2.0 Javadoc API CHM版本。内容抽取自官方站点网页

    hbase java api 所需最精简 jar

    - **hbase-client.jar**:包含了HBase的客户端API,是我们进行Java开发的主要依赖。 - **hbase-common.jar**:包含HBase通用的类和工具,如数据模型、配置等。 - **hbase-server.jar**:虽然不是所有场景都需要,...

    Hbase Java API

    HBaseConfiguration 可以设置 ZooKeeper 的配置信息,如 hbase.zookeeper.quorum 和 hbase.zookeeper.property.clientPort。 创建表是通过 HBaseAdmin 对象来操作的。HBaseAdmin 负责表的 META 信息处理,提供了 ...

    hbase-client-2.1.0-cdh6.3.0.jar

    hbase-client-2.1.0-cdh6.3.0.jar

    hbase 1.0 API 修改说明

    hbase 1.0 对api做了较大改动,该文件对此做了详细说明

Global site tag (gtag.js) - Google Analytics