大数据技术13:HBase分布式列式数据库

前言:2007年Powerset的工作人员,通过google的论文开发出了BigTable的java版本,即HBASE。2008年HBASE贡献给了Apache。HBase 需要依赖 JDK 环境。


一、Hadoop的局限

HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。

要想明白为什么产生 HBase,就需要先了解一下 Hadoop 存在的限制?Hadoop 可以通过 HDFS 来存储结构化、半结构甚至非结构化的数据,它是传统数据库的补充,是海量数据存储的最佳方法,它针对 大文件的存储,批量访问和流式访问都做了优化,同时也通过多副本解决了容灾问题。

但是 Hadoop 的缺陷在于它只能执行批处理,并且只能以顺序方式访问数据,这意味着即使是最简单的 工作,也必须搜索整个数据集,无法实现对数据的随机访问。实现数据的随机访问是传统的关系型数据 库所擅长的,但它们却不能用于海量数据的存储。在这种情况下,必须有一种新的方案来解决海量数据存储和随机访问的问题,HBase 就是其中之一 (HBaseCassandracouchDBDynamo 和 MongoDB 都能存储海量数据并支持随机访问)

注:数据结构分类:

  • 结构化数据:即以关系型数据库表形式管理的数据;

  • 半结构化数据:非关系模型的,有基本固定结构模式的数据,例如日志文件、XML 文档、 JSON 文档、Email 等;

  • 非结构化数据:没有固定模式的数据,如 WORDPDFPPTEXL,各种格式的图片、视 频等。


二、HBase简介

HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。

HBase 是一种类似于 Google’s Big Table 的数据模型,它是 Hadoop 生态系统的一部分,它将数据 储在 HDFS 上,客户端可以通过 HBase 实现对 HDFS 上数据的随机访问。它具有以下特性:

  • 不支持复杂的事务,只支持行级事务,即单行数据的读写都是原子性的;

  • 由于是采用 HDFS 作为底层存储,所以和 HDFS 一样,支持结构化、半结构化和非结构化的存储;

  • 支持通过增加机器进行横向扩展;

  • 支持数据分片;

  • 支持 RegionServers 之间的自动故障转移;

  • 易于使用的 Java 客户端 API

  • 支持 BlockCache 和布隆过滤器;

  • 过滤器支持谓词下推。


三、HBase Table

HBase 是一个面向 的数据库管理系统,这里更为确切的而说,HBase 是一个面向列族的数据库管 理系统。表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格 (cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。

下图为 HBase 中一张表的:

  • RowKey 为行的唯一标识,所有行按照 RowKey 的字典序进行排序;

  • 该表具有两个列族,分别是 personal office;

  • 其中列族 personal 拥有 namecityphone 三个列,列族 office 拥有 teladdres 两个列。

Hbase 的表具有以下特点:

  • 容量大:一个表可以有数十亿行,上百万列;

  • 面向列:数据是按照列存储,每一列都单独存放,数据即索引,在查询时可以只访问指定列的数据,有效地降低了系统的 I/O 负担;

  • 稀疏性:空 (null) 列并不占用存储空间,表可以设计的非常稀疏

  • 数据多版本:每个单元中的数据可以有多个版本,按照时间戳排序,新的数据在最上面;

  • 存储类型:所有数据的底层存储格式都是字节数组 (byte[])


四、Phoenix

Phoenix HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据。在 Phoenix 之前,如果你要访问 HBase,只能调用它的 Java API,但相比于使用一行 SQL 就能实现数据 查询,HBase API 还是过于复杂。 Phoenix 的理念是 we put sql SQL back in NOSQL ,即你可 以使用标准的 SQL 就能完成对 HBase 上数据的操作。同时这也意味着你可以通过集成 Spring Data JPA 或 Mybatis 等常用的持久层框架来操作 HBase

其次 Phoenix 的性能表现也非常优异, Phoenix 查询引擎会将 SQL 查询转换为一个或多个 HBase Scan,通过并行执行来生成标准的 JDBC 结果集。它通过直接使用 HBase API 以及协处理器和自定义过 滤器,可以为小型数据查询提供毫秒级的性能,为千万行数据的查询提供秒级的性能。同时 Phoenix 还 拥有二级索引等 HBase 不具备的特性,因为以上的优点,所以 Phoenix 成为了 HBase 最优秀的 SQL 中间层。


五、Hbase表的数据结构

一个典型的 Hbase Table 表如下:

5.1 Row Key (行键)

Row Key 是用来检索记录的主键。想要访问 HBase Table 中的数据,只有以下三种方式:

  • 通过指定的 Row Key 进行访问;

  • 通过 Row Key range 进行访问,即访问指定范围内的行;

  • 进行全表扫描。

Row Key 可以是任意字符串,存储时数据按照 Row Key 的字典序进行排序。这里需要注意以下两点:

  • 因为字典序对 Int 排序的结果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21, …,9,91,92,93,94,95,96,97,98,99。如果你使用整型的字符串作为行键,那么为了保持整型的自然序,行键必须用 0 作左填充。

  • 行的一次读写操作时原子性的 (不论一次读写多少列)

5.2 Column Family(列族)

HBase 表中的每个列,都归属于某个列族。列族是表的 Schema 的一部分,所以列族需要在创建表时进行定义。列族的所有列都以列族名作为前缀,例如 courses:history courses:math 都属于

courses 这个列族。

5.3 Column Qualifier (列限定符)

列限定符,你可以理解为是具体的列名,例如 courses:history courses:math 都属于 courses

这个列族,它们的列限定符分别是 history math 。需要注意的是列限定符不是表 Schema 的一部 分,你可以在插入数据的过程中动态创建列。

5.4 Column()

HBase 中的列由列族和列限定符组成,它们由 : (冒号) 进行分隔,即一个完整的列名应该表述为 列族名 :列限定符 。

5.5 Cell

Cell 是行,列族和列限定符的组合,并包含值和时间戳。你可以等价理解为关系型数据库中由指定行 和指定列确定的一个单元格,但不同的是 HBase 中的一个单元格是由多个版本的数据组成的,每个版 本的数据用时间戳进行区分。

1.6 Timestamp(时间戳)

HBase 中通过 row key column 确定的为一个存储单元称为 Cell 。每个 Cell 都保存着同一份数

据的多个版本。版本通过时间戳来索引,时间戳的类型是 64 位整型,时间戳可以由 HBase 在数据写入 时自动赋值,也可以由客户显式指定。每个 Cell 中,不同版本的数据按照时间戳倒序排列,即最新的数据排在最前面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习:Gateway服务网关

一,Gateway服务网关的作用: 路由请求:Gateway服务网关可以根据请求的URL或其他标识符将请求路由到特定的微服务。 负载均衡:Gateway服务网关可以通过负载均衡算法分配请求到多个实例中,从而平衡各个微服务的负载压力。…

爬虫的基本介绍 , 什么是爬虫 , 爬虫的主要功能

走进爬虫 1. 什么是爬虫? 本节课程的内容是介绍什么是爬虫?爬虫有什么用?以及爬虫是如何实现的?从这三点一起来寻找答案! 1.1 初识网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人&#xff…

PythonStudio:一款国人写的python及窗口开发编辑IDE,可以替代pyqt designer等设计器了

本款软件只有十几兆,功能算是强大的,国人写的,很不错的python界面IDE.顶部有下载链接。下面有网盘下载链接,或者从官网直接下载。 目前产品免费,以后估计会有收费版本。主页链接:PythonStudio-硅量实验室 作…

阿里云Centos8安装Dockers详细过程

一、卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \do…

服务器数据恢复-raid5多块磁盘掉线导致上层卷无法挂载的数据恢复案例

服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法…

大文件加密传输助力企业数据交互安全

在当前信息时代,数据成为企业的关键资产和竞争优势。企业为提高效率和创新能力,需要与内外部合作伙伴进行数据交换与协作。然而,在大量数据在网络上传输时,数据安全成为企业不可忽视的挑战。如何确保数据的机密性、完整性和可用性…

【Linux】信号--信号初识/信号的产生方式/信号的保存

文章目录 一、信号初步理解1.生活角度的信号2.技术应用角度的信号 二、信号的产生方式1.通过终端按键产生信号2.调用系统函数向进程发信号3.硬件异常产生信号4.由软件条件产生信号5.进程退出时的核心转储问题 三、信号的保存1.信号其他相关常见概念2.信号在内核中的表示3.sigse…

ubuntu debian mini安装系统 有线选项消失或ens33 ethernet 未托管解决方法

nmcli device status#修改NetworkManager.conf如下 sed s/false/true/ /etc/NetworkManager/NetworkManager.confsed -i s/false/true/ /etc/NetworkManager/NetworkManager.conf#重启生效systemctl restart NetworkManager

智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝠鲼觅食算法4.实验参数设定5.算法结果6.…

phpMyAdmin的常见安装位置

nginx的日志显示有人一直在尝试访问phpMyAdmin的setup.php,用了各种位置。 其实我只有一个nginx,别的什么也没有。 47.99.136.156 - - [01:44:37 0800] "GET http://abc.com:80/phpMyAdmin/scripts/setup.php HTTP/1.0" 404 162 "-"…

生成树基本实验

背景 某公司的二层交换网络中,为了提高网络可靠性,故在二层交换网络中增加冗余链路。为了阻 止冗余链路可能带来的广播风暴,MAC地址漂移等负面影响,需要在交换机之间部署生成树 协议。 实验 一.配置stp en 开启 stp en stp …

PPINN Parareal physics-informed neural network for time-dependent PDEs

论文阅读:PPINN Parareal physics-informed neural network for time-dependent PDEs PPINN Parareal physics-informed neural network for time-dependent PDEs简介方法PPINN加速分析 实验确定性常微分方程随机常微分方程Burgers 方程扩散反应方程 总结 PPINN Par…

R语言【rgbif】——什么是多值传参?如何在rgbif中一次性传递多个值?多值传参时的要求有哪些?

rgbif版本:3.7.8.1 什么是多值传参? 您是否在使用rgbif时设想过,给某个参数一次性传递许多个值,它将根据这些值独立地进行请求,各自返回独立的结果。 rgbif支持这种工作模式,但是具体的细节需要进一步地…

新版Spring Security6.2 - Digest Authentication

前言: 书接上文,上次翻译basic的这页,这次翻译Digest Authentication这页。 摘要认证-Digest Authentication 官网的警告提示:不应在应用程序中使用摘要式身份验证,因为它不被认为是安全的。最明显的问题是您必须以…

IDEA中Terminal配置为bash

简介 我们日常命令行都是使用Linux的bash指令,但是我们的开发基本都是基于Windows上的IDEA进行开发的,对此我们可以通过将IDEA将终端Terminal改为git bash自带的bash.exe解决问题。 配置步骤 安装GIT 这步无需多说了,读者可自行到官网下载…

大模型时代-从0开始搭建大模型

开发一个简单模型的步骤; 搭建一个大模型的过程可以分为以下几个步骤: 数据收集和处理模型设计模型训练模型评估模型优化 下面是一个简单的例子,展示如何使用Python和TensorFlow搭建一个简单的大模型。 数据收集和处理 首先,我…

Python接口自动化 —— Json 数据处理实战(详解)

简介   上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下。首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃了。不仅…

作业12.11

1 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&…

数据结构(超详细讲解!!)第二十七节 查找

1.查找的基本概念 1、查找表——由同一类型的数据元素(或记录)构成的集合称为查找表。 2、对查找表进行的操作: 查找某个特定的数据元素是否存在; 检索某个特定数据元素的属性; 在查找表中插入一个数据元素&#x…

Stable Diffusion AI绘画系列【25】:3D可爱风格系列图片

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…