IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 透视Hbase数据模型|概念视图|物理视图 -> 正文阅读

[大数据]透视Hbase数据模型|概念视图|物理视图

? ? ?在 HBase 中,数据存储在有行和列的表中。这是与关系数据库 (RDBMS) 的术语重叠,但这不是一个有用的类比。相反,将 HBase 表视为多维映射可能会对理解更有所帮助。

先来看下hbase表模型的专业术语

  1. table (表):一个 HBase 表由多行组成。
  2. row(行):HBase 中的一行由一个行键和一个或多个具有与其关联的值的列组成。行在存储时按行键的字母顺序排序。为此,行键的设计非常重要。目标是以相关行彼此靠近的方式存储数据。常见的行键模式是网站域。如果您的行键是域,您可能应该将它们反向存储(org.apache.www、org.apache.mail、org.apache.jira)。这样,所有 Apache 域都在表中彼此靠近,而不是根据子域的第一个字母展开。
  3. column(列):HBase 中的列由列族和列限定符组成,它们由:(冒号)字符分隔。比如列contents:html由列族contents和限定符html组成
  4. Column Family (列族):Apache HBase中的列被分组为列族。列族中的所有列成员具有相同的前缀。例如,courses:history和courses:math这两个栏目都是courses栏目家族的成员。冒号字符(:)将列族与列族限定符分隔开来。列族前缀必须由可打印字符组成。列族必须在模式定义时预先声明,而列不需要在模式定义时定义,但可以在表启动和运行时动态更改。物理上,所有列家族成员都存储在文件系统上。因为调优和存储规范是在列族级别进行的,所以建议所有列族成员具有相同的通用访问模式和大小特征
  5. Column Qualifier(列限定符):列限定符被添加到列族中以提供给定数据的索引。给定一个列族content,一个列限定符可能是content:html,另一个可能是content:pdf。尽管列族在表创建时是固定的,但列限定符是可变的,并且在行之间可能会有很大差异。
  6. cell(单元格):一个{row, column, version}元组精确指定了HBase中的一个单元格cell。单元格内容是未解释的二进制字节,包含一个值和一个时间戳,它代表值的版本
  7. Timestamp(时间戳):每个值旁边都有一个时间戳,它是一个给定版本的值的标识符。默认情况下,时间戳表示写入数据时 RegionServer 上的时间,但您可以在将数据放入单元格时指定不同的时间戳值。

?Hbase概念视图与本质? ? ?

? ? ? ?假如有一个名为webtable的表,它包含两行(com.cnn.www和com.example.www)和三个列族,分别是contents、anchor和people。

? ? ? ? 在这个例子中,对于第一行(com.cnn.www), anchor包含两列(anchor:cssnsi.com, anchor:my.look.ca), contents包含一列(contents:html)。这个例子包含行键为com.cnn.www的5个版本,以及行键为com.example.www的一个版本。

表webtable?

此表中看起来为空的单元格不占用空间,或者实际上存在于 HBase 中。这就是 HBase“稀疏”的原因。表格视图不是查看 HBase 中数据的唯一可能方式,甚至不是最准确的方式。以下表示与多维map相同的信息。但注意这只是用于说明Hbase模型,可能并不完全准确。?

表webtable的 Hbase Map视图

? ? ?只是这里Hbase 使用的 Map 的主键更加复杂,是一个复合键由?row key行键 、column key列族(一个列族里可以在使用时任意添加拓展列,百万列的级别) ,qualifier列(也称限定符),type和 timestamp构成的KV键值对。

? ? ?如上,其实我们发现每个键都指向一个包含3个键的映射:“contents”,“anchor”和“people”,这个我们称之为列族,列族的定义设置其实也就定义了多维map的框架是什么样,也就是第二层map的个数,我们又可以在第二层每个map里添加任意多个kv(map)键值对,是为列和列值。表的列族是在创建表时指定的,以后很难或不可能修改。添加新的列族也可能很昂贵,因此最好预先指定您需要的所有列族。

? ?Hbase/BigTable 中表示的最后一个维度是时间。所有数据都使用整数时间戳(自纪元以来的秒数)或您选择的另一个整数进行版本控制。客户端可以在插入数据时指定时间戳。如上,同一个rowkey com.cnn.www 的contents:html的值就有多个时间版本。

?Hbase实际的物理视图

? ? ? ?尽管在概念级别Hbase表可能被视为一组稀疏的行,但它们在物理上是按列族存储的。可以随时将新的列限定符 (column_family:column_qualifier) 添加到现有列族中。

? ? ?如上图所示,很好地阐述了hbase数据存储结构,但尤其注意同一个rowkey多个时间戳,不同列族列缺失的情况,是如何存储的。如下:

? ? ? ?概念视图中显示的空单元格根本没有存储,稀疏的。因此,对contents:html时间戳列的值的请求t8将不返回任何值,因为t8这个时间戳只有anchor列族有值,而content列族是缺失的。同样,对anchor:my.look.ca时间戳值的请求t9不会返回任何值。但是,如果未提供时间戳,则将返回特定列的最新值。给定多个版本,最新的也是第一个找到的,因为时间戳是按降序存储的。

? ? ?注意,假如一个rowkey:com.cnn.www的请求未指定时间戳,则对行中所有列的值的请求结果将是:contents:html? 的timestamp 为t6的值,anchor:cnnsi.com的则是?timestamp为t9的值、anchor:my.look.ca的timestamp为t8 的值。即返回每个rowkey 列族的最新timestamp对应的cell值。

?参考文档:带你学习不一样的Hbase|概述|核心原理_涤生手记-CSDN博客_如何学习hbase?

? ? ? ? ? ? ? ? ? ?Understanding HBase and BigTable - DZone

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:32:08  更:2021-09-23 11:32:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:21:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码