大数据概论】【大数据基础】HBase数据结构运行原理是什么?

2020-10-22 09:58发布

4条回答
爱梦 - 拿来吧你
2楼 · 2020-10-22 10:23


HBase数据结构运行原理

霸气的名字 - 喜欢晴天
3楼 · 2020-10-22 18:30

1)Client 先访问 zookeeper,从 meta 表读取 region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 region 信息;

2)根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息;

3)找到这个 region 对应的 regionserver;

4)查找对应的 region;

5)先从 MemStore 找数据,如果没有,再到 BlockCache 里面读;

6)BlockCache 还没有,再到 StoreFile 上读(为了读取的效率);

7)如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,

再返回给客户端。


我的网名不再改
4楼 · 2020-10-25 15:01

数据结构

注意hbase对时间敏感(增删改就是根据时间戳实现的,并不是立刻执行删除数据或者更新数据信息,每次取得最大时间的信息),集群设置时间同步

  1. 命名空间
    命名空间相当于mysql 的database。命名空间中包括了表、权限等信息

  2. Table
    表(相当于mysql中的表),所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在 default 默认的命名空间中

  3. RowKey
    与 nosql 数据库们一样,RowKey 是用来检索记录的主键。访问 HBASE table 中的行,只有三种方式:
    通过单个 RowKey 访问
    通过 RowKey 的 range(正则)访问
    全表扫描
    RowKey 行键 (RowKey)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为10-100bytes),在 HBASE 内部,RowKey 保存为字节数组。存储时,数据按照 RowKey 的字典序(byte order)排序存储。设计 RowKey 时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

  4. Column Family
    列族:HBASE 表中的每个列,都归属于某个列族。列族是表的 schema 的一部 分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于 courses 这个列族。列都是插入数据时增加的,不同的数据行可能拥有不同的列

  5. Cell
    由{rowkey, column Family:columu, version} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。

  6. Time Stamp
    HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个 cell都保存 着同一份数据的某个版本。版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由 HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版 本冲突,就必须自己生成具有唯一性的时间戳。每个 cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE 提供 了两种数据版本回收方式。一是保存数据的最后 n 个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

基于列的数据存储方式

逻辑存储

逻辑上来看HBase的数据结构和关系型数据库的结构类似,有行有列,仅仅多了列族的概念,如下:
在这里插入图片描述

物理存储

实际上在HBase中数据是基于列族存储的,且列族中的列是数据插入时定义的,如下图逻辑上的一行数据在HBase中按照列拆分成多行进行存储
在这里插入图片描述

  1. HBase中每列存储一行数据(一个Cell),且根据时间戳保留了数据的各个版本。

  2. 如果某一行数据 没有某一列取值,那么HBase不用存储任何数据,也不会占用任何存储空间。

数据读写过程及原理

数据读取流程

在这里插入图片描述

  1. Client 先访问 zookeeper,从 meta 表读取 meta表的位置,然后读取 meta 表中的数据。从meta中读取用户表的 region 信息;

  2. 根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息;

  3. 找到这个 region 对应的 regionserver;

  4. 查找对应的 region;

  5. 先从 MemStore 找数据,和 BlockCache(StoreFile缓存) 里面读取数据,如果BlockCache中没有读到则到StoreFile中读。

  6. MemStore 如果读到了数据,需要和 BlockCache(StoreFile)中的数据做版本对比,取最新版本结果返回给客户端

  7. 从 StoreFile 里面读取的数据,先写入 BlockCache,再返回给客户端。

数据写入流程

在这里插入图片描述

  1. Client 向 HregionServer 发送写请求;

  2. HregionServer 将数据写到 HLog(write ahead log)。为了数据的持久化和恢复;

  3. HregionServer 将数据写到内存(MemStore);

  4. 反馈 Client 写成功。

数据 flush 过程

  1. 当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘(StoreFile),将内存中的数据删除,同时删除 HLog 中的历史数据;

  2. 并将数据存储到 HDFS 中;每次flush 都会将内存中的数据保存在HDFS上的一个文件中。

  3. 在 HLog 中做标记点。

数据合并过程

  1. 当数据块达到 4 块(HDFS上同一个Region文件达到四个),Hmaster 触发合并操作,Region 将数据块加载到本地,进行合并;

  2. 当合并的数据超过 256M,进行拆分,将拆分后的 Region 分配给不同的 HregionServer管理;

  3. 当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改.META.;

  4. 注意:HLog 会同步到 HDFS。


征戰撩四汸
5楼 · 2022-04-07 17:23

1、Rowey(行健)

与nosql数据库们一样,RowKey是用来检索记录的主键。访问HBASE table中的行,只有三种方式:

1)通过单个RowKey访问(get)

2)通过RowKey的range(正则)(like)

3)全表扫描(scan)

RowKey行键 (RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100bytes),在HBASE内部,RowKey保存为字节数组。存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

2、Column Family

列族:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部 分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族。

3、Cell

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

关键字:无类型、字节码

4、TimeSTamp(时间戳)

HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个 cell都保存 着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE提供 了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

5、Name Space

命名空间的结构:


相关问题推荐

  • 回答 6

    大数据开发:1、负责公司大数据产品/项目的后台研发;2、负责技术预研,产品设计以及文档编写等工作;3、参与大数据的数据治理和数据处理相关java开发工作;4、参与海量数据处理,业务数据体系的设计、数据统计、分析及数据建模大数据开发要处理大规模的数据...

  • 回答 1

    修改log4j.properties文件中的:# Define the root logger to the system property plsql.root.logger.log4j.rootLogger=./sql.log# Logging Threshold to INFO for queryserver. root logger still at WARN for sqlline cl...

  • 回答 1

    如果没找到解决方法,最好的方法就是重装

  • 回答 1

    杀毒软件关了

  • 回答 2

    1、上传jar包到/opt/software/解压到/opt/module 改名为phoenix2、 复制server和client这俩个包拷贝到各个节点的hbase/lib在phoenix目录下3、向每个节点发送server jar4、向每个节点发送client jar5、在root权限下给/etc/profile 下添加如下内容6、启动Zookee...

  • 回答 1

    安装和配置Phoenix把下载好的安装包放入software目录下解压Phoenix到opt目录下[root@hadoop100 software]# tar -zxvf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz -C /opt进入Phoenix的bin目录下把phoenix-4.14.0-cdh5.14.2-server.jar包复制到hbase目...

  • 回答 7

    phoenix是构建的Hbase之上的,使用标准的SQL操作Hbase,可以做联机事务处理,拥有低延迟的特性。phoenix会把SQL编译成一系列的Hbase的scan操作,然后把scan结果生成标准的JDBC结果集,其底层由于使用了Hbase的API,协处理器,过滤器,处理千万级行的数据也只...

  • 回答 3

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。...

  • 回答 1

  • 回答 2

    可以调一下系统时间,使用date命令,一般节点掉了都是时间不同步。

  • 回答 1

    Hbase安装与启动一,前言二,前期准备  2.1 文件下载  2.2 服务器准备三,配置文件配置  3.1 hbase-env.sh  3.2 hbase-site.xml  3.3 regionservers  3.4 将hbase的bin目录添加到环境变量  3.5 Hbase的官方配置文档四,Hbase服务启动  4.1 ...

  • 回答 3

    首先介绍部署 HBase 之前需要做的准备工作,如 Java、SSH 和 Hadoop 这些先决条件的配置;然后介绍如何安装 HBase,以及如何配置集群中相关文件。同时需要注意的是,本节介绍的是分布式 HBase 集群的部署,在对一台机器修改配置文件后需要同步到集群中的所有...

  • 回答 1

    HBase安装HBase的安装也分为三种,单机版、伪分布式、分布式。我们首先来安装单机版。单机版首先我们去官网下载好HBase的安装包;接下来,将压缩包解压缩到你想安装的目录(我解压到的是/app目录):tar -zxvf hbase-2.1.0-bin.tar.gz /app安装单机版很简...

  • 回答 24

    HBase分布式数据库具有如下的显著特点:容量大:HBase分布式数据库中的表可以存储成千上万的行和列组成的数据。面向列:HBase是面向列的存储和权限控制,并支持独立检索。列存储,其数据在表中是按照某列存储的,根据数据动态的增加列,并且可以单独对列进行...

  • 回答 9

    1、查看单行记录:get '表名称', '行名称'2、查看表中的记录总数:count '表名称'3、查看表所有记录:scan 表名称4、查看表某个列所有记录:scan 表名称 , ['列名称:']5、查看有哪些表:list6、查看表结构:describe '表...

  • 回答 15

    hbase与传统数据库的区别1.数据类型:Hbase只有简单的数据类型,只保留字符串;传统数据库有丰富的数据类型。2.数据操作:Hbase只有简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系;传统数据库通常有各式各样的函数和连...

没有解决我的问题,去提问