hbase数据库_初接触hbase数据库

我就是我 2023-09-25 11:48 157阅读 0赞



  背景说起来有点复杂,公司的项目旧平台已经弃用(相关人员都离职的七七八八),但是系统却还在运行(虽说是演示系统)。

  在职人让找离职的,离职让找在职的,没办法,只好自己搞。

  就平台跑在k8s集群上,其中一个服务作为大数据平台,数据存储在hbase数据库。

  由于平台没有人运维,一直都有挂掉起不来的可能,之前存储了很多图片在里面,需要及早把图片拷贝出来。

  看了一下历史文档,结合服务器信息,发现数据存储在hbase这个数据库中。既然是数据库,那么应该支持导出才对,但是发现其中存储的数据已经以tb计算了,我的电脑吃不消,于是考虑学习一下hbase,看是否有方法只导出部分数据。

  先说结论:最终也没找到好方法,改为通过写代码导出了。。。

  hbase是hadoop生态环境中的一环,hadoop以我目前的理解,是两个功能,和。

  大数据存储基于(hadoop distributed filesystem),也就是存储在中。而hdfs有一些缺点,例如高延迟,不支持随机访问,于是在其之上,有了数据库,优化了访问方式和速度。

  而属于数据库,与传统数据库区别比较大,其实在之上,还有、等将数据库进行抽象成支持传统的数据库。

  我这里暂时还是聚焦于本身。而且不涉及hadoop/hbase等的安装配置,以及命令行的使用,而是从概念的角度进行叙述。

  可以被很直观的想象成为一张二维表格,每一行是一条数据,每一条数据有哪些数据项是指定好的,就是表的列。而一行中某一个或几个列又有可以被指定为列的,唯一标识这一行。

  在网上可以看到的hbase相比于RDBMS的特点,hbase基于列,而非基于行。这句话个人觉得可能并不是那么准确,或者说不能很容易被理解。我想结合hbase的基本使用来说明,可能更容易理解

  表创建

  hbase也是由一张张表构成,而hbase的表也有所谓的schemaRDBMScolumncolumn family`。

  看一下hbase中如何创建一张表(通过hbase shell执行的命令,下同):

  这里创建了一张很简单的表叫,它包含两个,分别叫, ,就这样了。

  相比传统的,可能突然会有很多问题:(以下简称)和传统的有什么区别?每个存储什么类型的数据?不需要指定吗?

  有一个问题时可以预先得知的了,的概念可能接近于,都是以二进制数据存储,以后命令中,操作数据,包括指定表名、列名时,也都加了引号,代表字符串。

  数据存储

  下面是来自这篇教程文章中,关于hbase表的一个概念图:

  hbase数据库\_初接触hbase数据库\_hbase数据库

  表中有一个一个的格子,每个格子代表了其中存储的一个数据项。与其说hbase基于列,可能也可以说hbase基于格子()。hbase实际是通过键值对存储的,键可以认为就是格子的坐标,而值就是格子中存储的值。

  格子的横坐标是,这个概念之前没有提到。格子的纵坐标是两个结合起来,其中column也是之前没提到的概念。

  RDBMS中一行的Key是行中预定义好的某一列(或者某几列),而hbase中,row key是游离于表定义外的一个数据,是在数据插入时额外指定的一个参数。

  同样,(非)也是在插入时指定的,这里的column相当灵活,可以是已经存在的,可以是还不存在的,甚至可以不指定。

  几个例子:

  Example 1

  这里插入了一条数据,或者说一个键值对。插入的表是刚刚创建的表,而是第二个参数。

  注意第三个参数,的前面代表是,后面部分就是了。创建表时,需要指定,而中具体有哪些列,插入时动态添加,只要指定添加的列属于哪个就行。

  最后一个参数是插入的数据。

  最后通过命令,查看刚刚插入的数据,该数据位于、,数值value是,还有一个参数后面介绍。

  Example 2

  再添加一条记录

  这里,我们仍然向中添加数据,然后查询,发现只能查到新添加的数据,之前的看不到了。

  SQL数据库中,添加数据时使用,而更改数据时,需要用。而在同一个行列代表的格子中存储数据,都是通过指令来操作的。加入的数据,会加入的数据。

  不过这里的都要打上引号。

  Example 3

  还是接着上面的操作,这里增加一些选项进行查询

  这次又能查询出来两个数据了?

  其实数据并没有真的被覆盖,而是查询时,默认只查询出最后一个加入在这个坐标的数据。不过可以通过,来设置查询历史最近的两个记录(这里记录和键值对都是指一个意思)。

  而记录的,是通过记录插入时生成的来确定的,这个默认是数据写入时根据服务器时间生成的,不过我们也可以在插入时自己指定:

  第一条命令,最后增加了一个数字参数20,就代表了我们手动指定,而不是使用系统默认。

  于是接下来一条普通的命令,不能查询到我们新插入的了。

  但是如果指定查询最近的3条,那么就可以看到新插入的数据可以被查出来,只是太小,放在了最后。

  Example 4

  这里终于使用了不同的=>了,而且这次也没有指定,可以看到的结果,新添加的数据,默认的为空,这就是系统默认的。

  数据读取

  hbase我没有看到比较方便的、类似SQL的查询语句,简单的通过来查询。这里之前预先插入了以下数据

  首先是通过扫描全表看看有哪些数据。然后通过,只查询这一个所包含的数据。

  这里也能看出的键值对存储特性,每行数据显示的并非一行(一个对应的数据),而是结合对应的数据。

  虽说如此,但是查询的时候,似乎不能不指定,而只指定,这样来说这也不像传统意义的坐标,因为横坐标和纵坐标地位并非对等的。。。

发表评论

表情:
评论列表 (有 0 条评论,157人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hbase数据库_接触hbase数据库

       背景说起来有点复杂,公司的项目旧平台已经弃用(相关人员都离职的七七八八),但是系统却还在运行(虽说是演示系统)。   在职人让找离职的,离职让找在职的,没办法,只好

    相关 分布式数据库 HBase

    随着大数据时代的到来,传统的关系数据库已经不能满足大量数据,半结构化和非结构化数据的存储,由此诞生了分布式数据库 HBase,很好的解决关系数据库不能解决的问题。要先很好的使用

    相关 分布式数据库 HBase

    HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群