HBase基础

来源:互联网 发布:单片机的资源 编辑:程序博客网 时间:2024/05/29 09:25
1.简介:
Hbase是高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库
利用HDFS作为其文件存储系统利用mapreduce处理hbase中的海量数据利用ZooKeeper作为分布式协同服务
主要用来存储非结构化和半结构化的松散数据

2.概念介绍:
rowkey
决定一行数据,按照字典顺序排序,只能存储64K字节数据
设计row key时,要充分利用这个排序特点,将经常一起读取的数据存储到一块,将最近可能会被访问的数据放在一块。

HBase中row key用来检索表中的记录,支持以下三种方式:
· 通过单个row key访问:即按照某个row key键值进行get操作
· 通过row key的range进行scan:即通过设置startRowKey和endRowKey,在这个范围内进行扫描
· 全表扫描:即直接扫描整张表中所有行记录。

3.Rowkey规则
1、 越小越好
2、 Rowkey的设计是要根据实际业务来
3、 散列性
a) 取反   123 取反后为321
b) Hash

4.列族
hbase表中每个列都属于一个列族,列族作为表模式定义的一部分预先定义
列名是以列族作为前缀,每个“列族”都可以有多个列成员(column),新的列族成员(列)可以随后按需、动态加入
权限控制,存储以及调优都是在列族层面进行的
Hbase把同一列的数据存储在同一个目录中
不要在一张表里定义太多的column family。目前Hbase并不能很好的处理超过2~3个column family的表。因为某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O

5.时间戳:
hbase中每个cell对同一个数据有多个版本,默认使用时间戳管理不同版本的数据按照时间倒序排序
时间戳的类型是64位整型
时间戳可以由hbase(在数据写入时自动)赋值
时间戳可以由客户赋值

6.cell单元格:
单元格是有版本的
由{rowkey,column(=family+qualifier),version}唯一确定的单元

7.HLog
HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,HLog SequeceFile的Value是HBase的KeyValue对象

8.Hbase体系架构
注:StoreFile和HFile代表的同一个数据文件,StoreFile为内存数据,HFile为磁盘数据

ZooKeeper:
  • 保证任何时候集群都只有一个master
  • 存储所有Regionn的寻址入口,实时监控Region server的上线和下线信息
  • 存储Hbase的schema和table的元数据

Mater
  • 为Region server分配region
  • 负责Region server的负载均衡
  • 发现失效的Region server并重新分配其上的region
  • 管理用户对table的增删改操作

Region server
维护region,处理对这些region的IO请求
Region server负责切分在运行过程中变得过大的region

9.Hbase存储模型
Hbase自动把表水平划分为多个区域,每个region保存一个表里某段连续的数据,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候

Hbase数据模型
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上
MemStore和storeFile
一个region由多个store组成,一个store对应一个Column Family
store包括位于内存中的memstore和位于磁盘的storefile
写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
客户端检索数据,先到Memstore中查数据,查不到就到BlockCache中查,再查不到就会到磁盘上读,并把读的结果放入BlockCache

Hbase DDL和DML


10.Hbase DDL:
1)删除一个列族
alter 'table_name',{NAME='CF_name',METHOD='delete'}
删除列族的时候必须先将表给disable
disable 'table_name'
2)列出所有的表
list
3)drop一个表
disable table_name-->drop table_name