-
概念特性:
hbase是一个数据库(vs hive?) ----可以提供数据的实时随机读写
hbase写mysql.oracle.db2.sqlserver等关系型数据库不同,它是一个NoSQl数据库(非关系型数据库)
hbase 的表模型与关系型数据库的表模型不同;
hbase 的表没有固定的字段定义;
hbase 的表中每行存储的都是一些key-value对;
hbase 的表中有列族的划分,用户可以指定将哪些kv插入哪个列族;
hbase 的表在物理存储上,是按照列族来分割的,不同列族的数据一定存储在不同的文件中;
hbase 的表中的每一行都固定有一个行键(RowKey),而且每一行的行键在表中不能重复;
hbase 中的数据,包含行键,包含key,包含value,都是byte[]类型,hbase不负责为用户维护数据类型;
hbase对事物(transaction)的支持很差
hbase相比于其他nosql数据库(mongodb.redis.cassendra.hazelcast)特点:
hbase的表数据存储在HDFS文件系统中
从而,hbase具备如下特性:存储内容可以线性扩展;数据存储的安全性可靠性极高!
安装HBASE:
HBASE是一个分布式系统
其中有一个管理角色:HMaster(一般2台,一台active,一台backup)
其他的数据节点角色:HRegionServer(很多台,看数据容量)
- 安装准备:
首先,要有一个HDFS集群,并正常运行; regionserver应该跟hdfs中的datanode在一起
其次,还需要一个zookeeper集群,并正常运行
然后,安装HBASE
角色分配如下:
Hdp01: namenode datanode regionserver hmaster zookeeper
Hdp02: datanode regionserver zookeeper
Hdp03: datanode regionserver zookeeper
集群时间同步:
yum install -y ntp --安装时间同步服务
service ntpd start --启动时间同步服务(保持网络通畅)
chkconfig ntpd on --设置成开机自启
data -s ‘2018-08-23 14:28:30
- 安装步骤:
- 安装zookeeper
- 安装hbase
注意:hbase集群的服务器时间同步要求非常严格,机器之间的时间差不能超过30s
设置linux系统时间的命令:date -s '2017-11-08 16:00:30'
解压hbase安装包
修改conf/hbase-env.sh
export JAVA_HOME=/root/apps/jdk1.7.0_67 export HBASE_MANAGES_ZK=false |
修改hbase-site.xml
<configuration> <!-- 指定hbase在HDFS上存储的路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://hdp01:9000/hbase</value> </property> <!-- 指定hbase是分布式的 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 指定zk的地址,多个用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name> <value>hdp01:2181,hdp02:2181,hdp03:2181</value> </property> </configuration> |
修改 regionservers
hdp01 hdp02 hdp03 |
- 启动hbase集群:
bin/start-hbase.sh
启动完后,还可以在集群中找任意一台机器启动一个备用的master
bin/hbase-daemon.sh start master
新启的这个master会处于backup状态
安装完后,可以通过web请求访问master的状态信息
hbase目录结构介绍
/hbase
hbase.id hbase集群的id
hbase.version hbase当前的版本
.tmp hbase在工作时产生的数据临时目录
MasterProcWALs Master在工作时进程产生的一些日志记录
WALs RegionServer运行时产生的日志记录
data Hbase的数据存储目录
oldWALs 对WALs中日志的一个归档目录
HBASE表模型
hbase的表模型跟mysql之类的关系型数据库的表模型差别巨大
hbase的表模型中有:行的概念;但没有字段的概念
行中存的都是key-value对,每行中的key-value对中的key可以是各种各样,每行中的key-value对的数量也可以是各种各样
- hbase表模型的要点:
一个表,有表名
一个表可以分为多个列族(不同列族的数据会存储在不同的文件中)
表中的每一行有一个"行键rowKey",而且行键在表中不能重复
表中的每一对kv数据称作一个cell
hbase可以对数据存储多个历史版本(历史版本数量可配置)
整张表由于数据量过大,会被横向切分成若干个region(用rowkey范围标识),不同region的数据也存储在不同文件中
hbase会对插入的数据按顺序存储:
其实:hbase中每一个keyValue数据的存储是这样的:
rowkey|columnFamily|key:value
而且,hbase会对存入的keyvalue数据自动排序,排序规则如下:
先按行键,再按列族名,再按key名进行排序(字典顺序,逐字节比较)!
hbase的表中能存储什么数据类型
hbase中只支持byte[]
此处的byte[] 包括了:rowkey,key,value,列族名,表名
HBASE表的物理存储结构:
/hbase/data
/dbname[namespace]
/tablename
/regionid
/columnFamily(有多少个列族就有多少个ColumnFamily文件夹)
/数据文件(StoreFile->HFile)
hbase命令行客户端操作
启动命令行客户端