Hbase笔记

内容来源于哔哩哔哩网站的尚学堂大数据课程


Hbase的简单使用:

开启:hbase shell
帮助:help
建表:create 'test','cf'
查看所有表:list 'test'
表详细信息:describe 'test'
添加表信息:put 'test','row1','cf:a','value1'
            pub <表名>,<RowKey>,<列簇:列名>,<值>
浏览表:scan 'test'
取行:get 'test','row1'
禁用表:disable 'test'
可用:enable 'test'
删除表:drop 'test' //删除之前需要先禁用表
退出:quit

Hbase在项目中的使用难点

1.RowKey的设计:Hbase主要是使用RowKey进行数据查询的,设计要避免热点数据和数据倾斜问题

2.复杂查询需求

  • 面对复杂需求时,难以通过RowKey直接索引到数据,若索引无法命中,则只能进行大范围或全表扫描才能定位数据。
  • 手动在事务产生时将索引写入到Hbase表中
  • 通过Phoenix构建索引

3.多语言连接问题


Hbase的热点现象:

检索hbase的记录是通过rowkey来定位数据行的,当大量的client访问hbase集群的一个或者少数节点,造成少数region server的读写请求过多,负载过大,而其他region server负载缺很小,就造成了“热点现象”。
    
    热点的危害:
        大量的访问会使热点region所在单个主机负载过大,引起性能下降甚至region不可用。
        
    热点产生原因:
        有大量连续编号的row key==> 大量rowkey相近的记录集中在个别region中 ==>
        client检索记录时,对个别region访问过多 ==> 此region所在的主机过载
        ==> 热点
        
解决方法:    
    尽量均衡地把每一条记录分散到不同的region里去!

    下面是一些常见的避免热点的方法以及它们的优缺点:

    加盐
        这里所说的加盐不是密码学中的加盐,而是在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。给多少个前缀?这个数量应该和我们想要分散数据到不同的region的数量一致(类似hive里面的分桶)。加盐之后的rowkey就会根据随机生成的前缀分散到各个region上,以避免热点。
    
    哈希
        哈希会使同一行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据。

    反转
        第三种防止热点的方法是反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。
        反转rowkey的例子:以手机号为rowkey,可以将手机号反转后的字符串作为rowkey,从而避免诸如139、158之类的固定号码开头导致的热点问题。
    
    时间戳反转
        一个常见的数据处理问题是快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分对这个问题十分有用,可以用Long.Max_Value - timestamp追加到key的末尾,例如[key][reverse_timestamp] ,[key] 的最新值可以通过scan [key]获得[key]的第一条记录,因为HBase中rowkey是有序的,第一条记录是最后录入的数据。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值