Hbase的安装部署


Hbase 基本介绍

hbase 建立在HDFS之上的bigtable java版本。

hbase是一个数据库。

不支持join等复杂sql操作,

不支持复杂的事务(行级的事务)

Hbase中支持的数据类型:byte[]

一个表可以有上十亿行,上百万列

面向列(族)的存储

使用key-value操作数据

对于为空(null)的列,并不占用存储空间, 表可以设计的非常稀疏。

hbase存储海量图片 hbase能存多大数据_hbase


hbase存储海量图片 hbase能存多大数据_数据_02

Hbase使用场景

海量数据、精确查询、快速返回。

海量数据:是背景(数据量)

精确查询:是业务场景。

快速返回: 是业务对性能要求。

Hbase的特性

高可靠

性能高

列式存储

可伸缩

实施读取

noSQL(不支持SQL)

hbase用途

主要用来存储结构化半结构化的松散数据。

hdfs:什么都能存储

MR:不能做快速返回

最初的大数据,只有hdfs+ MR ,此时众多的企业有的数据依然是结构化数据(存储数据库内)。大数据内没有提供快速查询的技术。

需求:就是在大数据内添加一个能够处理(快速查询)结构化数据的组件。hbase在最初设计的时候就考虑了扩展性。hbase具有很好的扩展性。

HBase与Hadoop的关系

HDFS

适合一次读取大量数据,例如:10G   1t

不适合读取少量(几条)数据。

适合一次写入多次读取

HBASE

不适合一次读取大量数据,例如:10G 1t

适合读取少量(几条)数据。

多次写入多次读取

RDBMS与HBase的对比

RDBMS

支持sql

支持事务

支持Join

HBASE

不支持sql

不支持事务

不支持Join

HBase特征简要

1 海量存储

Hbase适合存储PB级别的海量数据,在几十到百毫秒内返回数据。

2 列式存储

这里的列式存储其实说的是列族存储

3 极易扩展

处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。

4 高并发

这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多

5 稀疏

在列数据为空的情况下,是不会占用存储空间的。

hbase 基础架构

Client

Zookeeper

Master

Redgionserver

hbase存储海量图片 hbase能存多大数据_HDFS_03

hbase shell 命令

创建表 表明+ N 个列族
 create ‘user’, ‘info’, ‘data’
 向表添加数据 : 表名 + rowkey +列族:列 + 列的值
 put ‘user’, ‘rk0001’, ‘info:name’, ‘zhangsan’
 根据数据查询
 get ‘user’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:zhangsan’)”}
 包含某个字符
 get , ‘rk0001’, {FILTER => “(QualifierFilter(=,‘substring:a’))”}


HABSE底层原理

底层架构

hbase存储海量图片 hbase能存多大数据_hbase存储海量图片_04


这里一个regionserver就是一个hbase的服务器

Client:

访问hbase底层数据的入口,含访问hbase的API接口,维护着一些cache来加快对hbase的访问

Zookeeper:

1、zk的选举机制 保证任何时候,集群中只有一个master

2、 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master

3、 存贮所有Region的寻址入口

4 、存储Hbase的schema,包括有哪些table,每个table有哪些column family

Master职责

1 为Region server分配region

2 负责region server的负载均衡

3 发现失效的region server并重新分配其上的region

4 处理schema更新请求

说明:client访问hbase上数据的过程并不需要master参与,master仅仅维护者table和region的元数据信息

Region Server职责

1 Region server维护Master分配给它的region,处理对这些region的IO请求

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

HBase的表数据模型

hbase存储海量图片 hbase能存多大数据_HDFS_05

Row Key(hbase最重要的设计)

访问hbase数据的方式(作用在rowkey)

1 通过单个row key访问、

2 通过row key的start key, endkey

3 全表扫描

rowkey 的要求:

最大长度是 64KB

Hbase会对表中的数据按照rowkey排序(字典顺序)

列族Column Family

列族是表的schema(表名称-列族)的一部分,而列不是。

每个列,都归属与某个列族

列Column

列族下面的具体列,属于某一个ColumnFamily

时间戳

时间戳可以由hbase(在数据写入时自动 )赋值,工程师也可以自己设置时间戳。

不同版本的数据按照时间倒序排序。

hbase提供了两种数据版本回收方式:

1 保存数据的最后n个版本

2 保存最近一段时间内的版本

hbase确定一个数据

{row key, column( = + ), version} 唯一确定的单元。

hbase物理存储结构

整体结构

hbase存储海量图片 hbase能存多大数据_hbase存储海量图片_06


一个regionserver内可以存储多个表的region

一个表内的region,只属于这个表。但是这个表的region,可能分配到不同的节点(regionserver)上。

region 的拆分

region按大小分割的(默认10G),每个表一开始只有一个region,当数据量达到阈值(10G)时,会将一个region 等分成两个region.

region是Hbase中分布式存储和负载均衡的最小单元,

regionserver与region是一对多的关系。一个region是能属于一个regionserver.一个regioserver可以存储多个region

rgion内部细分

HRegion由一个或者多个Store组成,每个store保存一个column family。每个Strore又由一个memStore和0

至多个StoreFile组成

数据查询时,客户端检索数据时,先在memstore找,找不到再找storefile。

hbase存储海量图片 hbase能存多大数据_HDFS_07

Hlog(WAL)

每个Region Server维护一个Hlog,而不是每个Region一个.

作用:数据在写入内存之前优先写入Hlog, 防止数据丢失。防止数据写入内存后,没有flush之前,断电导致内存内的数据丢失。

弊端:数据的写入速度相对较慢,慢的原因是数据写操作执行两次。

Hlog日志可以关闭,关闭后写入速度能够加快,但是存在数据丢失的风险。

Hlog日志的拆分

1、放数据写入日之后,如果发生异常,那么就会关闭当前日志文件,
2、日志人间大小维度:当日志文件大小达到一定的量时,就会关当前日志,生成新的日志。

日志的大小是HDFS数据块大小的0.95倍。

3、时间维度:默认的时间为1小时,即一个小时生成一个日志文件

hbase读写过程

hbase读的过程

前置条件:

1、什么是meta表

meta表是hbase自带的一个表。这里存储的数据是每个region的startkey 和endkey等信息

hbase存储海量图片 hbase能存多大数据_hbase存储海量图片_08


2、meta表存在哪里

存储在某个regionserver.

读取流程

1、首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息

2、Client通过刚才获取到的IP来访问Meta,读取Meta内的数据,

3、Client通过元数据(meta表内的数据)中存储的信息,找到region在哪个HRegionServer ,访问对应的HRegionServer读取数据

hbase存储海量图片 hbase能存多大数据_hbase存储海量图片_09


三步找到原始数据

1、到zookeeper找到meta

2 通过meta找到数据所属的region

3 通过region和regionserver的对应关系,找到regionserver,

最后读取数据