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架构

hbase 笔试题 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 逻辑视图

hbase 笔试题 hbase基础知识综述_Hbase_02

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 种方式:

  1. 通过单个row key访问
  2. 通过row key的range(正则)
  3. 全表扫描
  • 类型:任意字符串
  • 长度要求:最大长度是 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版本兼容

hbase 笔试题 hbase基础知识综述_hbase 笔试题_03