什么是最好的HBase客户端API for java

时间:2011-10-12 11:36:11

标签: java api hadoop hbase

我正在开发一个项目,我必须使用hbase。项目是基于java的。我需要知道什么是最好的hbase客户端api for java。

5 个答案:

答案 0 :(得分:7)

HBase在核心库中有自己的java客户端。它几乎涵盖了所有内容。 (也有连接)。如果您需要异步客户端您可以从stumbleupon检查asyncbase,这是一个可靠的客户端。但它的过滤器支持是有限的。(虽然它有基本的过滤器,但它们像魅力一样工作)。如果您使用的是java,我建议不要使用via rest。

答案 1 :(得分:6)

Kundera是推荐使用的客户。 作者正在努力工作。

答案 2 :(得分:2)

Kundera是Hbase以及Cassandra和MongoDB的对象数据存储映射工具。

一些突出的特点是:

  • 符合JPA 2.0。
  • 使用lucene进行列/列族索引。
  • 支持实体关系和JPA查询。
  • 跨数据存储持久性

它在这里举办: https://github.com/impetus-opensource/Kundera

答案 3 :(得分:1)

playOrm是另一个java工具,您可以在其中注释您的实体并立即启动并运行。由于nosql太不同,故并不是JPA兼容的。它有像findAll()这样的方法,因为你想在nosql中并行读取。

playOrm确实添加了JQL,但是对于nosql有一个转折....作为扭曲的一个例子,你可以将一万亿行划分为10亿个分区,并将JQL放入任何分区并与其他表连接。如果你来自JPA世界,它会更容易过渡到noSql。

答案 4 :(得分:1)

HBaseExecutor,HBase Java客户端的简单包装器。与原生HBase Java驱动程序相比,HBaseExecutor具有以下功能:

  • 使用entity / String为操作(CRUD)提供一致/集成/简明API。
  • 用于提高可操作性的字节参数/操作的包装。

以下是HBaseExecutor的简单示例

Account account = createAccount();

// Insert is supported by Model/entity
hbaseExecutor.put("account", toAnyPut(account));

// Get is supported by Model/entity
Account dbAccount = hbaseExecutor.get(Account.class, "account", AnyGet.valueOf(account.getId()));
N.println(dbAccount);

// Delete the inserted account
hbaseExecutor.delete("account", AnyDelete.valueOf(account.getId()));

与HBase Java客户端的示例比较:

Account account = createAccount();

// Insert an account into HBase store
Put put = new Put(Bytes.toBytes(account.getId()));
put.addColumn(Bytes.toBytes("name"), Bytes.toBytes("firstName"), Bytes.toBytes(account.getName().firstName().value()));
put.addColumn(Bytes.toBytes("name"), Bytes.toBytes("lastName"), Bytes.toBytes(account.getName().lastName().value()));
put.addColumn(Bytes.toBytes("contact"), Bytes.toBytes("city"), Bytes.toBytes(account.getContact().city().value()));
put.addColumn(Bytes.toBytes("contact"), Bytes.toBytes("state"), Bytes.toBytes(account.getContact().state().value()));
put.addColumn(Bytes.toBytes("createTime"), Bytes.toBytes(""), Bytes.toBytes(N.stringOf(account.createTime().value())));

hbaseExecutor.put("account", put);

// Get the inserted account from HBase store
Result result = hbaseExecutor.get("account", new Get(Bytes.toBytes(account.getId())));
CellScanner cellScanner = result.cellScanner();
while (cellScanner.advance()) {
    final Cell cell = cellScanner.current();
    N.println(Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()));
    N.println(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()));
    N.println(Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));
    // ... a lot of work to do
}

// Delete the inserted account from HBase store.
hbaseExecutor.delete("account", new Delete(Bytes.toBytes(account.getId())));

(声明:我是HBaseExecutor的开发者)