HBase

HBase简介:

hadoop生态系统:
在这里插入图片描述
SQL关系型数据库: Oracle Mysql
NOSQL非关系型数据库: redis HBase

HBase:

1: Hadoop Database:是一个高可靠性,高性能,面向列,可伸缩.实时读写的分布式数据库
2: 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中海量的数据
3: 利用Zookeeper作为其分布式协同服务
4:主要用来储存非结构化和半结构化的松散数据(NOSQL数据库)

高可靠: 解决了单点问题(主备节点)
分布式: 底层是基于HDFS进行存储的

HBase数据模型;
Row Key:
1: 一行数据的主键(插入/查询数据的都会通过row key进行标识)
2: 存放数据的时候会按照字典顺序进行排序
提高了增删改查的效率
两种插入方法:
1: 手动赋值
2: 自动赋值 key的生成策略,生成的数据要唯一
2.1:队列
2.2: UUID
3:Row Key只能存储64k的字节数据
4: 插入数据或者查询数据都会通过rowkey进行标识
(访问hbase tables中的行,只有三种方式 1: 通过单个row key 访问 2: 通过row key的range 3 全表扫描)

Time Stamp(时间戳,版本号)
1: HBase是不能修改底层数据文件的,底层是HDFS,这种的办法,版本号 Version
2: 在 HBase每个存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同的版本数据按照时间的倒序排序,最新的数据版本排在最前面(所以我们到的也是最新的版本数据)
3:时间戳的类型是64位整形 8个字节
4:时间戳可以由HBase(在数据写入时自动)赋值,此时的时间戳是精确到毫秒的当前系统时间
5: 时间戳也可以由客户显示赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳
6: 时间戳具有唯一性

Column Family列族
关系型数据库
非关系型数据库
每一列都是属于一个列族,列族需要在创建表的时候预先给出
列名以列族为前缀,新的列成员可以动态加入
例如courses:history , courses:math 都属于 courses 这个列族
权限控制和调优都在列族中进行
HBase存储列族的时候统一存储在统一目录下
qualifier:列(限定词
隶属于列族
可以动态的添加
Cell:单元格(保存着同一份数据的多个版本)
有列和行坐标交叉决定
数据存储的一个单元
默认由四个维度组合获取
cell中的数据是没有任何类型的,全部是由字节码来存储的
单元格的内容是没有解析的字节数据
数据存储:
1:tables中存放数据都是按照 row key的字典顺序排列的,在行的方向切割成多个Region
2:每个表一开始只有一个region,但是随着数据的不断插入,region会越来越大,当达到阈值的时候,就会分成两个

HBase架构:
在这里插入图片描述

Client:访问HBase,内置了cache(缓存),可以加快对HBase的访问

Zookeeper:
监控:
1: 分布式集群协调系统,保证一个集群只有一个HMaster
2: 管理 RegionServer的上线或者下线,并将信息通知给HMaster
资源共享:
1: 存储HMaster的元数据信息(即表的信息)
2: 保证了Region的寻址入口

Master:
1: 为Region server 分配region
2:负责Region server的负载均衡
3:如果zookeeper通知master region server下线了,master会将他存放的region转移
4: 管理用户对tables的创建,删除,修改 (ddl)操作

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

Region:
1: HBase自动把表水平的划分衬衣多个区域,每一个region会保存一个表中的某段连续的数据
2: 每张表一开始只有region,随着数据不断的插入表中,region会不断的变大,当增大到一个阈值的时候,region就会等分为两个新的region
3: 当table的行不断的增加,就会有越来越多的region,这样一张完整的表被保存在多个regionserver上

store:
1: 一个region由多个store中组成的,一个store对应一个CF(列族)
2: 当storefile文件的数量增长到一定的阈值后,系统会进行合并,在合并的过程中进行版本的合并和删除工作,形成更大的storefile
3: 当一个region所有的storefile的大小和数量超过一定阈值后,会把当前的region分割成两个,并有 hmaster分配到相应的regionserver服务器,实现负载均衡
4:客户端在检索数据的时候先在Memstore中找,找不到再去storefile中找

储存:
1:table中所有的数据(行)都是按照row key的字典顺序排序的,且在行的方向上分割为多个
在这里插入图片描述
2:region按照大小分割,每一个表一开始只有一个region,随着数据的不断插入,region不断增大,当增大道region的阈值的时候,region就会分割成两个新的region,当taible中的行越来越多的时候,就会有越来越多的region
在这里插入图片描述
3: region是HBase中分布式存储和负载均衡的最小单元,最小单元就表示不同的region可以分布在不同的region server上,但是一个region不会拆分到多个region server上
在这里插入图片描述
4: region是由一个或者多个store组成,每个store保存一个cloumns family,每个store又由一个memStore和0或者多个Storefile组成,同时Storefile是以HFile格式保存在HDFS上
在这里插入图片描述
在这里插入图片描述
HFile的格式为:
在这里插入图片描述
Trailer格式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
系统架构:
在这里插入图片描述

存放数据的流程:

1: 创建表
客户端发送请求给Master
Master给出响应在Regionserver上创建Region
创建表的元数据会放在zookeeeper中
2: 数据的增删改查
1: 首先我们查找当前操作的表对应的Region,Region对应的Regionserver,去zookeeper上面查找
2: 为了提高数据操作的效率.,首先先将数据写入Memstore(基于内存存放的)
3: 如果数据在内存中达到阈值,开始溢写成Storefile,于是一个store中会有多个storefile
4:随着时间的推移:storefile–>>store–>> Region(变大)–>>Row key(变多)
5:Regionserver发现Region达到10G阈值的时候,将Region分割成两份,切割的时候,并不是严格意义上的等切,而是按照对应的Row key的记录切分,这样就可以保证一条数据完整的存在于一个Region中,增加查询的速度,随着时间的推移,有可能被切分的Region由达到了10G,这样的话就就会切分

数据写出的问题:
1: 每次将多个小的storefile合并成一个大的storefire
2: 每次客户写入数据的时候,会将数据先写入memstore中,当达到阈值的时候,regionserver会启动flashcache的进程将memstore中的数据写出到storefile,一个memstore对应一个storefile,当storefile达到阈值的时候.会对storefile进行合并操作.
3:客户端查询数据的时候,优先去memstore中去查询,找不到再去storefile中查找

数据安全问题:
假如刚写入数据到Memstore中的时候,断电了
HLog:是一个基于Sequenec(队列文件)在做任何操作之前,现将本次操作信息记录到HLog中
Key:
1: region信息
2: tables信息
3: 版本号 timestamp
4:队列编号
Value:
1: Key
2: Vlaue

如何快速的找到Region:
系统如何找到某个row key所在的region
1: bigtable使用三层类似B+树的结构来保存region的位置
2: 第一层是保存zookeeper里面的文件,他持有root,region的位置
3: 第二层root region表,第一个regiuon其中保存了.meta .z表其他region的位置
4: 第三层是.meta. 他是一个特殊的表,保存了HBase中所有数据的位置信息
在这里插入图片描述

HBase的安装:

W5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RhaVlhbmdi,size_16,color_FFFFFF,t_70)

1:解压安装HBase
tar -zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz
2: 配置regionservers的主机名: cd /opt/shsxt/hbase-0.98.12.1/conf
在这里插入图片描述
3: 配置backup-masters(备用主节点 node2是备用节点)
我们启动主节点的时候,备用节点会自动启动

在这里插入图片描述
4:配置hbase-env.sh:

  1. 配置JAVA_HOME=/usr/java/jdk1.7.0_67
  2. 配置HBASE_MANAGERS_ZK=false
    在这里插入图片描述
    在这里插入图片描述
    5: 配置hbase-site.xml
    在这里插入图片描述
    在这里插入图片描述
    6:添加hdfs-site.xml到conf目录下(我们刚才使用了hdfs集群的名字,需要hdfs的配置信息)
    cp /opt/sxt/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ./

7: 修改profile文件
在这里插入图片描述
8: 拷贝文件(hbase和profile给node2 node3)
scp -r /opt/shsxt/hbase-0.98.12.1/ root@node2:/opt/shsxt/
scp -r /opt/shsxt/hbase-0.98.12.1/ root@node3:/opt/shsxt/
scp -r /etc/profile root@node2:/etc/profile
scp -r /etc/profile root@node3:/etc/profile

9:
启动ZooKeeper集群: zkServer.sh start
启动hadoop集群: start-all.sh
启动Hbase: start-hbase.sh

在这里插入图片描述
http://192.168.26.101:60010
在这里插入图片描述
进入 hbase shell的脚本编辑器

在这里插入图片描述
创建表: create ‘user’,‘info’,'score’
在这里插入图片描述
scan ‘表名’ 查看记录
在这里插入图片描述
添加记录: put ‘user’,‘row1’,‘info;name’,'chenming’
在这里插入图片描述
exit: 退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值