文章目录
HBase简介及其在大数据生态圈的位置
HBase简介
Apache HBase™是Hadoop数据库、分布式、可扩展、大数据存储。
使用Apache HBase™当你需要随机的,实时的大数据的读/写访问。这个项目的目标是在商品硬件集群上托管非常大的表——数十亿行X数百万列。Apache HBase是一个开源的、分布式的、版本化的、非关系型的数据库,模仿了谷歌的Bigtable: Chang等人为结构化数据构建的分布式存储系统。正如Bigtable利用了谷歌文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供了类似于Bigtable的功能。
- HBase是一个分布式的、面向列的开源数据库,
- HBase在Hadoop之上提供了类似于Bigtable的能力
- HBase不同于一般的关系数据库,它适合非结构化数据存储
BigTable是什么?
- BigTable是一种压缩的高性能的高可扩展性的基于Google文件系统gfs的数据库。用于存储大规模的结构化数据;在扩展性和性能方面有很大的优势。
什么是面向列的数据库?
- 它又叫列式数据库;把每一列的数据值放在一起进行存储;
行式存储和列式存储:
为什么HBase适合非结构化数据存储?
结构化数据:可以用二维表格存储的
非结构化数据:比如图片文档和视频
HBase适合非结构化数据,存储查询都非常方便快捷
HBase在大数据生态中的位置
- HBase是Apache基金会顶级项目
- HBase基于Hadoop的核心HDFS系统进行数据存储,类似于Hive
- HBase可以存储超大数据并适合用来进行大数据的实时查询
HBase与HDFS
- HBase建立在Hadoop文件系统之上,利用了Hadoop的文件系统的容错能力
- HBase提供对数据的随机实时读/写访问功能
- HBase内部使用哈希表,并存储索引,可将在HDFS文件中的数据进行快速查找
HBase使用场景
- 瞬间写入量很大,常用数据库不好支撑或需要很高成本支撑的场景
- 数据需要长久保存,且量会持久增长到比较大的场景
- HBase不适用于有join,多级索引,表关系复杂的数据模型
Hbase数据存储模型及与关系型数据库的区别
CAP定理
对于一个分布式计算系统不可能全部满足以下三点:hbase为cp类型;它的每一行有单个的regionserver、rowkey、多版本标签等组合来保证行的一致性。
- 一致性(所有节点在同一时间具有相同的数据)
- 可用性(保证每个请求不管成功或者失败都有响应,但不保证获取的数据为正确的数据)·
- 分区容错性(系统中任意信息的丢失或失败不会影响系统的继续运作,系统如果不能在某一个时限内达成数据一致性,就必须在上面两个操作之间做出选择)
ACID定义
Hbase不支持严格的ACID ;只支持单个的行ACID
- 原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 - 一致性
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。 - 隔离性
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。 - 持久性
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
Hbase核心概念
- NameSpace:
可以把NameSpace理解为RDBMS的“数据库” - Table:
表名必须是能用在文件路径里的合法名字 - Row:
在表里面,每一行代表着一个数据对象,每一行都是以一个行键( Row Key )来进行唯一标识的,行键并没有什么特定的数据类型,以二进制的字节来存储 - Column:
HBase的列由Column family和Column qualifier组成 ,由冒号(:)进行进行间隔。比如family:qualifier - RowKey:
可以唯一标识一行记录,不可被改变. - Column Family:
在定义HBase表的时候需要提前设置好列族,表中所有的列都需要组织在列族里面 - Column Qualifier:
列族中的数据通过列标识来进行映射,可以理解为一个键值对,Column Qualifier就是Key. - Cell:
每一个行键,列族和列标识共同组成一个单元, - Timestamp:
每个值都会有一个timestamp,作为该值特定版本的标识符
Hbase与传统关系型数据库的区别
传统存储:
Hbase归类存储:
Hbase数据模型
可想象为大的map;详见下图:
访问数据步骤如下图:
Hbase伪分布式集群安装
前置HDFS条件安装请参考大数据入门学习笔记(叁)- 布式文件系统HDFS
并且启动HDFS
- 下载HBase 传到服务器并且解压
http://archive.cloudera.com/cdh5/cdh/5/ - 配置文件
把Hadoop_Home/etc/hadoop/hdfs-site.xml和core.site.xml拷贝到HBase_home/conf下
- 配置HBase_home/conf/hbase-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
- 配置HBase_home/conf/hbase-site.xml
<property>
<name>hbase.rootdir</name> --hbase持久保存的目录
<value>hdfs://hadoop000:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>zk的data目录路径</value>
</property>
<property>
<name>hbase.cluster.distributed</name> --是否以集群方式运行(虽然一个节点也可配置为true)
<value>true</value>
</property>
- 启动和停止
hbase_home/bin/start-hbase.sh
jps检查:
HQuorumPeer
HRegionServer
HMaster
NameNode
SecondaryNameNode
DataNode
网页链接检查:
http://hadoop000:16010
Hbase基础架构
- Hmaster
- hmaster是hbase主/从集群架构中的中央节点
- Hmaster将region分配给regionserver, 协调regionserver的
负载并维护集群的状态 - 维护表和region的元数据, 不参与数据的输入/输出过程
- RegionServer
- 维护hmaster分配给它的region, 处理对这些region的io请求
- 负责切分正在运行过程中变的过大的region
- Zookeeper
- Zookeeper是集群的协调器
- Hmaster启动将系统表加载到zookeeper
- 提供hbase Regionserver状态信息
HBase特点
- 线性和模块化的可伸缩性。
- 严格一致的读写。
- 自动和可配置的分片表
- 区域服务器之间的自动故障转移支持。
- 使用Apache HBase表支持Hadoop MapReduce作业的方便基类。
- 易于使用Java API进行客户端访问。
- 用于实时查询的块缓存和布鲁姆过滤器。
- 查询谓词通过服务器端过滤器向下推
- 节俭网关和支持XML、Protobuf和二进制数据编码选项的rest式Web服务
- 可扩展的基于jruby的(JIRB) shell
- 支持通过Hadoop metrics子系统将指标导出到文件或Ganglia或通过JMX