标签(空格分隔): hbase
大数据 (Hadoop)数据库 HBase功能 、表的设计 、环境配置与 Shell基本使用练习,最好与 RDBMS数据中的库和表进行对比 ,以下几点要注意 :
1) 企业中海量数据存储和实时查询的需求
2) HBase功能 ,与 RDBMS相比,优势在哪
3) HBase服务组件的说明、配置部署启动
4) HBase Shell中基本命令的使用
5) HBase 数据存储模型理解,结合实际操作
hadoop,spark,kafka交流群:459898801
1,hbase简介
Hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模
式,并从Hadoop的MapReduce程序模型中获益。这意味着在一组商业硬件上存储许多具有数十亿行和上百万列的大表。除去Hadoop的优
势,HBase本身就是十分强大的数据库,它能够融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理
的能力。
HBase不是一个关系型数据库,它需要不同的方法定义你的数据模型,HBase实际上定义了一个四维数据模型,下面就是每一维度的定义:
行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。
列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。
版本:每列都可以有一个可配置的版本数量,你可以通过列修饰符的制定版本获取数据。格式如下:
{row key,column(=<family>+<label>),version}
注:
1,rowKey必须具有唯一性
2,数据是没有类型,以字节码的形式存储
3,表:(行key,列簇+列名,版本(timestamp))–>值
可以通过以下两
种方式获得HBase数据:
1,通过他们的行键,或者一系列行键的表扫描。
2,使用map-reduce进行批操作
在HBase中对数据的检索方式
第一种方式:
全部扫描 scan
第二种方式:
依据rowkey进行查询,
第三种方式:
范围查询 scan range
只支持前缀匹配查询
有两个原因令行键的设计十分重要:
表扫描是对行键的操作,所以,行键的设计控制着你能够通过HBase执行的实时/直接获取量。
当在生产环境中运行HBase时,它在HDFS上部运行,数据基于行键通过HDFS,如果你所有的行键都是以user-开头,那么很有可能你大部分数据都被分配一个节点上(违背了分布式数据的初衷),因此,你的行键应该是有足够的差异性以便分布式地通过整个部署。
你定义行键的方式取决于你想怎样存取那些行。如果你想以用户为基础存储数据,那么一个策略是利用字节队列在HBase中存储行键,所以我们可以创建
一个用户ID的哈希(例如MD5或SHA-1),然后在哈希后面附上时间(long类型)。使用哈希有两个重点:(1)是它能够将value分散开,数据
能够分布式地通过簇,(2)是它确保key的长度是一致的,以更加容易在表扫描中使用。
2,hbase VS RDMS
HBase和关系数据库的比较
HBase是一个基于列模式的映射数据库,它只能表示很简单的键-数据的映射关系,这大大简化了传统的关系数据库。与关系数据库相比,它有如下特点:
1,数据类型
HBase只有简单的字符串类型,所有的类型都是交由用户自己处理的,它只保存字符串。
而关系数据库有丰富的类型选择和存储方式。
2,数据操作
HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,所以不能、也没有必要实现表和表之间的关联等操作。
而传统的关系数据通常有各种各样的函数、连接操作。
3,存储模式
HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的。
传统的关系数据库是基于表格结构和行模式保护的。
4,数据维护
确切的说,HBase的更新操作不应该叫做更新,虽然一个主键或列对应新的版本,但它的旧版本仍然会保留,所以它实际上是插入了新的数据,而不是传统关系数据库里面的替换修改。
5,可伸缩性
HBa