(大数据分析-3)HBASE Review
来源:互联网 发布:人工智能学校排名 编辑:程序博客网 时间:2024/05/16 17:23
1 HBASE基本原理及介绍
1.1 基本原理
1.1.1 HBASE基本概念
- HBASE特点
- 多版本并发控制,数据随机读写操作,数据强一致性
- 数据多版本:每个单元中的数据可以有多个版本,通过timestamp区别
- 数据类型单一:所有数据都是byte数组,没有类型
- 稀疏、分布式、持久、多维有序map
- 稀疏:空(null)列不占存储空间,表可以非常稀疏
- 分布式:视图其他行没有关系,可以横切为多个region,分别部署在多个节点
- 多维度:5个维度,row key、column family、column、value、timestamp
- 有序:不管hbase跨多少机器,row key都是有序(B+树索引结构,支持快速定位)
- 多版本并发控制,数据随机读写操作,数据强一致性
- 基本概念
名词 含义 - HBASE逻辑视图
组织方式:多级索引,按row key升序,按timestamp降序
key key key key Hbase逻辑视图如下:
- 物理模型 v.s. 数据模型
- HBASE物理模型
- table中所有行按RowKey排序
- 单个table一开始只有一个region
- 随着记录越来越多,单个region太大,达到阈值,分裂成2个region(region split)
- region是Hbase中分布式存储和负载的最小单元
- 不同region分布在不同的RegionServer上
- HBASE数据模型
- HBASE物理模型
- HBASE架构
组件 功能 HMaster管理用户对table的创建删除修改操作 为Region server分配region 负责Region server的负载均衡 发现失效的Region server并重新分配其上的region(通过zookeeper实现) 不负责实际数据操作Region Server维护region,处理对这些region的IO请求,直接与client进行数据通信 负责切分(split)在运行过程中变得过大的region 对region进行compact操作 在运行中可以动态添加、删除Client包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息ZooKeeper通过选举,保证任何时候,集群中只有一个HMaster HMaster与RegionServer启动时会向ZooKeeper注册 存贮所有Region的寻址入口 实时监控Region server的上线和下线信息。并实时通知给HMaster 存储HBase的schema和table元数据,如column family Zookeeper的引入使得Master不再是单点故障 - HBASE物理存储
物理结构 功能 - 读写流程
- Hbase写流程
- Client向RegionServer提交请求
- 找到目标region
- 数据更新先写进MemStore和HLog中,保持有序
- MemStore达到阈值,创建新的MemStore,并将老的添加进flush队列,有单独的线程flush到磁盘的StoreFile
- 当StoreFile达到阈值进行合并compact,形成大的StoreFile
- StoreFile大小达到阈值进行分裂split,等分成两个region
- Hbase读流程
- 通过三层结构寻找对应的region
- 先在MemStore中查找
- 建立storeHeap堆,从对应region下的所有StoreFile寻找
- Hbase写流程
- 索引
Rowkey作为索引,字典排序。当通过rowkey不再满足应用的需求,如select * from table where col=val,建立二级索引加速查找
- 数据库设计理论:
- ACID理论:原子性、持久性、一致性、隔离性
- CAP理论:一致性、可用性、网络隔离性。对每个集群选择PA或PC
- hbase选择一致性(行一致性)、网络隔离性,任何时候网络副本都一样,放弃可用性。即一旦发生网络隔离,在返回失败错误。
- 部分数据库(对一致性不高)选择可用性、网络隔离性,放弃一致性。如google搜索网页,返回较旧的网页。
hbase按row key范围横切(就是region),第1台机器 hbase的row key不要用递增序列、递减序列,如关系型数据库里面的时间等,会导致写入热 点问题(集群部分写入的机器只有1台)
二级索引,创建二级倒排表。 hbase是无字符类型数据库,全部按照二进制内容。索引只有两列,值和位置
1.2 相关指令
创建hbase表table1,column family为family1,row key以10、20划分3段
[root@hadoop1 ~]# hbase shellHBase Shell; enter 'help<RETURN>' for list of supported commands.Type "exit<RETURN>" to leave the HBase ShellVersion 0.98.6-transwarp, r14622, Wed Aug 12 16:26:42 CST 2015hbase(main):001:0> create 'table1','family1',SPLITS=>['10','20']SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/lib/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.0 row(s) in 2.4820 seconds=> Hbase::Table - table1hbase(main):002:0> listTABLE table1 tablexf 2 row(s) in 0.0310 seconds=> ["table1", "tablexf"]
插入数据,column分别为name、sex
hbase(main):003:0> put 'table1','row1','family1:name','BILL'0 row(s) in 0.1950 secondshbase(main):004:0> put 'table1','row1123','family1:name','BILL'0 row(s) in 0.0090 secondshbase(main):005:0> put 'table1','row1','family1:sex','male'0 row(s) in 0.0130 secondshbase(main):006:0> put 'table1','row2','family1:name','Lily'0 row(s) in 0.0100 secondshbase(main):007:0> put 'table1','row2','family1:sex','female'0 row(s) in 0.0110 seconds
打印table1
hbase(main):008:0> scan 'table1' //打印所有记录ROW COLUMN+CELL row1 column=family1:name, timestamp=1442298988538, value=BILL row1 column=family1:sex, timestamp=1442299027575, value=male row1123 column=family1:name, timestamp=1442299025041, value=BILL row2 column=family1:name, timestamp=1442299027641, value=Lily row2 column=family1:sex, timestamp=1442299032441, value=female 3 row(s) in 0.1860 secondshbase(main):009:0> scan 'table1',{LIMIT=>1} ROW COLUMN+CELL row1 column=family1:name, timestamp=1442298988538, value=BILL row1 column=family1:sex, timestamp=1442299027575, value=male 1 row(s) in 0.0390 secondshbase(main):010:0> scan 'table1',{LIMIT=>1,STARTROW=>'row2'}ROW COLUMN+CELL row2 column=family1:name, timestamp=1442299027641, value=Lily row2 column=family1:sex, timestamp=1442299032441, value=female 1 row(s) in 0.0200 seconds
删除记录,row key为row1123;删除表table1
hbase(main):011:0> delete 'table1','row1123','family1:name'0 row(s) in 0.0580 secondshbase(main):012:0> scan 'table1'ROW COLUMN+CELL row1 column=family1:name, timestamp=1442298988538, value=BILL row1 column=family1:sex, timestamp=1442299027575, value=male row2 column=family1:name, timestamp=1442299027641, value=Lily row2 column=family1:sex, timestamp=1442299032441, value=female 2 row(s) in 0.0410 secondshbase(main):013:0> deleteall 'table1','row1'0 row(s) in 0.0210 secondshbase(main):021:0> listTABLE 0 row(s) in 0.0160 seconds=> []
0 0
- (大数据分析-3)HBASE Review
- (大数据分析-1)HDFS Review
- (大数据分析-2)mapReduce Review
- 大数据(三十二)HBASE【Hbase JavaAPI访问HBase】
- 大数据开发|HBASE分布式数据库环境构建(3)
- 大数据分析的技术栈(一)-HBase, Parquet
- 基于HBase的大数据存储的应用场景分析
- 基于HBase的大数据存储的应用场景分析
- 基于HBase的大数据存储的应用场景分析
- 大数据(二十七)HBASE【Hbase 综述】
- 大数据(二十八)HBASE【Hbase 体系架构】
- 大数据(三十一)HBASE【Hbase Shell 常用命令】
- 大数据(三十五)HBASE【mapreduce操作hbase】
- 大数据实战(上)-HBASE原理
- 大数据(三十三)HBASE【Phoenix】
- 大数据学习笔记(五)-HBase
- 大数据(三十四)HBASE【调优】
- HBase加载大数据
- 布局——线性布局、相对布局
- 君乐宝换奶粉方法
- 51nod 1430:奇偶游戏 博弈
- ios开发问题2—uitableviewController中如何改变tableview的位置
- 点滴感悟
- (大数据分析-3)HBASE Review
- PCA 浅显易懂的数学原理
- Android应用架构系列——ListView的模板化
- C# 系统应用之TreeView控件显示树状磁盘文件目录及加载图标
- android Service(一)
- block
- 不安装oracle客户端,用plsql连接oracle
- 轻乳酪蛋糕
- WINDOWS DOS命令大全