hbase笔记1

hbase是对应谷歌三篇论文中的BigTable

1.为什么要使用hbase?

我们在学习hbase之前应该对hive有了一个了解

hive是管理存储在hdfs上的数据(离线处理),hive处理数据是通过mapreduce处理,那么假设是100个T的数据,一个maptask如果按block块的大小128m处理, 每个maptask运行时间大概是1-5分钟,就算是1000台机器的集群也能跑个几十天, 他的效率太低

所以我们要学习hbase :他是属于半结构化的NoSql,查询效率高,并且可以进行实时查询

 2.hbase的简介

1.HBase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库;

2.利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,

3.利用Zookeeper作为其分布式协同服务

4.主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)

 补充说明:

zookeeper对于hbase非常重要,我们在安装hbase之前需要安装并启动zookeeper,hbase的元数据会存储在zookeeper上   

3.hbase的系统架构

 hbase组件的作用:

Client:

我们平常操作的客户端

 Master:

(1)为Region server分配region 
(2)负责Region server的负载均衡
(3)发现失效的Region server并重新分配其上的region
(4)管理用户对table的增删改操作,并不是对数据的直接操作,而是修改表结构

 Region server

(1)Region server维护region,处理对这些region的IO请求

(2)Region server负责切分在运行过程中变得过大的region

zookeeper

(1)监控Region server的上线和下线信息,并实时通知给Master

(2)存储hbase上的的元数据

region:

HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据, 连续的地方就是:他会根据你的key值字典顺序升序排列(ASCII码排列);

每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region。 

 Hlog:

存储的是用户的操作指令,当某个RegionServer挂掉了,Hmaster会从Hlog中读取信息,完成数据的恢复

HMaster管理所有的HRegionServer,给所有的HRegionServer分配数据;

而当某个HRegionServer挂掉时,HMaster会把它负责的所有HRegion分配到其他HRegionServer中;

HRegionServer对应集群中的一个节点,一个HRegionServer管理多个HRegion还有一个Hlog;

一个HRegion中包含了多个Store,Sotre中分为MemStore和StoreFiles两部分;

MemStore是内存缓冲区,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile;

StoreFile底层是HFile,因为你是存储在hdfs上的数据

StoreFile的文件数量增长到一定阈值后,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除操作。

当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡

4.hbase的表结构

Rowkey: 唯一标识一行数据

可以通过RowKey获取一行数据,他是按照字典顺序排序的。

Row key只能存储64k的字节数据  10-100byte

访问 HBase table中的行,只有三种方式:

  • 直接通过单个RowKey

  • 指定RowKey的范围

  • 还可以指定跟RowKey有关的正则表达式去访问

Column Family:列簇,在创建的一个表的时候就必须要指定一个列簇

version是列簇的重要属性之一,他保证了每次cell可以对应多个版本的数据

qualifier:列,在一个列簇下面可以有多个列,列下面才是存储数据的

timestamp:时间戳

就是一直提到的版本的概念,每条数据插入的时候都会记录插入时间(时间戳,64位整型)

如果有多个版本,会按照时间戳的倒序(时间戳越大,表示数据越新)储存数据,在获取的时候,如果不指定版本,那么会默认最新一条的数据

如果设置了TTL(Time to Live),那么HBase将会根据TTL以及数据的时间戳去删除过期的数据

 上面的每一个空格都是会有一个时间戳,如果开启了多个VERSIONS,还可这个单元格还可查询道以前插入数据时的时间戳,向一个单元格插入2次数据是会覆盖上一次的,当然是包括数据和时间戳

Cell

Cell 是由 row key+列簇+列名+version 唯一确定的单元。

所以一条数据多少列就多少cell(指最新)

每个单元格可以对应多个version,所以一个单元格里实际存储的是多个version的数据,但是不指定的version时候,只会给出最新的数据

Cell 中的数据是没有类型的,全部是字节码形式存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值