HBase学习笔记

概念:基于内存和磁盘的分布式大数据NoSQL数据库
用途定位: 常用于大数据实时存储,提供高性能实时读写服务。数据可以永久存储(redis基于内存和磁盘,但是磁盘是本地磁盘,存储量有限)
数据存储格式

NS(namespace):T(table)        CF(columnFamily):C(column)value  TS(可选)  
namespace :ns类似于MySQL中的数据库
table  :t类似于数据库的表,只不过这个表是面向列的
rowkey(row):行的唯一标识,类似于主键,但比主键功能强大,唯一索引列,需要合理设计
columnfamily(cf) :列族 查询优化手段,可以根据列族进行过滤,但是会降低一些写的性能
column (c):列名
ts 时间戳,可选
value 值


常用命令行命令
create_namespace 'namespace_name'        建库
list_namespace 查看所有namespace
drop_namespace 删除namespace
list_namespace_tables 'table' 查看指定namespace 的所有表
create 'NS:T' 'CF'         建表;无需指定列名,只需指定库表和列族
list 查看所有表
disable 'table'        禁用表
enable 'table'         启用表
desc        查看表的信息
drop [if exists] 'table' 删除表格(删除前必须禁用)
put 'NS:T' 'ROW' 'CF:C' ['ts'] '值'          存在就更新,不存在就插入
get  'NS:TAB' 'ROW' 'CF:C'        获取 指定表,指定rowkey,指定列族,指定列的值
get 'ns:tbname','rowkey'        查询某个RowKey的所有值
scan 'NS:T',{Filter}         查看全表,也可以按条件过滤类似于select *from table
incr          'NS:T','rowkey','CF:C'
get_counter    NS:'T','rowkey','CF:C'
count          'NS:T'
delete        'NS:T','rowkey','CF:C'        删除值
deleteall       'NS:T','rowkey'    删除一个RowKey所有值    
...

HBase热点问题

现象:在一段时间内,大量的访问同一个Region,其它的Region很少被访问.
产生的问题:

  1. 故障率高 压力集中于一台,这台的故障率高
  2. 性能低 只访问一台,整体性能不好

原因:

  1. 表RowKey是连续的        表插入的数据是连续的,计算出的regionServer可能会都在同一个区
  2. 分区范围不合理           表分区设计不合理,比如全设置数字型分区,但是数据都是字母开头的

解决(预防):

  1. 构建多个分区,分区范围要合理 (表设计阶段)
  2. 构建不连续的RowKey (表设计阶段)

表的预分区设计

概念:建表的时候,指定表的分区段

规则:根据RowKey或者Rowkey的前缀划分

划分的目标:尽量均衡的划分数据

表的RowKey设计

功能

1.一行数据的唯一标记

2.HBase的唯一索引

3.Region划分依据

设计原则

1.业务原则        按照最常用于查询的一个或多个列作为前缀,比如时间,订单号等
2.唯一原则        数据的rowkey必须是数据的唯一标识。如果设计不合理,会造成数据丢失
3.组合原则        可以将多个常用查询的的列组合作为前缀 比如时间+用户id
4.散列原则        rowkey不能是连续的 如果必须是连续,可以考虑使用倒序(时间)或者加盐等方式
5.长度原则        总体rowkey长度不要超过100个字节,如果超过,考虑进行编码

BulkLoad

功能:将没有经过内存需求的大文件存入HBase,文件传输失败可以重传,但是不希望它经过内存

步骤:

1. 将文件转换为HFILE

2.加载数据到HBase表

Hive On HBase

产生原因:Hbase不支持SQL,hbase编写程序分析处理数据学习成本高

原理:将Hive与Hbase集成,使用sql语法,通过底层分布式程序来对数据映射的HIVE表进行处理,底层操作的是Hbase数据

优点:支持完善的SQL语句,可以实现可靠的各种复杂的SQL和高级函数的处理计算

缺点:1.不支持HBase二级索引,2.底层基于MR程序,处理性能查,速度慢,不适合做实时查询

定位:大数据离线场景的分析计算

Hbase二级索引

产生原因:根据rowkey规则,将常用的列作为前缀拼接,但仍有部分column无法直接作为查询条件,比如以时间作为前缀拼接,但是按直接按用户名查询也有需求,按这些列的查询不走索引,效率低下。

一.全局索引

原理:将除携带左前缀的不能满足索引查询的常用作查询的列作为前缀,拼接到Rowkey前面,作为新的 rowkey建立索引表,值为x仅做占位使用,查询时可先查询该表,按照前缀column获取rowkey后缀的得到rowkey1后,用rowkey1到原表查询,实现两次索引代替全表查询效果。
 

二.覆盖索引

原理:全局索引的基础上。将常用的查询字段放入,需要查询的时候,直接查这个表拿结果,不查原表。

三.本地索引

原理:将在全局索引基础上,新建的二级索引不新建表,直接放入原表的一个region,减少网络IO,降低对写的影响。注:本地索引会对原表数据进行修改,索引不能和加盐一起用

维护方式:

1.手动维护        性能查,不能保证原子性,原表和索引表更新,二级索引表可能没更新

2.开发协处理器         可以处理更新同步问题和原子性,但是工程量大,成本太高

3.使用第三方工具        使用Phoenix等 实现自动索引文件同步,保证原子性

优点:可以将原本不满足索引查询实现索引效果。提升查询效率

缺点:索引是一个数据结构,会随着原表的增删改而实时变化,手动维护困难

Phoenix

Safeforce公司的开源项目,后捐献给apache

优点:

1.提供完善二级索引功能,解决二级索引的各种问题。比如数据一致性和原子性。

2.提供SQL查询功能,实现SQL处理HBase问题,使用Hbase的API,查询性能好

缺点:由于没有计算引擎,只有原生API,功能由协处理器实现,没有复杂的SQL语法和丰富的函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦㐅触及轮回

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值