Hbase基本知识介绍
- 1. Hbase简介
- 1.1 什么是Hbase
- 1.2 与传统关系型数据库的对比
- 1.3 Hbase架构
- 2. Hbase安装模式
- 2.1 单机模式
- 2.2 伪分布式模式
- 2.3 完全分布式模式
- 3. Hbase数据模型
- 3.1 逻辑视图
- 3.2 物理视图
- 3.3 Row Key(行键)
- 3.4 Columns Family(列簇)
- 3.5 Cell(存贮单元)
- 3.6 Time Stamp(时间戳)
- 4. Hbase与Hadoop版本兼容
1. Hbase简介
1.1 什么是Hbase
- Hbase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群;
- Hbase目的是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
- Hbase是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable利用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为对应;
系统 | 文件存储系统 | 海量数据处理 | 分布式协调系统 |
Hbase | Hadoop HDFS | Hadoop MapReduce | Zookeeper |
Google Bigtable | Google GFS | Google MapReduce | Chubby |
1.2 与传统关系型数据库的对比
序号 | 项目 | Hbase | 传统关系型数据库 |
① | 数据量 | 支持线性扩展,可通过节点扩展进行支撑大量数据 | 数据量大时,无法存储 |
② | 查询性能 | 通过zookeeper协调查找数据,访问速度快 | 数据量达到一定程度,查询性能缓慢 |
③ | 备份机制 | 备份机制数据存储在Hadoop HDFS上,备份机制健全 | 没有很好的备份机制 |
1.3 Hbase架构
2. Hbase安装模式
前提:安装jdk 和 hadoop,并配置了它们的环境变量,Hbase与Hadoop版本兼容可参考本文最后的图片
2.1 单机模式
1.直接解压安装包
tar -zxvf xxxxx.tar.gz
2.修改conf/hbase-site.xml,配置hbase使用的数据文件的位置,默认在/tmp/hbase-[username],此目录是linux的临时目录,可能会被系统清空,所以最好修改一下:
<property>
<name>hbase.rootdir</name>
<value>file:///<path>/hbase</value>
</property>
2.2 伪分布式模式
1.修改conf/hbase-env.sh修改JAVA_HOME
export JAVA_HOME=xxxx
2.修改hbase-site.xml,配置使用hdfs
<property>
<name>hbase.rootdir</name>
<value>hdfs://ha01:9000/hbase</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
启动hbase
2.3 完全分布式模式
1.修改conf/hbase-env.sh修改JAVA_HOME
export JAVA_HOME=xxxx
2.修改hbase-site.xml,配置开启完全分布式模式
配置hbase.cluster.distributed为true
配置hbase.rootdir设置为HDFS访问地址
<property>
<name>hbase.rootdir</name>
<value>hdfs://ha01:9000/hbase</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>ha01:2181,ha02:2181,ha03:2181</value>
</property>
3.修改conf/hbase-env.sh禁用对Hbase自身默认的zookeeper的自动管理:
export HBASE_MANAGES_ZK false
4.配置region服务器,修改conf/regionservers文件,其中配置所有hbase主机,每个主机名独占一行,hbase启动或关闭时会按照该配置顺序启动或关闭主机中的hbase
5.HBASE配置文件说明
hbase-env.sh配置HBase启动时需要的相关环境变量
hbase-site.xml配置HBase基本配置信息
HBASE启动时默认使用hbase-default.xml中的配置,如果需要可以修改hbase-site.xml文件,此文件中的配置将会覆盖hbase-default.xml中的配置
修改配置后要重启hbase才会起作用
6.启动集群
启动zookeeper
启动hadoop
启动hbase
访问http://xxxxx:60010来访问web界面,通过web见面管理hbase
也可以通过hbase shell脚本来访问bhase
7.启动备用master实现高可用
hbase-daemon.sh start master
8.关闭集群
stop-hbase.sh
Hbase集群,Hadoop集群和Zookeeper集群的整合后期会在相关文章中进行详细讲解,Hadoop集群的搭建可参考离线计算—Hadoop集群搭建
3. Hbase数据模型
3.1 逻辑视图
3.2 物理视图
- Cell:{row key, columnFamily, version} 唯一确定的单元,无类型,以字节码存储
- 存储形式: Key-Value 形式;
- 多版本特性:通过不同Time Stamp(时间戳)的多个Key-Value来实现的多版本;
- 新的版本:put,delete会产生新的Cell,也就是生成新版本;
- 默认配置:默认只存放数据的三个版本,可以通过配置修改存放的版本数或者版本过期时间;
- 查询:默认返回最新版本的数据,旧数据可通过制定版本号或版本数获取
- CF(列族):相同列族的数据存在相同文件里面,不同列族存在不同文件里面
3.3 Row Key(行键)
Row Key行键,用来检索记录的主键。访问Hbase Table中的行,只有 3 种方式:
- 通过单个row key访问
- 通过row key的range(正则)
- 全表扫描
- 类型:任意字符串
- 长度要求:最大长度是 64KB,实际应用中长度一般为 10-100bytes
- 存储形式:在HBASE内部,row key保存为字节数组。
- 数据存储方式:数据按照Row key的字典序(byte order)排序存储,注:设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。
3.4 Columns Family(列簇)
- Hbase表中的每个列,都归属于某个列族
- 列族是表的schema的一部分(而列不是),必须在使用表之前定义;
- 列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族
3.5 Cell(存贮单元)
- 由{row key, columnsFamily, version} 唯一确定的单元;
- cell中 的数据是没有类型的,全部是字节码形式存贮。
- 关键字:无类型、字节码
3.6 Time Stamp(时间戳)
- Hbase 中通过rowkey和columnsFamily确定的为一个存贮单元称为cell;
- 每个 cell都保存着同一份数据的多个版本;
- 版本通过Time Stamp时间戳来索引,时间戳的类型是 64位整型,Time Stamp时间戳可以由Hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版 本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
- 为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,Hbase 提供了两种数据版本回收方式:一是保存数据的最后n个版本;二是保存最近一段 时间内的版本(比如最近七天)。
- 数据版本当前默认是只存放数据的三个版本,用户可以针对每个列族进行设置;
4. Hbase与Hadoop版本兼容