2021-12-21 迈向程序猿的第四十九步

目录

一.Hbase的概述

1.1 Hbase的简介

1.2 Hbase的表模型(重点)

1.2.1 关系型数据库的表模型

1.2.2 Hbase的表模型(重点)

1.3 Hbase的体系架构(重点)

二、Hbase的安装

2.1 单机模式的简要说明(了解)

2.2 伪分布式的搭建(了解)

2.3 完全分布式的搭建(重点)

2.3.1 简要说明

2.3.2 搭建步骤

2.3.3 启动集群

2.3.4 客户端连接集群

2.4 Hbase集群的扩展和退役(了解)

2.4.1 扩展节点

2.4.2 退役节点

第三章 HBASE SHELL(重要)

3.1 namespace的DDL

3.2 table的DDL

3.3. table的CRUD


一.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天哦~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值