大数据之hbase_hbase的介绍及安装

hbase简介

hbase是一个用以储存结构化和非结构化数据的分布式列式存储数据库
传统数据库mysql,单节点储存,储存容量小,且是行式储存,当我们需要查询某一个字段的所有数据时,需要将全表都加载一遍,而列式数据库则不需要,大大加快了查询速度.且方便执行压缩算法
hbase支持分布式储存,将数据储存在hdfs中,存储量大,且可以利用不同机器来处理并发请求.
hbase于clickhouse相比,clickhouse支持多维度查询,hbase只支持单维度查询,且不支持sql语句,hbase的数据储存在hdfs中,clickhouse将数据储存在磁盘中.
高可靠性:分布式数据库,将数据存储在hdfs中,会自动生成多个副本数据,使数据更加安全可靠
高性能性:处理数据的速度效率,分布式的数据库就可以利用集群中所有的机器的运算资源处理数据
可伸缩性:从储存和运算能力处理,可以通过添加节点来扩展储存容量和添加运算资源
面向列:在hbase中底层的所有数据都是以key/value组成的字节数据
它介于nosql和RDBMS之间(nosql一般不存储结构化数据 ,hbase结构化和非结构化都存),仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive或者Phoenix支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化和结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

hbase特点

1)海量存储
Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正是因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
2)列式存储
这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3)极易扩展
Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
4)高并发
集群中对外服务的节点叫RegionServer(存储表的部分范围数据)
并发查询的时候 不同的机器节点对外服务 支持高并发
由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
5)稀疏
稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。.

应用场景

HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS并不是取代关系,而是一种补充。
不适合使用
需要数据分析,比如报表(rowkey) 对sql支持不好
单表数据不超过千万(200万)
适合使用HBASE
单表数据超过千万 ,并发量还很高
数据分析需求弱 ,或者不需要那么灵活和实时

hbase架构

在hbase中也分主节点和从节点,主节点:HMaster,从节点:HRegionserver
habse是基于zookeeper才能实现分布式储存和处理数据的
zookeeper的职能:
通过选举保证集群中任何时候都只有一个master,且master和regionserver启动时都会向zookeeper注册
储存所有region的寻址入口,索引表meta所在的服务器
实时监控regionserver的上下线信息,并实时发送给master
存储HBase的schema和table元数据
默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper,但一般我们不会让hbase自己管理一套zookeeper进程,而是让hbase使用我们外部的一个公共zookeeper集群 ,所以我们在安装的时候通常都会配置自己的ZK集群 .Zookeeper的引入使得Master不再有单点故障
HMaster的职能:
为regionserver分配region数据
负责regionserver的负载均衡
发现失效的regionserver并通过拆分LOG重新分配其上的region
管理用户对table定义的各种类的DDL操作

HRegionsever的职能:
管理master为其分配的region
处理来自客户端的读写请求
负责和底层的HDFS的交互,储存数据到HDFS中
负责region变大后的拆分
负责Storefile的合并工作
负责负载均衡的事情

Region:HBase中的数据都是按row-key进行排序的,对这些按row-key排序的数据进行水平切分,每一片称为一个Region,它有startkey和endkey,Region的大小可以配置,一台RegionServer中可以放多个Region
CF:列族。一个列族中的所有列存储在相同的HFile文件中
HFile:HFile就是Hadoop磁盘文件,一个列族中的数据保存在一个或多个HFile中,这些HFile是对列族的数据进行水平切分后得到的。
MemStore:HFile在内存中的体现。当我们update/delete/create时,会先写MemStore,写完后就给客户端response了,当Memstore达到一定大小后,会将其写入磁盘,保存为一个新的HFile。HBase后台会对多个HFile文件进行merge,合并成一个大的HFile

hbase的数据存储模型

hbase中也是有表的概念的,表存储的数据的行数和列数非常多! 百万列
table 代表一个数据集 user: name age ID gender friend 工作 职位…爱好
行键 唯一的确定一行数据 , 行的标识 , 索引 , 全局排序
列族 列的属性相近的划分成一组, 方便管理属性
列名 具体到真正的属性, 行的列只有插入数据的时候才确定
region : 表的行范围数据抽象
储存数据时:
table:行键:列族:属性 总体看作K
最后传入的值 看作V

Region

区别于Cassandra/DynamoDB的”Hash分区”设计,HBase中采用了”Range分区”,将Key的完整区间切割成一个个的”Key Range” ,每一个”Key Range”称之为一个Region。
也可以这么理解:将HBase中拥有数亿行的一个大表,横向切割(rowkey的某个范围—起始rowkey,结束rowkey)成一个个”子表“,这一个个”子表“就是Region:
在这里插入图片描述
Region是HBase中负载均衡的基本单元,当一个Region增长到一定大小以后,会自动分裂成两个。

Column Family (列族,列簇)

如果将Region看成是一个表的横向切割,那么,一个Region中的数据列的纵向切割,称之为一个Column Family。每一个列,都必须归属于一个Column Family,这个归属关系是在写数据时指定的,而不是建表时预先定义。
在这里插入图片描述
列族的意义:
便于用户将数据业务意义上分类管理
注意:
列族不要定得太多,列族名尽可能短!
hbase的物理数据存储,是按列族分开存储的!(所以hbase被称之为列式存储数据库),在对应的HDFS中,一张表对应一个文件夹,下面有表的列族的子文件夹!
如果有张tb_doit表 , 表中有f1, f2两个列族那么在HDFS中就会生成两个文件夹分别是 f1 f2
在这里插入图片描述

HBASE安装

1.首先保证HDFS正常启动,Zookeeper集群启动
2.时间同步
连接外网时间服务器自动同步数据
yum -y install ntpdate.x86_64
ntpdate 0.asia.pool.ntp.org
手动的设置时间 date -s “2020-01-08 17:12:55”
如果没有时间同步抛出ClockOutOfSyncException异常。需要时间同步或者
修改属性:hbase.master.maxclockskew设置更大的值

hbase.master.maxclockskew
180000
Time difference of regionserver from master

3.上传解压
[root@linux01software]$ tar -zxf hbase-2.2.5-bin.tar.gz -C /usr/apps/
4.hbase配置
1)hbase-env.sh修改内容:注意放开注释
export JAVA_HOME=/usr/apps/jdk1.8.0_141/
esc /ZK
export HBASE_MANAGES_ZK=false
2)hbase-site.xml修改内容:

<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://linux01:8020/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>linux01:2181,linux02:2181,linux03:2181</value>
</property>
</configuration>

3)regionservers 配置 启动集群中的Regionserver机器
linux01
linux02
linux03
4 集群分发
[root@linux01 apps]# pwd
/usr/apps
[root@linux01 apps]# scp -r hbase-2.2.5/ linux02:KaTeX parse error: Expected 'EOF', got '#' at position 24: …t@linux01 apps]#̲ scp -r hbase-2…PWD
5.启动
启动方式1
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
启动方式2
[doitedu@c702 hbase]$ bin/start-hbase.sh 一键启动
注意:在Linux01上启动master后,可去linux02再启动一台linux02,此时02会变成备用master,实现高可用模式,但一键启动不会帮我们启动备用master,需要我们一键启动后,再去手动启动一台备用master.
6.页面访问
启动成功后,可以通过“host:port”的方式来访问HBase管理页面,例如:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值