《Apache Hbase 第一干货 概念及操作》要点:
本文介绍了Apache Hbase 第一干货 概念及操作,希望对您有用。如果有疑问,可以联系我们。
相关主题:apache配置
Apache HBase简单介绍:
Apache HBase(Hadoop Database) 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在便宜 PC 上搭建起大规模结构化存储集群.
简单说便是HBase 是一种“NoSQL”数据库,再简单点便是是一种格式化储存数据的方式.
那么当我们接触大数据等知识时,难免会遇到数据存储的问题,那么HBase就应运而生,很好地办理了这个问题,对于它的优缺点这里不做赘述,咱们这里的干货就对一些经常使用的操作做一下总结和分析,还有要对要对一些概念进行理顺它!
容易混淆的概念:
HBase 与 Hadoop/HDFS 的差异:HDFS是分布式文件系统,适合保留大文件.官方宣称它并非普通用途文件系统,不提供文件的个别记录的快速查询.另一方面,HBase 基于 HDFS,并能够提供大表的记录快速查找和更新.这有时会可能引起概念混乱.HBase 内部将数据放到索引好的“StoreFiles”存储文件中,以便提供高速查询,而存储文件位于 HDFS中.
HBase的设计:
其实HBase存了很多表格,HBase 中的每一张表便是所谓的 BigTable.BigTable 会存储一系列的行记录,行记录有三个基本类型的定义:Row Key、Time Stamp、Column.
1、Row Key 是行在 BigTable 中的唯一标识.
2、Time Stamp 是每次数据操作对应关联的时间戳,可以看做 SVN 的版本.
3、Column 定义为< family>:< label>,通过这两部分可以指定唯一的数据的存储列,family 的定义和修改需要 对 HBase 进行类似于 DB 的 DDL 操作,而 label ,不需要定义直接可以使用,这也为动态定制列提供了一种手段 .family 另一个作用体现在物理存储优化读写操作上,同 family 的数据物理上保留的会比较临近,因此在业务设计的过程中可以利用这个特性.
是不是很简单,然后我们看下这个数据布局图,更加直观:
然后我们对其中的项进行简单的介绍:
1、 Row Key
与 NoSQL 数据库一样,Row Key 是用来检索记录的主键.拜访 HBase table 中的行,只有三种方式:
1)通过单个 Row Key 拜访.
2)通过 Row Key 的 range 全表扫描.
3)Row Key 可以使任意字符串(最大长度是64KB,实际应用中长度一般为 10 ~ 100bytes),在HBase 内部,Row Key 保留为字节数组.
在存储时,数据依照 Row Key 的字典序(byte order)排序存储.设计 Key 时,要充分排序存储这个特性,将经常一起读取的行存储到一起(位置相关性).
注意 字典序对 int 排序的结果是 1,10,100,11,12,13,14,15,16,17,18,19,20,21,..., 9,91,92,93,94,95,96,97,98,99.要保留整形的自然序,Row Key 必须用 0 进行左填充.
行的一次读写是原子操作(岂论一次读写多少列).这个设计决策能够使用户很容易理解程序在对同一个行进行并发更新操作时的行为.
2、 列族
HBase 表中的每个列都归属于某个列族.列族是表的 Schema 的一部分(而列不是),必需在使用表之前定义.列名都以列族作为前缀,例如 courses:history、courses:math 都属于 courses 这个列族.
拜访控制、磁盘和内存的使用统计都是在列族层面进行的.在实际应用中,列族上的控制权限能帮助我们管理不同类型的应用, 例如,允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据).
3、 时间戳
HBase 中通过 Row 和 Columns 确定的一个存储单元称为 Cell.每个 Cell 都保存着同一份数据的多个版本. 版本通过时间戳来索引,时间戳的类型是 64 位整型.时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间.时间戳也 可以由客户显示赋值.如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳.每个 Cell 中,不同版本的数据依照时间倒序排序,即最新的数据排在最前面.
为了避免数据存在过多版本造成的管理(包含存储和索引)负担,HBase 提供了两种数据版本回收方式. 一是保存数据的最后 n 个版本,二是保存最近一段时间内的版本(比如最近七天).用户可以针对每个列族进行设置.
4、 Cell
Cell 是由 {row key,column(=< family> + < label>),version} 唯一确定的单元.Cell 中的数据是没有类型的,全部是字节码形式存储
以上已经把基本概念介绍完了,是不是一目了然,如果还有点糊涂,不要紧,多看几遍,慢慢就熟悉了,
然后我们接下来介绍相关的操作:
而对于HBase shell 基本操作命令可以看下图:
名称 | 命令表达式 |
创立表 | create '表名称','列簇名称1','列簇名称2'....... |
添加记录 | put '表名称', '行名称','列簇名称:','值' |
查看记录 | get '表名称','行名称' |
查看表中的记录总数 | count '表名称' |
删除记录 | delete '表名',行名称','列簇名称' |
删除表 | ①disable '表名称' ②drop '表名称' |
查看所有记录 | scan '表名称' |
查看某个表某个列中所有数据 | scan '表名称',['列簇名称:'] |
更新记录 | 即重写一遍进行覆盖 |
限于篇幅的关系,对于操作具体代码我将贴在下一篇文章中,敬请关注!
欢迎参与《Apache Hbase 第一干货 概念及操作》讨论,分享您的想法,维易PHP学院为您提供专业教程。