Hbase客户端API基础小结笔记(未完)

简介: 客户端API:基础   HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无效数据之类的操作。

客户端API:基础

  HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无效数据之类的操作。

  通常在正常负载下和常规操作下,客户端读操作不会受到其他修改数据的客户端影响,因为它们之间的冲突可以忽略不计。但是,当允许客户端需要同时修改同一行数据时就会产生问题。所以,用户应当尽量使用批量处理(batch)更新来减少单独操作同一行数据的次数。 (如果是实时系统,则需要加上synchronized关键字)

  创建HTable实例是有代价的。每个实例都需要扫描.META表,以检查该表是否存在、是否可用,此外还要执行一些其他操作,这些检查和操作导致实例调用非常耗时,因此推荐用户只创建一次HTable实例(就好比在Hadoop的setup中创建一次实例,供后续mapreduce调用,最终在cleanup中close)

向HBase插入数据的example:

package HBaseTest;

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.util.Bytes;

import java.io.IOException;

/**
 * Created by root on 5/27/16.
 */
public class PutExample {
    public static void main(String[] args){
       //加载配置文件
        Configuration conf = HBaseConfiguration.create();

        HTable table = null;
        try {
           //创建HTable对象
            table = new HTable(conf,"practice");
            //设置rowkey
            Put put = new Put(Bytes.toBytes("rowKeyNum1"));

            //设置要写入的列族,列与value           
       put.add(Bytes.toBytes("f1"),Bytes.toBytes("cardNo"),Bytes.toBytes("123456789"));
table.put(put); //获取rowkey Get result = new Get("rowKeyNum1".getBytes()); //将获取到的值放入Hbase的Result中 Result rs = table.get(result); //获取指定列族的列的value String cardNo = Bytes.toString(rs.getValue("f1".getBytes(),"cardNo".getBytes())); System.out.println("---cardNo---" + cardNo); } catch (IOException e) { e.printStackTrace(); } } }

  数据和坐标都是以Java的byte[]形式存储的,即以字节数组的形式存储的。使用这种底层存储类型的目的是 ,允许存储任意类型的数据,并且可以有效地只存储所需的字节,这保证了最少的内部数据结构开销。另一个原因是,每一个字节数组都有一个offerset参数和一个length参数,它们允许用户提交一个已存在的字节数组,并进行效率很高的字节级别的操作

客户端的写缓冲区

  每一个put操作实际上都是一个RPC操作,它将客户端数据传送到服务器然后返回。这只适合小数据量的操作,如果有个应用程序需要每秒存储上千行数据到HBase表中,这样的处理就不太合适了。(一般情况下,在LAN网络中大概要花1毫秒的时间,这意味着1秒钟的时间内只能完成1000次RPC往返响应。)

  HBase的API配备了一个客户端的写缓冲区(write buffer),缓冲区负责收集put操作,然后调用RPC操作一次性将put送往服务器。(默认情况下,客户端缓冲区是禁用的,可以通过将自动刷写autoflush设置为false来激活缓冲区)

 HTable table = new HTable(conf,"practice");
 table.setAutoFlush(false);

  客户端写缓冲区的大小默认是2MB,如果需要存储较大的数据,为了避免每次创建实例都要修改缓冲区大小,可以在hbase-site.xml配置文件中添加一个较大的预设值。

<property>
        <name>hbase.client.write.buffer</name>
        <value>20971520</value>
</property>

  这会将缓冲区大小增肌到20MB,大小可以根据数据量等参考设置。

  强制刷写数据可以调用table.flushCommits();直接产生一个RPC请求。

  注意:

  客户端缓冲区是一个简单的保存在客户端进程内存中的列表,用户需要注意不能在运行时终止程序,如果发生这种情况,哪些尚未被刷写的数据就会丢失,服务器将无法收到数据,因此这些数据没有任何副本可以用来做数据恢复。

  另外注意,一个更大的缓冲区需要客户端和服务器端消耗更多的内存,因此服务器端也需要先将数据写入到服务器端消耗更多的内存,因为服务器端也需要先将数据写入到服务器的写缓冲区中,然后再处理它,估算服务器端内存的占用可使用hbase.client.write.buffer 乘以 hbase.regionserver.handle.count 乘以region服务器的数量。

  如果用户只存储大单元格,客户端缓冲区的作用就不大了,因为传输时间占用了大部分的请求时间。

 参考:《HBase权威指南》

相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
28天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
21 3
|
4月前
|
JSON API 数据格式
实时获取小红书笔记详情的API使用与解析
小红书是一个以分享消费经验、生活方式为主的社交平台,拥有大量的用户和内容。为了更好地了解用户在小红书上的行为和内容,许多开发者选择使用小红书开放平台提供的API接口。本文将介绍如何通过小红书笔记详情API实现实时数据获取,并给出相应的代码示例。
|
4月前
|
存储 缓存 网络协议
dpdk课程学习之练习笔记二(arp, udp协议api测试)
dpdk课程学习之练习笔记二(arp, udp协议api测试)
67 0
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
8 3
|
6天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
24 11
|
1月前
|
数据采集 API 开发者
调用API接口获取小红书笔记详情数据(小红书怎么推广)
小红书平台对于其API的使用有严格的规定和限制,并且并非所有的功能和数据都通过公开API提供。关于获取小红书笔记详情的API,以下是一些建议和指导:
|
2月前
|
数据采集 安全 API
如何实时获取小红书笔记详情的API使用与解析
小红书是一个以分享消费经验、生活方式为主的社交平台,拥有大量的用户和内容。为了更好地了解用户在小红书上的行为和内容,许多开发者选择使用小红书开放平台提供的API接口。本文将介绍如何通过小红书笔记详情API实现实时数据获取,并给出相应的代码示例。
|
3月前
|
Web App开发 Rust JavaScript
Rust 笔记:WebAssembly 的 JavaScript API
Rust 笔记:WebAssembly 的 JavaScript API
93 0
|
3月前
|
JSON Java API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
88 0
|
4月前
|
数据挖掘 API
解锁新视角:小红书笔记详情API的隐藏价值探索
在数字化时代,小红书笔记详情API为我们提供了一个全新的视角,帮助我们深入挖掘隐藏的价值。通过这个强大的工具,我们可以解锁新视角,发现潜在的市场机会和用户需求,从而创造更大的商业价值。