【学习笔记】大数据技术之HBase

尚硅谷HBase教程(hbase框架快速入门)

思考?

1. RegionServer和Master的区别?

DDL,DML
RegionServer实际存数据的地方,管理数据
Maser管理协调RegionServer,管理表

2. Hbase端口

服务端口: 16000
web端口: 16010

3. HBase写流程中,为什么要和zk进行交互?

第 1 章 HBase 简介

1.1 HBase 定义

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。

1.2 HBase 数据模型

逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional map

1.2.1 HBase 逻辑结构

在这里插入图片描述

1.2.2 HBase 物理存储结构

在这里插入图片描述

1.2.3 数据模型

1)Name Space
命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是 hbasedefaulthbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。
2)Region
类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。
3)Row
HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。
4)Column
HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。
5)Time Stamp
用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。

6)Cell
由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。

1.3 HBase 基本架构

Hbase依赖Zk实现高可用
在这里插入图片描述

架构角色:
1)Region Server
Region Server 为 Region 的管理者,其实现类为 HRegionServer,主要作用如下:
对于数据的操作:get, put, delete;
对于 Region 的操作:splitRegion、compactRegion。

2)Master
Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:
对于表的操作:create, delete, alter
对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个 RegionServer的状态,负载均衡和故障转移。

3)Zookeeper
HBase 通过 Zookeeper 来做 Master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。

4)HDFS
HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持。

第 2 章 HBase 快速入门

2.1 HBase 安装部署

2.1.1 Zookeeper 正常部署

首先保证 Zookeeper 集群的正常部署,并启动之:

[atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
[atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkServer.sh start
[atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkServer.sh start

2.1.2 Hadoop 正常部署

Hadoop 集群的正常部署并启动:

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

2.1.3 HBase 的解压

解压 Hbase 到指定目录:

[atguigu@hadoop102 software]$ tar -zxvf hbase-1.3.1-bin.tar.gz -C /opt/module

配置环境变量

sudo vim /etc/profile.d/my_env.sh

#HABSE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile

分发环境变量

[wanghaha@hadoop102 module]$ scp /etc/profile.d/my_env.sh root@hadoop103:/etc/profile.d
root@hadoop103's password: 
my_env.sh                      

2.1.4 HBase 的配置文件

修改 HBase 对应的配置文件。
1)hbase-env.sh 修改内容:

[wanghaha@hadoop103 kafka]$ echo $JAVA_HOME
/opt/module/jdk1.8.0_212

export JAVA_HOME=/opt/module/jdk1.8.0_212
export HBASE_MANAGES_ZK=false
# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

2)hbase-site.xml 修改内容:
默认端口号2181

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
 <!-- 0.98 后的新变动,之前版本没有.port,默认端口为 60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property> 
<name>hbase.zookeeper.quorum</name>
 <value>hadoop102,hadoop103,hadoop104</value>
</property>
<property> 
<name>hbase.zookeeper.property.dataDir</name>
 <value>/opt/module/zookeeper-3.5.7/zkData</value>
</property>
</configuration>

3)regionservers:

hadoop102
hadoop103
hadoop104

4)软连接 hadoop 配置文件到 HBase

[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml /opt/module/hbase-1.3.1/conf/core-site.xml
[atguigu@hadoop102 module]$ ln -s /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml /opt/module/hbase-1.3.1/conf/hdfs-site.xml

2.1.5 HBase 远程发送到其他集群

[atguigu@hadoop102 module]$ xsync hbase/

2.1.6 HBase 服务的启动

1.启动方式
在这里插入图片描述

[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver

在这里插入图片描述

提示:如果集群之间的节点时间不同步,会导致 regionserver 无法启动,抛出ClockOutOfSyncException 异常。
修复提示:
a、同步时间服务
请参看帮助文档:《尚硅谷大数据技术之 Hadoop 入门》
b、属性:hbase.master.maxclockskew 设置更大的值

<property>
 <name>hbase.master.maxclockskew</name>
 <value>180000</value>
 <description>Time difference of regionserver from 
master</description>
</property>

2.启动方式 2

[atguigu@hadoop102 hbase]$ bin/start-hbase.sh

对应的停止服务:

[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh

2.1.7 解决日志冲突

102,103,104

rm -rf /opt/module/hbase-1.3.1/lib/slf4j-log4j12-1.7.5.jar

2.1.8 查看 HBase 页面

在这里插入图片描述
启动成功后,可以通过“host:port”的方式来访问 HBase 管理页面,例如:
http://hadoop102:16010

2.1.9 高可用(可选)

在HBase中HMaster负责监控HRegionServer的生命周期,均RegionServer的负载,如果HMaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对HMaster的高可用配置。
1.关闭HBase集群(如果没有开启则跳过此步)

[atguigu@hadoop102 hbase]$ bin/stop-hbasel.sh

2.在conf目录下创建backup-masters文件

[atguigu@hadoop102 hbase]$ touch conf/backup-masters

3.在backup-masters文件中配置高可用HMaster节点

[atguigu@hadoop102 hbase]$ vim conf/backup-masters
hadoop103
[wanghaha@hadoop102 conf]$ vim hbase-env.sh
# File naming hosts on which backup HMaster will run.  $HBASE_HOME/conf/backup-masters by default.
# export HBASE_BACKUP_MASTERS=${
   HBASE_HOME}/conf/backup-masters

2.2 HBase Shell 操作

2.2.1 基本操作

1.进入 HBase 客户端命令行

[atguigu@hadoop102 hbase]$ bin/hbase shell

2.查看帮助命令

hbase(main):001:0> help

ctrl+backspace向后删
在这里插入图片描述

3.查看当前数据库中有哪些表

hbase(main):002:0> list

2.2.2 namespace操作

  1. 查看所有namespace
hbase(main):002:0> list_namespace
NAMESPACE                                                                                                               
default                                                                                                                 
hbase                                                                                                                   
2 row(s) in 0.1430 seconds

可以通过help来查看用法,注意要用单引号

hbase(main):004:0> help 'create_namespace' 
Create namespace; pass namespace name,
and optionally a dictionary of namespace configuration.
Examples:

  hbase> create_namespace 'ns1'
  hbase> create_namespace 'ns1', {
   'PROPERTY_NAME'=>'PROPERTY_VALUE'}

  1. 创建
hbase(main):005:0> create_namespace 'mydb1'
0 row(s) in 0.9400 seconds

hbase(main):006:0> list_namespace
NAMESPACE                                                                                                               
default                                                                                                                 
hbase                                                                                                                   
mydb1                                                                                                                   
3 row(s) in 0.0120 seconds

hbase(main):007:0> 

  1. 修改namespace
hbase(main):009:0> alter_namespace 'mydb1',{
   METHOD=>'set','createtime'=>'2022-4-6','author'=>'wanghaha'}
0 row(s) in 0.6220 seconds

hbase(main):010:0> describe_namespace 'mydb1'
DESCRIPTION                                                                                                             
{
   NAME => 'mydb1', author => 'wanghaha', createtime => '2022-4-6'}                                                       
1 row(s) in 0.0050 seconds

  1. 修改namespace
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值