Hbase总结04_客户端
管理功能(DDL)
通信方式 Hbase客户端大部分类都是有一个无参的构造函数,都是实现了Hadoop Writable接口,包含两个需要实现的方法:
- void write(DataOutput out)
- void readFields(Datainput in)
扩展Hbase基础实现需要满足下列条件:
- 在RPC两端都必须可用
- 实现writable接口
- 拥有无参数的构造函数
- 表明: 不能用 . 或 - 开头
- 列簇:HTableDescriptor 虽然名字叫 HTable但是其实是针对列簇的
- 文件大小:用来指定region大小,超过则分裂
- 只读:设置表只读,不能修改
- memstore:设置预写缓冲区大小
- 延迟刷写:设置WAL日志延迟刷写,可以提高写效率,但存在丢失数据风险
- 名字:不能以 . 开头,也不能包含 : /等特殊字符
- 最大版本数:设置该列簇数据最多保存几个版本数据
- 压缩:HBase支持插件式的压缩算法,这个功能允许用户选择合适的压缩算法
- 块缓存:将查询结果缓存在内存中,默认为64KB,用于减少IO,提高查询效率,拥有独立的保存策略
- 生存期TTL:数据存货时间
- in-memory:默认为false。如果为true,则块数据会以较高优先级被加载到内存中 ,除非堆压力大,这个时候才会强制从内存卸载这部分数据这个参数非常适合数据量小的列族,例如,保存登录账号和密码的用户表
- 布隆过滤器:是HBase中的高级功能,能够减少特定访问模式下的查询时间,但是由于这种模式增加了内存和存储的负担,这个模式默认为关闭。
- 复制范围:复制(replication)提供了跨集群的同步的功能。replication scope默认为0,意味着是关闭的。setScope(1)可以开启该功能
- 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
- 所有修改都保证了行级别的原子性: 要么读到最新的修改,要么等待系统允许写入改行修改
- 尽量使用批量batch来进行同样类型的数据操作
- 创建HTable实例代价较高,推荐用户只创建一次HTable实例,而且是每个线程创建一个
- 如果用户需要多个HTable实例,建议使用HTablePool类
单行put
- 还可以通过 KeyValue 来添加Put: Put add(KeyValue kv)
- getFamilyMap() 可以遍历Put实例中每一个可用的KeyValue实例
- 用 has(family, qualifier) 来检查是否存在特定的单元格,而不需要遍历整个集合
- Put.getRow() 可以获取rowkey
- Put.heapSize() 可以计算当前Put实例所需的堆大小,既包含其中的数据,也包含内部数据结构所需的空间
- KeyValue和它的比较器设置成客户端内部使用
- KeyValue提供了一些实现比较器的内部类
- KeyComparator比较 getKey()
- KVComparator
- RowComparator比较 getRow()
- 本地缓存多个put操作,可以显示(调用FlushCommit()方法)或隐式(调用put() 或setBufferSize())批量提交
- 禁用自动刷写来开启缓冲区,setAutoFlush(false)
- 可以put单个实例,可以put批量数据,如put(List put)
- 批量提交后客户端会记录每条失败的原因
- 一种特别的put,检测成功后在执行put
- 返回数据封装在Result中,默认返回最新版本数据
- 可以获取单条数据,也可以批量获取
- get.exist(Get get) 方法,在需要检查一个比较大的列的时候能节省网络传输
- Result getRowBefore 可以获取某个行之前的行
- 可以单条或者批量删除
- 可以删除列簇、行、单个cell
- 支持原子性操作compare-and-set
- put,get, delete 列表其实都是通过 batch() 方法实现的
- 直接使用batch(List actions, Object[] results, ... ) 可以同时传入3种实例中的任意一种
- batch并不使用写缓冲区
- 不可以把对同一行的put和delete放在一个批量处理里面,因为批量处理的顺序不可控
扫描
- 类似迭代器,可以指定startRowKey和endRowKey,还可以添加过滤条件
- 由于每次next()都要发一次请求,所以扫描器也有缓存,叫scanner caching ,默认是关闭的
- 通过 setBatch(5) 可以每次 next() 返回5列,注意是 列!
- 获取region信息也可以可以获取某一行数据的具体位置
- 使用完需要close
用来转化Java数据类型
【Hbase总结04_客户端】
文章图片
上一篇:Hbase数据管理Hbase总结05_客户端高级特性(计数器、协处理器)
推荐阅读
- 7.9号工作总结~司硕
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 数据库总结语句
- 周总结|周总结 感悟
- 周总结43
- 参加【21天写作挑战赛】,第七期第14天,挑战感受小总结
- 第二阶段day1总结
- 新梦想91期特训班两天一晚学习感想及总结(学生(魏森林))
- 周总结(10.5-10.11)
- 2019.11.14号总结