详解HBase表的数据模型

目录
  • 表(Table)
  • 1. rowkey行键
  • 2. Column Family列族
  • 3. Column列
  • 4. cell单元格
  • 5. Timestamp时间戳
  • 理解数据模型各概念的图

HBase是运行在Hadoop集群上的一个数据库,与传统的数据库有严格的ACID(原子性、一致性、隔离性、持久性)要求不一样,HBase降低了这些要求从而获得更好的扩展性,它更适合存储一些非结构化和半结构化的数据。

下面给大家详细介绍HBase表的数据模型,内容如下所示:

表(Table)

HBase 中的数据以表的形式存储。同一个表中的数据通常是相关的,使用表主要是可以把某些列组织起来一起访问。表名作为 HDFS 存储路径的一部分来使用,在 HDFS 中可以看到每个表名都作为独立的目录结构。

HBase表的数据模型主要概念包括rowkey、Column Family、Column、cell、Timestamp。

1. rowkey行键

  • table的主键,table中的记录==按照rowkey 的字典序进行排序==
  • rowkey行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes)

2. Column Family列族

  • 被称为列族或列簇
  • HBase表中的每个列,都归属与某个列族
  • 列族是表的schema的一部分(而列不是),即建表时至少指定一个列族
  • 比如创建一张表,名为user,有两个列族,分别是userInfoaddressInfo,建表语句create 'user', 'userInfo', 'addressInfo'

3. Column列

  • 列肯定是表的某一列族下的一个列,用列族名:列名表示,如userInfo列族下的name列,表示为userInfo:name
  • 它属于某一个ColumnFamily,类似于我们mysql当中创建的具体的列

4. cell单元格

  • 知道row key行键、列族、列,可以确定的一个cell单元格
  • cell中的数据是没有类型的,全部是以字节数组进行存储

5. Timestamp时间戳

  • 可以对表中的Cell多次赋值,每次赋值操作时的时间戳timestamp,可看成Cell值的版本号version number
  • 即一个Cell可以有多个版本的值

理解数据模型各概念的图

上表展示的是 HBase 中的用户信息表 user,有三行记录和两个列族(不考虑空白的列族,代表可以有很多列族),行键分别为 1、2 和 3,两个列族分别为 userInfo 和 addressInfo,每个列族中含有若干列,如列族 userInfo 包括 name、age、sex 3列,列族 addressInfo 包括 address、from、phone、email、ralary 5列。

在 HBase 中,列不是固定的表结构,在创建表时,不需要预先定义列名,可以在插入数据时临时创建。

从表的逻辑模型来看,HBase 表与关系型数据库中的表结构之间好像没什么差别,只不过多了列族的概念。但实际上是有很大差别的,关系型数据库中表的结构需要预先定义,如:列名及其数据类型和值域等内容。

当需要添加新列,则需要修改表结构,这会对已有的数据产生很大影响。同时,关系型数据库中的表为每个列预留了存储空间,即表中的空白 Cell 数据在关系型数据库中以“NULL”值占用存储空间。因此,对稀疏数据来说,关系型数据库表中就会产生很多“NULL”值,消耗大量的存储空间。

与面向行存储的关系型数据库不同,HBase 是面向列存储的,且在实际的物理存储中,列族是分开存储的,即表中的用户信息表将被存储为 userInfo 和 addressInfo 两个部分。

同时HBase存在时间戳,可以多次对一个cell赋值,可以存储多个版本的值,如上表中rowkey为1的数据存储了2个时间版本的数据。

到此这篇关于详解HBase表的数据模型的文章就介绍到这了,更多相关HBase数据模型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Hadoop+HBase+ZooKeeper分布式集群环境搭建步骤

    目录 一.环境说明 2.1 安装JDK 2.2 添加Hosts映射关系 2.3 集群之间SSH无密码登陆 三.Hadoop集群安装配置 3.1 修改hadoop配置 3.2 启动hadoop集群 四.ZooKeeper集群安装配置 4.1 修改配置文件zoo.cfg 4.2 新建并编辑myid文件 4.3 启动ZooKeeper集群 五.HBase集群安装配置 5.1 hbase-env.sh 5.2 hbase-site.xml 5.3 更改 regionservers 5.4 分发并同步安装

  • 通用MapReduce程序复制HBase表数据

    编写MR程序,让其可以适合大部分的HBase表数据导入到HBase表数据.其中包括可以设置版本数.可以设置输入表的列导入设置(选取其中某几列).可以设置输出表的列导出设置(选取其中某几列). 原始表test1数据如下: 每个row key都有两个版本的数据,这里只显示了row key为1的数据 在hbase shell 中创建数据表: create 'test2',{NAME => 'cf1',VERSIONS => 10} // 保存无版本.无列导入设置.无列导出设置的数据 create '

  • 深入浅析hbase的优点

    hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模式,并从Hadoop的MapReduce程序模型中获益.这意味着在一组商业硬件上存储许多具有数十亿行和上百万列的大表.除去Hadoop的优势,HBase本身就是十分强大的数据库,它能够融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理的能力.总的来说,Hbase能够让你在大量的数据中查询记录,也可以从中获得综合分

  • Hbase列式存储入门教程

    目录 1.逻辑结构 2.物理结构 3.增删改查 4.应用场景 5.参考资料 HBase是一种分布式.可扩展.支持海量数据存储的NoSQL数据库.分布式是因为HBase底层使用HDFS存储数据,可扩展也是基于HDFS的横向扩展能力,作为大数据的存储当然支持海量数据的存储,NoSQL非关系型数据库表结构和关系型数据库(如Mysql)的逻辑结构.物理结构很不一样,性质特点.应用场景也不一样. 1.逻辑结构 1)Name Space 命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间

  • 10大HBase常见运维工具整理小结

    摘要:HBase自带许多运维工具,为用户提供管理.分析.修复和调试功能.本文将列举一些常用HBase工具,开发人员和运维人员可以参考本文内容,利用这些工具对HBase进行日常管理和运维. HBase组件介绍 HBase作为当前比较热门和广泛使用的NoSQL数据库,由于本身设计架构和流程上比较复杂,对大数据经验较少的运维人员门槛较高,本文对当前HBase上已有的工具做一些介绍以及总结. 写在前面的说明: 1) 由于HBase不同版本间的差异性较大(如HBase2.x上移走了hbck工具),本文使用

  • hbase 简介

    概述 HBase是一个构建在HDFS上的分布式列存储系统: HBase是基于GoogleBigTable模型开发的,典型的key/value系统: HBase是ApacheHadoop生态系统中的重要一员,主要用于海量结构化数据存储: 从逻辑上讲,HBase将数据按照表.行和列进行存储. 与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力. Hbase表的特点 大:一个表可以有数十亿行,上百万列: 无模式:每行都有一个可排序的主键和任意多的列,

  • Hbase入门详解

    1.hbase概述 1.1 hbase是什么 hbase是基于hdfs进行数据的分布式存储,具有高可靠.高性能.列存储.可伸缩.实时读写的nosql数据库. hbase可以存储海量的数据,并且后期查询性能很高,可以实现上亿条数据的查询秒级返回结果. 1.2 hbase表的特性 1.大 hbase表可以存储海量的数据. 2.无模式 mysql表中每一行列的字段是相同,而hbase表中每一行数据可以有截然不同的列. 3.面向列 hbase表中的数据可以有很多个列,后期它就是按照不同的列去存储数据,写

  • 详解HBase表的数据模型

    目录 表(Table) 1. rowkey行键 2. Column Family列族 3. Column列 4. cell单元格 5. Timestamp时间戳 理解数据模型各概念的图 HBase是运行在Hadoop集群上的一个数据库,与传统的数据库有严格的ACID(原子性.一致性.隔离性.持久性)要求不一样,HBase降低了这些要求从而获得更好的扩展性,它更适合存储一些非结构化和半结构化的数据. 下面给大家详细介绍HBase表的数据模型,内容如下所示: 表(Table) HBase 中的数据以

  • 详解vue表单——小白速看

    一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理. v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值而总是将 Vue 实例的数据作为数据来源.你应该通过 JavaScript 在组件的 data 选项中声明初始值. 一组代码,看完text.textarea.

  • 详解MySQL 表中非主键列溢出情况监控

    今天,又掉坑了. 之前踩到过MySQL主键溢出的情况,通过prometheus监控起来了,具体见这篇MySQL主键溢出复盘 这次遇到的坑,更加的隐蔽. 是一个log表里面的一个int signed类型的列写满了.快速的解决方法当然还是只能切新表来救急了,然后搬迁老表的部分历史数据到热表. 亡羊补牢,处理完故障后,赶紧写脚本把生产的其他表都捋一遍. 下面是我暂时用的一个检测脚本,还不太完善,凑合用 分2个文件(1个sql文件,1个shell脚本) check.sql 内容如下: SELECT ca

  • 详解vue 表单绑定与组件

    一.什么是双向数据绑定 Vue.js是一个MV VM框架, 即数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时候,数据也会跟着同步变化.这也算是Vue.js的精髓之处了.   值得注意的是,我们所说的数据双向绑定,一定是对于UI控件来说的非UI控件不会涉及到数据双向绑定.单向数据绑定是使用状态管理工具的前提.如果我们使用vue x那么数据流也是单项的,这时就会和双向数据绑定有冲突. 1.为什么要实现数据的双向绑定 在Vue.js中,如果使用vuex, 实际上数据还

  • 实例详解jQuery表单验证插件validate

    validate插件是一个基于jquery的表单验证插件了里面有许多的常用的一些验证方法我们可以直接调用,具体的我们一起来看看. 例子,html代码 <!DOCTYPE html> <html lang="en"> <head> <include file="Common/Header" /> <meta charset="utf-8"> <script src="/jq

  • 详解hbase与hive数据同步

    hive的表数据是可以同步到impala中去的.一般impala是提供实时查询操作的,像比较耗时的入库操作我们可以使用hive,然后再将数据同步到impala中.另外,我们也可以在hive中创建一张表同时映射hbase中的表,实现数据同步. 下面,笔者依次进行介绍. 一.impala与hive的数据同步 首先,我们在hive命令行执行showdatabases;可以看到有以下几个数据库: 然后,我们在impala同样执行showdatabases;可以看到: 目前的数据库都是一样的. 下面,我们

  • 详解mysql表数据压缩

    目录 [第一部分] 一.表压缩概述: 二.使用表的压缩 三.InnoDB表的压缩优化 1.何时用压缩表 2.数据特性及压缩率 3.数据库压缩和应用程序压缩 4.工作负载特性和压缩率 四.INNODB表是如何压缩的? 1.压缩算法 2.InnoDB数据存储及压缩 五.OLTP系统压缩负载优化 [第二部分]实验: 记得一次面试中,面试官问我是否知道表的压缩,这个时候我才知道mysql有个表压缩这么个功能,今天试用下看看表的压缩率怎么样. 这里分两个部分说明,第一部分:官方文档说明:第二部分:具体实例

  • 详解正则表达式表单验证实例

    先看看效果图: 首先给大家解释一些符号相关的意义 * 匹配前面的子表达式零次或多次: ^ 匹配输入字符串的开始位置:$匹配输入字符串的结束位置 1. /^$/ 这个是个通用的格式. 2. 里面输入需要实现的功能. \d 匹配一个数字字符,等价于[0-9] + 匹配前面的子表达式一次或多次: ?匹配前面的子表达式零次或一次: 下面通过一段代码给大家分析表单验证正则表达式,具体代码如下: <!DOCTYPE html> <html lang="en"> <he

  • 详解vue表单验证组件 v-verify-plugin

    verify github:https://github.com/liuyinglong/verify npm:https://www.npmjs.com/package/vue-verify-plugin install npm install vue-verify-plugin use html <div> <div> <input type="text" placeholder="姓名" v-verify.grow1="

  • 详解Angular2表单-模板驱动的表单(Template-Driven Forms)

    在网页开发中,表单估计是最常用的一个,同时也是最麻烦.最容易出问题的.在一个稍微复杂一点的应用中,我们除了用表单元素收集数据,还需要验证,几个数据之间可能还会相互关联,然后根据不同的数据值调用不同的业务逻辑等. 使用Angular提供的数据绑定的功能,我们可以很容易就在组件中获得用户输入的数据,Angular也提供了几种验证方式方便我们进行数据的校验.但是,一些自定义的数据验证.数据交互和业务逻辑还是需要自己处理. 在Angular2中,提供了2种表单实现方式,分别是'template-driv

随机推荐