Hbase 原理 及其安装

来源:互联网 发布:兰州知豆电动车租赁点 编辑:程序博客网 时间:2024/06/11 15:27

Hbase 基本原理

Hbase?

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它存储的是松散型数据,具体来说,HBase存储的数据介于映射(key/value)和关系型数据之间。同时利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群.
Hbase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

安装配置

下载:

$ wget: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.2.4/hbase-1.2.4-bin.tar.gz
$ tar -xvf hbase-1.2.4-bin.tar.gz
$ mv -R hbase-1.2.4 ~/dev/hbase

环境变量:

~/.bashrc 添加 export PATH=$PATH:$HOME/dev/hbase/bin
$ source ~/.bashrc

hbase配置:

1.单机:

~/dev/hbase/conf/hbase-env.sh 添加 export JAVA_HOME/usr/lib/jvm/jdk1.8.0_101
~/.bashrc 添加 export HBASE_MANAGES_ZK=true 说明:此配置信息,设置由hbase自己管理zookeeper,不需要单独的zookeeper。
$ source ~/.bashrc

2.伪分布式机:

在单机的基础之上,配置同目录下的hbase-site.xml文件
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.70.130:9000/hbase</value>
<description>设置 hbase 数据库存放数据的目录,这里是放在hadoop hdfs上,这里要>与hadoop的core-site.xml文件中的fs.default.name中的值一致,然后在后面添加自己的子>目录,我这里定义是hbase</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>

3.分布式:

3.1 hbase-site.xml配置
3.2 regionservices配置
3.3 ZooKeeper配置

启动:

$ ./start-hbase.sh

启动顺序:

先启动Hadoop——>再启动Hbase。

关闭顺序:

先关闭Hbase——>再关闭Hadoop。

HBase Shell:

1.进入hbase shell console

$ cd $HBASE_HOME/bin
$ ./hbase shell
hbase(main)>

2.表的管理

列出所有表
hbase(main)> list
创建表
# 语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:创建表t1,有两个family name:f1,f2,且版本数均为2 ,下面两种方式都可以
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
hbase(main)> create 't1','f1','f2','f3'
删除表
分两步:首先disable,然后drop
例如:删除表t1
hbase(main)> disable 't1'
hbase(main)> drop 't1'
查看表的结构
# 语法:describe <table>
# 例如:查看表t1的结构
hbase(main)> describe 't1'
修改表结构 修改表结构必须先disable
# 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
# 例如:修改表test1的cf的TTL为180天
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'

3.表数据的增删改查

添加数据:
# 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put 't1','rowkey001','f1:col1','value01'-
删除数据:
删除行中的某个列值
# 语法:delete <table>, <rowkey>, <family:column> , <timestamp>,必须指定列名
# 例如:删除表t1,rowkey001中的f1:col1的数据
hbase(main)> delete 't1','rowkey001','f1:col1'
删除行
# 语法:deleteall <table>, <rowkey>, <family:column> , <timestamp>,可以不指定列名,删除整行数据
# 例如:删除表t1,rowk001的数据
hbase(main)> deleteall 't1','rowkey001'
删除表中的所有数据
# 语法: truncate <table>
# 其具体过程是:disable table -> drop table -> create table 就是删除再重建
# 例如:删除表t1的所有数据
hbase(main)> truncate 't1'
查询数据:
查询某行记录
hbase(main)> get 't1','rowkey001', 'f1:col1'
扫描表
# 例如:扫描表t1的前5条数据
hbase(main)> scan 't1',{LIMIT=>5}
查询表中的数据行数
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
# 例如,查询表t1中的行数,每100条显示一次,缓存区为500
hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500}
修改数据

4.其他

status 看状态
exists 是否存在
exit 离开
tools 查看所支持的工具
version 看版本
shutdown 关闭群集(不是退出)

结构体系

HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器(HRegion Server)和HBase Master服务器(HBase Master Server)构成。HBase Master服务器负责管理所有的HRegion服务器,而HBase中所有的服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。HBase Master服务器本身并不存储HBase中的任何数据,HBase逻辑上的表可能会被划分成多个HRegion,然后存储在HRegion服务器群中。HBase Master服务器中存储的是从数据到HRegion服务器的映射。因此,HBase体系结构如图2所示。

HRegion:

当表的大小超过设置值的时候, HBase会自动将表划分为不同的区域 ,每个区域包含 所有行的一个子集 。对用户来说,每个表是一堆数据的集合,靠 主键来区分 。从物理上来说,一张 表是被拆分成多块 ,每块就是一个HRegion。我们用 表名+开始/结束 主键来区分每一个HRegion。一个HRegion会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在 多个HRegion 上面的。

HRegion服务器:

所有数据都保存在Hbase分布式文件系统(HDFS)上面,用户通过一系列HRegion服务器获取这些数据。包括两大部分:HLOG部分(存储数据日志)和HRegion部分(储存数据)。说明:每一个HRegion又由很多的Store组成, 每一个Store存储的实际上是一个列族(ColumnFamily)下的数据 。每一个Store包含了多个StoreFile,StoreFile负责的是实际的数据存储,为 HBase中最小的存储单元 。

HBase Master服务器:

每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是 告诉每个HRegion服务器它要维护哪些HRegion 。
HMaster在功能上主要负责Table和HRegion的管理工作,具体包括:
  • 管理用户对table的增、删、改、查操作;
  • 管理HRegion服务器的负载均衡,调整HRegion分布;
  • 在HRegion分裂后,负责新HRegion的分配;
  • 在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移
说明:
  • 对于数据操作,HBase中不涉及 数据的直接删除和更新操作 , 所有的数据均通过追加的方式进行更新 。数据的删除和更新在HBase合并(compact)的时候进行。当Store中StoreFile的数量超过设定的 阀值 时将 触发合并 操作,该操作会把 多个StoreFile文件合并成一个StoreFile 。
  • 当用户需要更新数据的时候,数据会被分配到对应的HRegion服务器上提交修改。 数据首先被提交到HLOG文件里面 ,在写入HLOG之后,commit()调用才会将其返回给客户端。HLOG文件用于故障恢复。例如某一台HRegionServer发生故障时,那么它所维护的HRegion会被重新分配到新的机器上。这时HLOG会按照HRegion进行划分。新的机器在加载HRegion的时候可以通过HLOG对数据进行恢复。
  • 当一个HRegion变得过于巨大、超过了设定的阀值时,HRegion服务器会调用HRegion.closeAndSplit(),将此HRegion拆分为两个,并且报告主服务器让它决定由哪台HRegion服务器来存放新的HRegion。这个拆分过程十分迅速,因为两个新的HRegion最初只是保留原来HRegionFile文件的引用。这时旧的HRegion会处于停止服务的状态,当新的HRegion拆分完成并且把引用删除了以后,旧的HRegion才会删除。
  • 另外,两个HRegion可以通过调用HRegion.closeAndMerge()合并成一个新的HRegion,当前版本下进行此操作需要两台HRegion服务器都停机。

ROOT表和META表:

HRegion是按照表名和主键范围来区分,由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion。一个HRegion的唯一标识为: 表名+开始主键+唯一ID(tableName+startKey+regionId)。
通过这个标识符来区分不同的HRegion,这些数据就是元数据(META),而元数据本身也是被保存在HRegion里面的, 所以我们称这个表为元数据表(META Table),里面保存的就是HRegion标识符和实际HRegion服务器的映射关系 。
ROOT表包含 META表所在的区域列表 ,META表包含所有 用户的空间区域列表 ,以及HRegion服务器地址。客户端能够缓存所有已知的ROOT表和META表,从而提高访问的效率 。
启动顺序:在HBase启动的时候,HMaster就会扫描ROOT表,因为这个表只会有一个HRegion,所以这个HRegion的名字是被写死的。当然要把ROOT表分配到一个HRegion服务器中需要一定的时间。
当ROOT表被分配好之后,HMaster就会扫描ROOT表,获取META表的名字和位置,然后把META表分配到不同的HRegion服务器中,最后就是扫描META表,找到所有HRegion区域的信息,把它们分配给不同的HRegion服务器。

ZooKeeper:

作用:
  • ZooKeeper存储的是HBase中ROOT表和META表的位置。
  • ZooKeeper还负责监控各个机器的状态(每台机器到ZooKeeper中注册一个实例)
  • 当HBase Master发生故障的时候,ZooKeeper还负责HBase Master的恢复工作,能够保证在同一时刻系统中只有一台HBase Master提供服务。

数据模型



HBase 数据被建模为多维映射,其中值(表单元)通过 4 个键索引:
value = Map(TableName, RowKey, ColumnKey, Timestamp)即 [行键,列族,列限定符,时间版本]
再来一张图:

说明:这是我上面说的HBase存储的数据介于映射(key/value)和关系型数据之间,于传统的数据库是不同的。当然应用也就不一样
0 0
原创粉丝点击