欢迎投稿

今日深度:

Hbase入门,

Hbase入门,


Hbase是一个开源的非关系型数据库(nosql),他参考了谷歌的bigtable建模,实现语言java
是apache软件基金会的hadoop项目的一部分,运行在hdfs文件系统之上,因此可以容错的存储海量的稀疏数据
和关系型数据库不同,如mysql。如果在插入值时候,如果没有向哪一行插入数据,mysql会自动插入null。
稀疏数据(在数据库中,稀疏数据是指在二维表中含有大量空值的数据;即稀疏数据是指,在数据集中绝大多数数值缺失或者为零的数据。稀疏数据绝对不是无用数据,只不过是信息不完全,通过适当的手段是可以挖掘出大量有用信息。)

特性:
- 高可靠
- 高并发读写
- 面向列
- 可伸缩
- 易构建
关系型数据库mysql
- 行存储:
- 优点:写入一次完成,保持数据完整性(不能为空)
- 缺点:数据读取过程中产生冗余数据,若有少量数据可以忽略
(因为他是先把所有表读完,然后筛选掉不用的字段)降低读取性能

hbase
列存储
- 优点:读取过程,不会产生冗余数据特别适合对数据完整性不高的大数据领域
- 缺点:写入效率差,保证数据完整性方面差
按照列存储,每个列之间隔离,在查找方面不会产生冗余数据,按列读取
列与列之间建立关系,可以有年龄,但是没有sex或者local,也不会影响。

  • 海量数据存储
  • 快速随机访问
  • 大量写操作的应用

将非结构化的数据变成结构化信息存储起来

应用场景
- 互联网搜索引擎数据存储
- 海量数据写入
- 消息中心 //spout可以从HBase中读取(支持时间戳)
- 内容服务系统(schema-free)
- 大表辅助&多维度索引
- 大批量数据读取

row关键字
column=meta_data:cl
列族 列

timestamp=14123709790
时间戳

value

HBase物理模型:
region 区域
hbase一张表由多个region组成(按照行划分)
记录按照row key序字典排序

region是数据分布的最小单位,是hbase中分布式存储和负载均衡的最小单位。

region按大小分割,每个表一开始只有一个region,随着数据不断插入表,region就会增大,当增大到一个阈值时,hregion就会等分为两个新的hregion,当table中的行不断增多,就会有越来越多的hregion。

region阈值默认是10G,

一个region只属于一个regionserver(类似于一个节点)
当操作hbase数据的时候,会向某一行加锁。
hregionserver:进程,核心进程

表->htable
按rowkey范围分的region->hregion->region server
hregion按列族(column family)->多个hstore
hstore是类似于列族

hstore->memstore+hfiles(均为有序的kv)
memstore类似于内存区域,(默认128M)当达到阈值会向磁盘写入
hfiles->HDFS

hregionserver

hlog日志信息
blockstore缓存,为了加快读取速度
一个regionserver管理着很多region,region里面有包含了很多store,
一个store里面包含着很多storefile和hfiles。
在client向hbase中写入数据时,先写hlog,然后再去写memstore,在去给hfile上去写
Hlog ,数据恢复时,是将操作过的命令和文件进行回溯,

一个hbase结构包含四个部分

client
-访问hbase 的接口,并维护cache加速regionserver的访问

master
-负载均衡,分配region到regionserver

regionserver
-维护region,负责region的io请求

zookeeper
-保证集群中只有一个master
-存储所有region的入口(root)地址(寻址)
-实时监控regionserver的上下线信息,并通知master

进程
hmaster(主)
1.负载均衡,管理和分配hregion
2.ddl:增删改操作->table,column family,namespace
3.类似于namenode,管理一些元数据
4.acl权限控制

hregionserver(从)
1.管理和存放本地的hregion
2.读写hdfs,提供io操作
3.本地化:hregion的数据尽量和数据所属的datanode在一起,但是这个本地化不能够总是满足和实现(因为有时候会不断的插入数据)

除hdfs存储信息,hbase还在zookeeper中存储信息,其中的znode信息:
Hdfs上存储数据和hlog
源数据信息存储在zookeeper上
Zookeeper上有个hbase节点保存了源数据信息和调度信息
当region server没有在一定时间内未出现心跳,master将该regionserver上region重新分配到其他regionserver上,
Zookeeper容错:不要太大

WAL(write-ahead-log)预写日志
为了防止在写入了hbase节点挂掉,导致丢失数据,
-是hbase的regionserver在处理数据插入和删除的过程中用来记录操作内容的一种日志
-在每次put、delete等一条记录时,首先将其数据写入到regionserver对应的hlog文件的过程。

客户端往regionserver端提交数据的时候,会写wal日志,只有当wal日志写成功之后,客户端才会告诉提交数据成功,如果写wal失败会告知客户端提交失败
数据落地过程
在一个regionserver上的所有region都共享一个hlog,一次数据的提交先写wal,写入成功后,再写memstore,当memstore值到达一个阈值,就会形成一个storefile(理解为hfile格式的封装,本质上还是以hfile的形式存储的)

查找用户

在读取hbase的数据时,表名
这张表存在那张regionserver上,然后对表进行操作
Meta信息存的表名和对应的regionserver的对应关系
在meta表中拿你的表名访问你的regionserver
META 是多个表,放在不同的regionserver上,
客户端也可能会由memcache(缓存)

合并操作 compaction
将冗余的垃圾信息去除
(compaction本质:使用短时间的io消耗及贷款消耗换区后续查询的低延迟)
compaction的速度远远跟不上hfile生成的速度,这样就会使hfile的数量会越来越多,导致读性能急剧下降,在hfile的数量过多的时候会限制写请求的速度

合并:
1.region的合并,尽量把小的region合并到一个大的,理想情况下,每个region的请求量是一样的(不能保证数量一致)
2.storefile的合并
如果hbase当做mapreduce的输入源的话,一个map对应一个region

hbase中扫描的顺序依次是:BlockCache、Memcache、StoreFile(Hfile)

split 当一个region太大时,将其分裂成两个region
split和major compaction可以手动或者自动做

www.htsjk.Com true http://www.htsjk.com/hbase/39286.html NewsArticle Hbase入门, Hbase是一个开源的非关系型数据库(nosql),他参考了谷歌的bigtable建模,实现语言java 是apache软件基金会的hadoop项目的一部分,运行在hdfs文件系统之上,因此可以容错的存储海...
相关文章
    暂无相关文章
评论暂时关闭