当前位置:   article > 正文

hbase查看表结构_带你涨姿势,Hbase 概念原理扫盲 !

hbase的webui如何看表结构

加个“星标”,每天上午 09:25,干货推送!

a320ab4eb34fb3472f3ed791a48e0227.png

来源:https://www.cnblogs.com/bainianminguo/p/12110077.html
作者:bainianminguo

一、Hbase简介

1、什么是Hbase

Hbase的原型是google的BigTable论文,收到了该论文思想的启发,目前作为hadoop的子项目来开发维护,用于支持结构化的数据存储。

Hbase是一个高可靠性(存储在hdfs上,有副本机制),高性能,面向列,非关系型的数据库(类似redis),可伸缩的分布式存储系统(因为是存储在hdfs上),利用hbase技术可在廉价PC
server上搭建大规模结构化的数据库存储集群。

Hbase的目标是存储并处理大型的数据,更具体来说仅需使用普通的硬件,就能够处理由成千上万行和列所组成的大型数据。

Hbase是基于hdfs构建的分布式存储框架,但是Hbase在hdfs上实现随机的读写改,解决了hdfs不支持的东西

2、Hbase的特点

A、海量存储

B、列式存储

这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的,列族下面可以有非常多的列,列族在创建表的时候必须指定

Hbase中的列和mysql的列不是一个东西,Hbase的列就是他的数据

C、极易扩展

Hbase的扩展性主要体现在两个方面,一个是基于上层的梳理能力的扩展(RegionServer,相当于datanode,处理读写请求),一个是基于存储的扩展(hdfs)

通过横向添加RegionServer的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbase服务更多的Region的能力。

备注:RegionServer的作用是管理Region)(类似mysql中的表的概念),承接客户端的读写请求的访问,这个后面会详细的介绍通过横向添加datanode的机器,进行存储层的扩容,提升Bhbase的存储能力和提升后端存储的读写能力

D、稀疏

稀疏主要是针对于hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的,这里和mysql等数据库不一样,mysql如果每个字段没有值,那这个字段的值为null,不为空,且会占用存储空间

3、Hbase的架构

Hbase的架构示意图如下

7a79b636d8bfd8f22b5da588c3038a76.png

Hbase由HMaster和HRegionServer组成,HMaster的高可用也依赖于zk,类似于hdfs中的Namenode;

HRegionServer相当于hdfs中的datanode,实际处理读写请求的节点;

a、Zookeeper

HBase通过zk来做Hmaster的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等工作,具体工作入下

通过zk来保证集群中只有一个master在运行,如果master异常,会通过竞争机制产生新的master提供服务

通过zk来监控RegionServer的状态,当RegionServer有异常的时候,通过回调的形式通知master,RegionServer上下线的信息

通过zk存储元数据的统一入口地址;

b、HMaster

为RegionServer分配Region

维护集群的负载均衡,就是分配Region

维护集群的元数据信息

发现失效的Region,并将失效的Region分配到正常的RegionServer上

当RegionServer失效的时候,协调对应的Hlog和hdfs的block进行数据恢复

C、HRegionServer

HRegionServer直接对接用户的读写请求,是真正的干活的节点,他的功能概括如下

管理master为其分配的Region

处理来自客户端的读写请求

负责和底层hdfs的交互,存储数据到hdfs中

负责Region变大后的拆分

负责Storefile的合并工作

D、HDFS

Hdfs为hbase提供最终的底层数据存储服务

提供元数据和表数据的底层分布式存储服务

数据的多副本,保证高可靠和高可用

E、Hlog

一个HRegionServer中只有一个Hlog,Hlog相当于hdfs中的edits文件,保存Hbase的修改记录,当对Hbase写数据的时候,数据不是直接写进磁盘,他会在内存中保留一段时间(时间i将数据量的阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Hlog的文件中,Hlog存储在磁盘上,也位于hdfs上,然后在写入内存,所以在系统出现故障或者内存丢失的时候,数据可以通过这个日志文件进行重建

F、Region

Region相当于mysql中的表,一个HRegionServer可以有多个Region,一个HRegionServer会有多个Region;如果表的数据太大,会进行拆分,按照数据量平均切分,所有HBase中的一张表会对应一个或者多个Region,当表的内容很小,一张表就对应一个Region,如果表很大的话,则这个Region会切分,切分Region会同时拆分这个Region的所有Store。

G、Store

Store相当于列族,通俗的讲就是列的家族,在hbase中,想创建一个列,必须要指定列族,也就是一个列必须属于某个列族。一个表中可以有多个列族,一个store对应一个列族,hbase官方不建议多个列族,一个列族就可以搞上百个列,足够用了。但是如果一个HRegion被切分的话,是切分列族,所以就算一个HRegion只有一个列表,切分后一个Region也会对应多个Store,多个strore会被分配到其他的HRegionServer节点进行存储

H、MemStore

MemStore就是列族中的数据放在内存中,写数据来了,会写到内存中,只要内存写入成功,则就返回。

I、StoreFile

StoreFile,数据放在内存不安全,而且有大小限制,所以需要把内存中的数据写到磁盘中,以Hfile的格式存储在hdfs上。每次memstore刷一次,形成一个storefile,所以storefile会很多,但是很小,因为内存本身就不大,后面storeFile也会合并,但是这个合并也仅仅是一个列族内部的StoreFile进行合并,不会跨列族合并的

J、HFile

这是磁盘上保存的原始数据的实际的物理文件,是实际的存储文件,storefile是以Hfile的形式存储在hdfs中

二、Hbase安装

1、首先要安装zk
2、 然后要安装hdfs
3、 最后在安装hbase
4、 解压,修改配置文件

这里重点说下修改配置文件,前面的就不说了,因为我在实际使用过程中使用ambari工具来进行安装

首先修改hbase-env.sh

配置java的环境变量

bd6ee739ba43fc7fcf74c3591876acd5.png
export JAVA_HOME=

配置zk,Hbase也是强依赖于zookeeper的,是否要启用自己的zookeeper。如果用则为true,如果用外部的zookeeper,则为false

b6d642391d01212194282d4110fe2489.png
export HBASE_MANAGES_ZK=

配置hbase-site.xml

ebe0f64966f4abf349df727807877227.png
<property>

配置hbase是否启用集群

e9d07ab5fca0e5a0dd7bb00545542c7b.png
<property>

设置Hbase的服务的端口号,不是 web的端口号,web的端口号是16010

cd3acc6cf9a2df1add42c9309be368f6.png
<property>
aebb0fd8b2506875fe3646762e738f1d.png
<property>

配置要连接的zk

61b942329f2ae23687df1ae3a2648ec9.png
<property>

Zk存储数据的父目录,主要是为了区分多个hbase集群

9234fb6d3da2de8329351c12ca5e6631.png
<property>

配置regionservers文件

指定RegionServer的节点

30af924f9f5d2ef2272601683fbf5697.png

由于hbase是强依赖于hdfs的,需要拷贝hdfs的配置文件到hbase的conf目录

我们一般情况会这样操作,创建一个软链接,链接到hdfs的core-site.xml和hdfs-
site.xml中,就是让hbase知道我要连接哪个hadoop集群

e51aae94a825be6341122b9eea0ac774.png

但是在ambari安装的hbase的配置文件中没有找到相应的配置,但是在hbase启动的时候有加载hdfs的环境变量

0fba013923df64d3dba01e353703fef3.png

启动hbase,可以看到有Hmaster和HRegionServer的java进程

4f403dd8a17246c4481278b775da0450.png

ambari的web页面显示效果如下

8b679485d3ac6c76215c7e4430f8d8d4.png

注意:Hbase的Master和RegionServer安装是一样的,只是看我们是否要启动master

Hbase的web页面,采用16010端口

92303f42bccda7e984bc3292adabdf64.png

三、Hbase的简单shell操作

1、进入hbase shell
/usr/hdp/current/hbase-client/bin/hbase shell
2、查看当前有哪些表:list
003:
3、创建表操作。这里的列族是必须要指定的,就是和mysql的列一样:create "student","info"
:
333418192568f73c8570646d062fbf64.png
f36d9fb68928fd95a71beb29d69dde13.png
4、插入数据。Hbase中的数据没有什么类型,比如字符串,hash等,全部是字节:put

"student","1001","info:name","laowang"

hbase(main):007:0> put 
e59d47d1ee3457c79a40681fd7b2bda4.png
5、扫描查看数据:scan “student”
e02592387d89e9115e2dfe50a5e54bf2.png
6、扫描查看数据,指定起始和截止Rowkey,  前闭后开
54aac91b77918e8670c12ad9730bc640.png
7、  查看指定Rowkey
353265860da90fe3247416f2020b5816.png
8、  查看指定行的指定列
6706bf9518aa354cbd223c878fc41abf.png
9、  更新数据
3c88ee835c1548dd21b24998ffc17d8d.png
10、  查看表结构

重点关注列族和版本即可,这里的版本是个数的意思,就一条数据存储几个版本

43bcf66f1d27c4f41e2720e87c25738a.png
11、  修改列族的版本信息
24dff156f6887bf9b3824194d0fe8916.png

多更新几次数据

cbc9abe77f254d89bd3c36eed5cf5550.png

可以查看到有多个版本,这里的意思查看  3  个版本的数据,所以有三条,下面的命令是查看  2  个版本的数据,所以有两条

d144638e35c4d1913e5b70f3500ece95.png
12、  删除操作

删除某个  Rowkey  的指定列,可以看到其他列的数据还在,删除还可以指定时间戳,该时间戳之前的数据都会被删除

97aacc10aa9d1655829853ca38df972a.png

删除  Rowkey  对应的所有数据

5fcb60959ce7e61b995b1ea0af13fa3a.png
13、统计条数

统计条数,  Rowkey  有几个,条数就有几条

0daa5bac7f48af1b88e0f9c89ae8b8b3.png
14、清空表
0737d3c401a3a79b5a49e862b7f8dbcc.png
15、删除表
6a4d3ae6502d396d5d2aaec8179939c6.png
16、命名空间(namespace)操作

命令空间,相当于数据库中的  database

所有的表都是命名空间的成员,如果不指定,则默认在  default  的命名空间中

命名空间可以设置权限,比如定义访问控制列表,例如创建表,读取表,删除,更新操作,权限用的很少

Shell  命令查看  namespace  、创建  namespace

62dc22111c8c56fb84105d57b668aee6.png

Hbase  就是存储元数据的命名空间,是系统自己用的,不能给用户使用

在指定命名空间下建表

fe39db79390d20e96c882d68bc0bc7aa.png
e3d5b091e3f44fea7c81c8515d870acf.png

四、Hbase的数据结构

1、Rowkey

Rowkey  是用来检索记录的主键,访问  Hbase table  中的行,只有三种方式

A、  通过单个  Rowkey  访问

B、  通过  Rowkey  的  range  访问

C、  全表扫描

设计  Rowkey  非常重要也是  Hbase  里最重要的一门学问,数据会按照  Rowkey  的字典序排序进行存储,所以设计  Rowkey
要利用这个特性,把经常一起读取的行存储在一起,学习Hbase,Rowkey设计是学习的重点

2、Column Family

列族,  Hbase  表中的每个列,都会属于某个列族,列族是表的结构的一部分,列族在建表的时候必须要指定。列名都是以列族做为前缀。

在创建表的时候需要指定列族,列族可以指定多个

3、Cell

由  Rowkey  ,  column Family  :column  ,  version  唯一确定的单元,  cell
中的数据是没有类型的,全部都是字节的形式存储

e9351feb75cfe0b567cb385d91ec2859.png
4、Time Stamp

时间戳,每个  cell  都保存着同一份数据的多个版本,版本通过时间戳来索引。时间戳可以由系统生成,也可以自己指定。每个  cell
中,不同版本的数据按照时间倒序排列,即最新的数据在最前面

通过时间戳不同来确定版本的

五、Hbase的原理

Hbase  的写比读还快

1、读流程,  hmaster  没有关系,  hmaster  挂掉后,不影响读流程
1899a4a6e58de8e8ac10a57343a23317.png

a、先获取  meta  表的位置,也就元数据这张表存储的位置

b、  去  meta  表所在位置获取  meta  表的信息,  meta  表存储的内容大致入下

----10000 rs1

c、  然后在去对应的  regionserver  获取对应的数据

d、  获取数据,先去内存中获取,如果内存中没有,到  blockcache  中获取,如果  blockcash
没有,则去磁盘获取,这里为什么先去内存获取数据?

e、  返回数据的时候,先把数据写到  blockcache  中,然后在返回给  client

Meta  表的位置

10eb01fa9e1918713f91ed9cedd5f968.png

Zk  上查看  meta  表的存储位置

1ac7071e4ead629a21cfa173c1f39122.png

查看meta表的内容

9d12902c625dd07685fd0273af5517a8.png
2、  写流程,和Hmaster没有关系
0c74ff40a7b5cc9901a048c4e8e35ffd.png

a、client  到  zk  获取  meta  表的位置

b、Zk  返回  meta  表的位置

c、Zk  去  regionserver  读取  meta  表的内容

d、Regionserver  将  meta  表的内容返回

e、去对应的  regionserver  开始执行写操作,先写  Hlog  文件,然后写到  memstore  ,成功后,立刻返回,写入流程完成

因为先写到内存中,那么什么时候会刷到硬盘中呢

a、Regionserver  的使用的总内存达到堆内存的  40%

4833b6f94971741f243f2bb2fc788db3.png

b、  满足一个小时的条件,会刷  memstore  到硬盘中

1da2ad5ab0397112592c9d6ffb8bc121.png

c、单个  region  里的所有的  Memstore  加起来达到  128MB  ,则会刷  memstore  到硬盘中

f693cf91d684ed1b3710cd6becd9584a.png

这样就会有很多小文件刷到  hdfs  中,但是  hdfs  不适合存储很多的小文件

默认是  7  天做一次合并

15f3cee1e21c35cbe3f29512205cf621.png
51235c8139931daf025381754037e734.png

超过  7  天合并  storefile  文件

超过  3  个  storefile  文件,会进行合并

这个是合并一个列族的的  storefile  ,不同列族的  storefile  文件不会进行合并的

3、高可用

Hmaster是Active  和  standby  模式

a39ae53a1e2957ed43a64a33336555e6.png
57e531f3dd593825eb45a14cf2c5a07d.png

高可用配置

30c30675a3b3266ebdfd57709b17fae9.png

扫描查看数据

推荐阅读:

  • HTTP 无状态中的 "状态" 到底指的是什么?

  • 我必须得告诉大家的MySQL优化原理

  • 从后端架构演化史再谈云原生,一文解读云原生架构!

  • 应该选择RabbitMQ还是Kafka?

  • 前后端分离模式下的权限设计方案

538e0fb038e86bd7c722b40e29eac06a.png如有收获,点个在看,诚挚感谢8e4d9434ad7ddd23087c083bf08eb3f5.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/905126
推荐阅读
  

闽ICP备14008679号