Hbase总结04_客户端

管理功能(DDL)

通信方式

Hbase客户端大部分类都是有一个无参的构造函数,都是实现了Hadoop Writable接口,包含两个需要实现的方法:

  • void write(DataOutput out)
  • void readFields(Datainput in)

框架通过调用write把对象序列化,便于在网络上传送,接收端创建无参实例,调用readFields将数据反序列化,并将相应字段赋值给无参实例。

扩展Hbase基础实现需要满足下列条件:

  • 在RPC两端都必须可用
  • 实现writable接口
  • 拥有无参数的构造函数

表属性

  • 表明: 不能用 . 或 - 开头
  • 列簇:HTableDescriptor 虽然名字叫 HTable但是其实是针对列簇的
  • 文件大小:用来指定region大小,超过则分裂
  • 只读:设置表只读,不能修改
  • memstore:设置预写缓冲区大小
  • 延迟刷写:设置WAL日志延迟刷写,可以提高写效率,但存在丢失数据风险

列簇

  • 名字:不能以 . 开头,也不能包含 : /等特殊字符
  • 最大版本数:设置该列簇数据最多保存几个版本数据
  • 压缩:HBase支持插件式的压缩算法,这个功能允许用户选择合适的压缩算法
  • 块缓存:将查询结果缓存在内存中,默认为64KB,用于减少IO,提高查询效率,拥有独立的保存策略
  • 生存期TTL:数据存货时间
  • in-memory:默认为false。如果为true,则块数据会以较高优先级被加载到内存中 ,除非堆压力大,这个时候才会强制从内存卸载这部分数据这个参数非常适合数据量小的列族,例如,保存登录账号和密码的用户表
  • 布隆过滤器:是HBase中的高级功能,能够减少特定访问模式下的查询时间,但是由于这种模式增加了内存和存储的负担,这个模式默认为关闭。
  • 复制范围:复制(replication)提供了跨集群的同步的功能。replication scope默认为0,意味着是关闭的。setScope(1)可以开启该功能
     

HBaseAdmin

  • HBaseAdmin实例的生命周期不宜太长。
  • getMaster() 可以获取HMasterInterface 接口的RPC代理实例。除非用户确定自身的调用时安全的,否则不要显式调用 getMaster。
  • 另一种高级建表的方式是 伴随建表操作进行预分区
  • createTableAsync 是异步建表命令
  • 关于异步命令:其实大多数命令都是异步的,同步的命令也只是对异步模式的封装,增加了不断检查这个任务是否已经完成的循环操作,例如 createTable 方法其实包装了 createTableAsync
  • 可以实现表的增删改差
  • 可以查询当前集群的状态信息

集群管理

  • checkHBaseAvailable(conf) 可以验证客户端能否与远程HBase集群进行通信
  • flush(tableNameOrRegionName) 可以在memstore    达到 memstore flush size 之前显示的让数据flush到磁盘上
  • compact   让表或者region合并
  • majorCompact  会迭代这张表的所有region,并顺序调用合并操作
  • split 可以提供 splitPoint 进行制定键的拆分
  • assign  和 unassign 可以控制region的上线和下线
  • move 可以移动region
  • balanceSwitch 可以控制是否开启负载均衡算法
  • balancer 主动运行负载均衡
  • shutdown stopMaster stopRegionServer 可以关闭集群,master,某个region serve
     

DDL

Hbase客户端操作数据主要通过HTable类实现,该类的大体功能包括:

  • 所有修改都保证了行级别的原子性: 要么读到最新的修改,要么等待系统允许写入改行修改
  • 尽量使用批量batch来进行同样类型的数据操作
  • 创建HTable实例代价较高,推荐用户只创建一次HTable实例,而且是每个线程创建一个
  • 如果用户需要多个HTable实例,建议使用HTablePool类

CRUD

put

单行put

  • 还可以通过 KeyValue 来添加Put: Put add(KeyValue kv)
  • getFamilyMap() 可以遍历Put实例中每一个可用的KeyValue实例
  • 用 has(family, qualifier) 来检查是否存在特定的单元格,而不需要遍历整个集合
  • Put.getRow() 可以获取rowkey
  • Put.heapSize() 可以计算当前Put实例所需的堆大小,既包含其中的数据,也包含内部数据结构所需的空间
     

KeyValue类

  • KeyValue和它的比较器设置成客户端内部使用
  • KeyValue提供了一些实现比较器的内部类
  • KeyComparator   比较 getKey()
  • KVComparator  
  • RowComparator   比较 getRow()

客户端写缓冲区

  • 本地缓存多个put操作,可以显示(调用FlushCommit()方法)或隐式(调用put() 或setBufferSize())批量提交
  • 禁用自动刷写来开启缓冲区,setAutoFlush(false)

Put列表

  • 可以put单个实例,可以put批量数据,如put(List<Put> put)
  • 批量提交后客户端会记录每条失败的原因

原子性操作 compare-and-set

  • 一种特别的put,检测成功后在执行put

get方法

  • 返回数据封装在Result中,默认返回最新版本数据
  • 可以获取单条数据,也可以批量获取
  • get.exist(Get get) 方法,在需要检查一个比较大的列的时候能节省网络传输
  • Result getRowBefore 可以获取某个行之前的行

删除方法

  • 可以单条或者批量删除
  • 可以删除列簇、行、单个cell
  • 支持原子性操作compare-and-set

批量处理

  • put,get, delete 列表其实都是通过 batch() 方法实现的
  • 直接使用batch(List<Action> actions, Object[] results, ... ) 可以同时传入3种实例中的任意一种
  • batch并不使用写缓冲区
  • 不可以把对同一行的put和delete放在一个批量处理里面,因为批量处理的顺序不可控

行锁

保证只有一个客户端获取和那个锁,可以对行进行修改,尽量不要使用行锁,如果必须使用,请一定节约占用锁的时间

扫描

  • 类似迭代器,可以指定startRowKey和endRowKey,还可以添加过滤条件
  • 由于每次next()都要发一次请求,所以扫描器也有缓存,叫scanner caching ,默认是关闭的
  • 通过 setBatch(5) 可以每次 next() 返回5列,注意是 列!

各种特性

Htable用法

  • 获取region信息也可以可以获取某一行数据的具体位置
  • 使用完需要close

Bytes

用来转化Java数据类型

 

 

上一篇:Hbase数据管理                                                                     Hbase总结05_客户端高级特性(计数器、协处理器)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值