目录
一.Hbase的概述
1.1 Hbase的简介
1)简要介绍
1. Hbase是一个Hadoop 数据库
2. 是一个非关系型(NoSql:Not Only SQL)的、分布式的、具有良好的扩展性、面向列式存储的数据库。
3. 开发灵感来源于Google的Bigtable论文,java语言编写,并且开源。
2)特性
- 强一致性读/写:具有一致性读和写的功能,适合统计分析聚合类型的任务.
- 自动分片:hbase的表对应的region会根据大小自动拆分,并重写分布
- 自动 RegionServer故障转移
- Hbase的存储是基于HDFS的
- hbase可以和Mapreduce进行整合,从而进行数据分析
- Hbase还提供了java语言的客户端接口
- Thrift/REST API:Hbase也提供了非java语言的连接操作
- Hbase提供了块缓存和布隆过滤器等机制来提高查询效率等
3)何时选择Hbase
1. 当数据量特别大的时候,
2. 集群节点数多于10个的情况下。
3. 以及不需要具有事务、高级查询语言等功能的情况下。
1.2 Hbase的表模型(重点)
1.2.1 关系型数据库的表模型
1. 表模型是面向行式存储的。也就是每一条记录的数据都是紧凑的挨着的。
2. 优点:
-- 用户在插入数据时,效率特别高,只是追加操作。
-- 在查询操作时,比如select * 时效率是非常高的
-- 结构清晰,每一行的列的数量是固定的
-- 支持ACID事务
3. 缺点:
-- 一旦数据表中存储数据后,修改表结构变得特别困难。
-- 如果我们想扩展字段时,会对表结构产生影响。
-- 即使某一行中的某个字段没有赋值,也要使用null填充
-- 一旦涉及到多张表,因为数据表存在着复杂的关系,管理非常不方便。 比如外键约束
-- 一旦面对海量数据的处理时,读写性能特别差,尤其在高并发这一块。
1.2.2 Hbase的表模型(重点)
1、 hbase是面向列(colum family:列簇,列族)式存储的。
2. 定义表的时候不需要指定列名,列类型。只需要指定列族名即可
3. 数据实际上是按照key:value形式存储的,一个kv对通常称之为一个Cell(单元格)
4. 每个kv对后都有一个版本号。版本号是一个时间戳。一个K可以有多个版本
5. 为了方便管理多个KV对,引入了列族的概念。
-- 一个列族对应至少一个文件
-- 列族之间一定是不同的文件
6. 又为了区分KV是不同的事物的,引入了rowkey的概念。 因此rowkey必须具有唯一性
7. 为了管理表的数据,引入了region的概念。一个region对应一张表,或者是一张表的一部分。
region是由rowkey的范围来表示的。
如果一张表只有一个region:
region的rowkey的偏移量:startKey没有最小值,endKey也没有最大值。
8. Hbase的中的所有数据,都是byte[]类型。没有其他类型
9. hbase会在内存里进行排序:
查询时:先按照rowkey排序,然后是列族名排序,再按照key进行排序
实际上插入数据时: 先按照rowkey进行排序,再按照key进行排序 都是字典排序规则
1.3 Hbase的体系架构(重点)
1. Client:hbase的客户端
- hbase提供了客户端使用的API接口
- API里还维护了一个缓存机制,用于加快客户端访问的效率,比如缓存查询过的region的地址
2. Zookeeper
- 维护hbase的高可用,保证只有一个活跃的Hmaster,其他的为backup
- 维护着regionserver的动态上下线感知
- 维护着所有的region地址以及部分元数据
3. Hmaster
- hmaster主要管理着region的负载均衡
(1) 表的第一个region分配的位置
(2) region过大后,进行切分后,形成的新region的重新分配
(3) regionserver宕机后的region的重新分配
- hdfs上的垃圾回收
- 处理新的schama的维护(namespace的创建和删除等)
4. RegionServer
- 主要就是管理本节点上的所有region(包括region的切分)。
- 处理客户端的读写请求
- 负责hlog和storefile的读和写
5. Region
- 实际上就是表,或者是表的一部分。 是Hbase的表的存储单元
- 本质:在hdfs上是目录
6. store
- 一个列族对应一个store
- 本质:在是region目录下的子目录。
7. memstore
- 一个store 对应一个memstore(写缓存),默认大小是128M.
8. Hfile/StoreFile
- 当memstore达到阈值(128M,1小时,或者是内存的40%)就会被flush出来,形成一个storefile。以hfile存储格式存储到HDFS上。
9. hlog:
- 一个regionserver上维护着一个hlog文件。以WAL(write ahead log)格式记录着客户端的操作,防止宕机后丢失数据,然后可以重演一次,以便找回数据。
二、Hbase的安装
2.1 单机模式的简要说明(了解)
就是在一台节点上,解压,配置环境变量,启动一个hmaster服务,没有regionserver服务项,使用本地的文件系统存储数据。
2.2 伪分布式的搭建(了解)
伪分布式,指的是除了有hmaster外,只有一个regionserver服务项。存储的文件系统可以是本地文件系统,也可以使用hdfs。
2.3 完全分布式的搭建(重点)
2.3.1 简要说明
完全分布式,指的就是除了hmaster守护进程外,有多个regionserver守护进程,并且每一个regionserver守护进程独占一个机器节点。使用的文件系统是HDFS。
布局如下:
xxx01: hmaster regionserver
xxx02: hmaster regionserver
xxx03: regionserver
环境说明:
必须配置好集群的免密登录认证
必须配置时间同步。保证集群节点的时间差不能超过30秒,否则regionserver启动失败
2.3.2 搭建步骤
步骤1): 上传、解压、配置环境变量 、重导生效
[root@xxx01 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz -C /usr/local/
[root@xxx01 ~]# cd /usr/local/
[root@xxx01 local]# mv hbase-1.2.1/ hbase
[root@xxx01 local]# vim /etc/profile
.......省略.......
#hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE_HOME/bin:$PATH
[root@xxx01 local]# source /etc/profile
步骤2):配置hbase-env.sh环境脚本
[root@xxx01 local]# vi $HBASE_HOME/conf/hbase-env.sh
#找到下面内容,解开注释,添加具体路径
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false #禁止内置zookeeper
步骤3):配置hbase-site.xml文件
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://xxx01:8020/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>xxx01:2181,xxx02:2181,xxx03:2181</value>
</property>
<!--将属性hbase.unsafe.stream.capability.enforce 改为true -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>true</value>
</property>
<!-- 取消内存检查 -->
<property>
<name>hbase.table.sanity.checks</name>
<value>false</value>
</property>
</configuration>
步骤4):配置regionservers文件,添加regionserver所在机器的host
[root@xxx01 local]# vi $HBASE_HOME/conf/regionservers
删除localhost
添加:
xxx01
xxx02
xxx03
步骤5):配置备份hmaster: 创建backup-masters文件
[root@xxx01 local]# cd $HBASE_HOME/conf/
[root@xxx01 conf]# echo "xxx02">> backup-masters
步骤6): 将hadoop的core-site.xml和hdfs-site.xml拷贝到hbase的conf目录下
[root@xxx01 conf]#
cp $HADOOP_HOME/etc/hadoop/{core-site.xml,hdfs-site.xml} $HBASE_HOME/conf/
步骤7):同步到其他节点上
[root@xxx01 local]# scp -r /usr/local/hbase xxx02:/usr/local
[root@xxx01 local]# scp -r /usr/local/hbase xxx03:/usr/local
[root@xxx01 local]# scp /etc/profile xxx02:/etc/
[root@xxx01 local]# scp /etc/profile xxx03:/etc/
注意:
重新引导一下各个节点的环境变量配置情况
2.3.3 启动集群
启动顺序如下:
第一步:必须先启动hdfs和zookeeper
[root@xxx01 ~]# zkServer.sh start
[root@xxx02 ~]# zkServer.sh start
[root@xxx03 ~]# zkServer.sh start
别忘记:zkServer.sh status查看状态
[root@xxx01 ~]# start-dfs.sh
第二步:启动hbase的守护进程
[root@xxx01 ~]# start-hbase.sh
第三步:检查相关进程
方式1: jps
方式2: webui ---> xxx01:16010
2.3.4 客户端连接集群
1)hbase本身自己就提供了一个命令行连接工具
[root@xxx01 ~]# hbase shell
2)可以使用java语言调用API接口连接
2.4 Hbase集群的扩展和退役(了解)
2.4.1 扩展节点
1)原理说明
regionserver会主动向zookeeper的某一个节点/hbase/rs下注册一个临时节点, 而master一直在监听这个/hbase/rs, 如果突然多了一个临时节点,zookeeper会通知master,从而master可以进行相关任务的分配。
2)具体操作
1)准备节点环境
方法1:选择集群中正常工作的一台机器xxx04
方法2:新搭建一台机器xxx04,保证jdk,hadoop环境配置,hdfs节点动态上线等一系列注意事项
2)搭建hbase环境
- 1. 配置hbase的环境变量
- 2. 配置hbase的hbase-env.sh文件
- 3. 配置hbase的hbase-site.xml文件
强调:要与hmaster节点的配置内容一致。当然可以选择copy
3)在节点上启动regionserver
[root@xxx04 conf]# hbase-daemon.sh start regionserver
4)修改conf/regionservers配置文件
# 将新增节点主机名,添加到regionservers配置文件中,以便下次启动hbase时,带上xxx04
[root@xxx01 conf]# vi regionservers
xxx01
xxx02
xxx03
xxx04
注意:最好同步一下
2.4.2 退役节点
1)原理说明
master一直在监听zookeeper上的这个/hbase/rs, 如果突然少了一个临时节点,zookeeper会通知master,从而master可以进行相关任务的分配。
2)具体操作
1)选择要下线的机器节点
比如,我选择了xxx01
2)卸载该节点的region
[root@xxx01 conf]# graceful_stop.sh xxx01
#该节点的region会逐渐迁徙到其他regionserver上
3)修改conf/regionservers配置文件
# 删除下线的节点主机名,同步到其他节点上
[root@xxx01 conf]# vi regionservers
# xxx01 删除或者注释
xxx02
xxx03
xxx04
注意:最好同步一下
第三章 HBASE SHELL(重要)
hbase(main): > help 查看所有的命令组及其命令 名称
hbase(main): > help 'COMMAND GROUPNAME' 查看命令组里的命令用法
hbase(main): > help 'COMMAND' 查看指定的命令用法
3.1 namespace的DDL
1、列出命名空间: list_namespace
2、创建命名空间: create_namespace
3、描述命名空间: describe_namesapce
4、修改命名空间的属性: alter_namespace
5、删除命名空间:drop_namesapce
3.2 table的DDL
表结构的创建:create
表结构的查看:list、list_namespace_tables、describe
表结构的修改:alter
指的是对列族的增加、或者是列族属性的修改
删除指的就是删除列族。
表结构的删除:disable、disable_all、drop、drop_all
3.3. table的CRUD
表数据的增加:put
表数据的查看:scan、get
表数据的删除:delete,truncate
(-0-,距离周末还有3天哦~)