`

HBase学习(一)

阅读更多
1. HBase有哪些基本的特征?
2. HBase相对于关系数据库能解决的问题是什么?
3. HBase的数据模型是什么?如何表述?有哪些操作形式?
4. HBase的模式Schema设计的一些概念和原则
5. HBase的拓扑结构是什么样的?
6. HBase与Cassender的比较?


1. HBase有哪些基本的特征?
HBase是类似于google的bigtable的开源实现,拥有以下特征:

1). 在HDFS之上

2). 基于列存储的分布式数据库

3). 用于实时地读、写大规模数据集

其他HBase的特性:

1).没有真正的索引,行顺序存储,也没有所谓的索引膨胀问题。

2) 自动分区,表增长时,自动分区到新的节点上。

3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。

4).容错和普通商用的硬件支持。这点同hadoop类似。


2. HBase相对于关系数据库能解决的问题是什么?
HBase与关系数据的区别?

其实就是关系数据库与HBase各自的优缺点。

关系数据库的缺憾:

1). 扩展困难

2). 维护复杂

HBase就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。

HBase与RDBMS的区别?

1). 表的设计:HBase的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存储的直接反映。

2). 拓扑: HBase能水平分区并在上千个节点上自动复制。

3). 应用形式: 开发者必须承担更多的责任来正确地利用HBase的检索和存储方式。

4). RDBMS 遵循固定的模式,如“codd 12 规则”,强调事务的“强一致性”、参照完整性、SQL支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据的规模和并发读写方面进行大规模扩展时,RDBMS会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS的易用的特性。


HBase适用于上亿、上千亿级的数据,如果是只有上千、上百万级别是数据,传统的RDBMS是更好的选择。

HBase需要更多硬件,如果硬件较少,如5个,干不成什么好事。

如果从RDBMS移植到HBase,需要消除RDBMS的很多额外特性,如列数据类型、第二索引、事务、高级查询等。


3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等
1). 数据模式

如下列三个表:

第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。

而后两个表才是真正的表,物理视图,他们是实际的存储形式,而且它们是按列族进行存储的。

Row Key        Time Stamp      ColumnFamily contents ColumnFamily anchor
"com.cnn.www" t9 anchor:cnnsi.com = "CNN"
"com.cnn.www" t8 anchor:my.look.ca = "CNN.com"
"com.cnn.www" t6 contents:html = "<html>..."
"com.cnn.www" t5 contents:html = "<html>..."
"com.cnn.www" t3 contents:html = "<html>..."

Row Key        Time Stamp       Column Family anchor
"com.cnn.www" t9 anchor:cnnsi.com = "CNN"
"com.cnn.www" t8 anchor:my.look.ca = "CNN.com"

Row Key        Time Stamp       ColumnFamily "contents:"
"com.cnn.www" t6 contents:html = "<html>..."
"com.cnn.www" t5 contents:html = "<html>..."
"com.cnn.www" t3 contents:html = "<html>..."

2). HBase的基本元素:

表、行、列、单元格: 表的基本要素

键:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。

列族:所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加。

列族成员会一起放进存储器。而HBase面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase表与RDBMS中表类似,行是排序的,客户端可以把列添加到列族中去。

单元格cell: 单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。

区域region:将表水平划分,是HBase集群分布数据的最小单位。在线的所有区域就构成了表的内容。

加锁:对数据行进行更新,都需加锁。保持原子性。


3) 数据模型有哪些操作?

Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。

这些都需要一个HTable实例来操作。分别有Get、Scan、Put、Delete类来指定相应的参数、属性。

以scan为示例:


HTable htable = ...      // instantiate HTable
   
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("attr"));
scan.setStartRow( Bytes.toBytes("row"));                   // start key is inclusive
scan.setStopRow( Bytes.toBytes("row" +  (char)0));  // stop key is exclusive
ResultScanner rs = htable.getScanner(scan);
try {
  for (Result r = rs.next(); r != null; r = rs.next()) {
  // process result...
} finally {
  rs.close();  // always close the ResultScanner!
}


4) 返回结果的排序方式是什么?
先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。


5)最后,HBase不支持联合查询


6)mapreduce与HBase表配合使用,默认mapreduce的任务分割是根据HBase表中region的多少来分割,一个region就有一个map。


4. HBase的模式Schema设计的一些概念和原则
1)模式的创建与更新

可以使用HBase Shell或HBase Admin来创建和编辑HBase的模式。

在0.90.x 版本,只能先禁用表,再修改列族,而0.92.x版本以后,支持在线修改。


而且表和列族修改后,如size, region, block size等,在下次 主紧缩 或 存储文件时 起作用。


2)列族的数量

-列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。

-当一个表存在多个列族,当基数差距很大时,如A族有100万行,B族10亿行,A族可能会被分散到很多区域region,导致扫描A的效率降低。

-另外,多个列族在flush和compaction时,会造成很多I/O负担。


3)行键设计RowKey

a. 不要将RowKey设计成有序的形式,因为这样容易阻塞并行性,将负载压都在一台机器上

b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。

c. 倒序时间戳有助于找到找到最近版本值

d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键

e. 行键永远不能变


4)HBase支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。

5)列族可以设置存活时间TTL,超时后,HBase自动删除数据

6)第二索引和查询: 这里面有很多东西,需要查看对应版本官方的文档更好些。


5. HBase的拓扑结构是什么?
1)拓扑结构: 类似于HDFS的mast与slave,mapreduce的tasktracker与jobtracker的关系,HBase也有master和RegionServer


2)HBase与ZooKeeper的关系是什么?

HBase必须管理一个ZooKeeper实例,它依赖ZooKeeper,主要目的是,通过ZooKeeper来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper来协调分配。
RegionServer在HBase的配置文件conf/regionservers文件中,而HBase集群的站点配置在conf/hbase-site.xml和conf/hbase-env.sh中配置。HBase尽量遵循了Hadoop的规则。


3)HBase的内部结构管理状况:

其内部有-ROOT, -META的特殊目录表,用于维护当前集群上所有区域的列表、位置和状态。

-ROOT表包含 -META表的区域列表,而-META表示包含用户的的区域列表。

所以,HBase管理的流程是:

Client -- 链接到ZooKeeper -- 查找-ROOT表的位置 -- 查找-META表的位置 -- 查找用户的区域所在的节点、位置及其状态等 -- 直接管理指定区域的RegionServer并进行交互。


HBase支持Java及MapReduce的开发。

HBase提供了Thrift、REST及Avro的接口。HBase需要有一个相应的接口客户端负责与这些接口的交互。但是这些需要代理进行处理请求和响应,所以比java更慢。

%hbase-daemon.sh start/stop rest/thrift/avro  //启动或终止对应的客户端


4)HBase的使用示例:

1. 创建表

如在外壳环境下: create ‘station’, {NAME => 'info', VERSION >= 1}

2. 加载数据

MapReduce 与 HBase可以充分利用集群的分布式模型,将原始数据复制到hdfs中。

每个任务只有一个HTable实例, 默认情况下,每个HTable.put(put),在执行插入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。

3. Web查询

可以直接使用HBase的java API来实现一个Web的应用。HTable.get()可用来获取已定义的列族的所有内容。get的结果返回给Result, 包含的是数据行。

HBase还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标”。HTable.getScanner(scan).


6. HBase与Cassender的比较
不同的应用,应该选用不同的NoSQL数据库,Cassandra, HBase, MongoDB, Riak都有各自的优缺点。
而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。
根据 CAP理论(Consistency一致性, Availability 可获得性, Partitioning tolerance 分区容忍),二者可以简单区分一下。

HBase是Hadoop生态系统的一部分,又其他框架如PIG, HIVE等的支持,而Cassender上运行mapreduce相对比较复杂的。总体上来说,Cassender或许在存储上比较有效,但HBase的数据处理能力更强些。
HBase有Shell脚本和Web页面的处理能力,而Cassender没有Shell的支持,只有API,可用性上不如HBase。

Cassender的Schema发生变化时,需要集群重启,但Cassender宣称“写操作永不失败”,而HBase是有可能的。
场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的,而HBase适合网络“缓慢”且不可预料的Internet网。
分享到:
评论

相关推荐

    Hbase学习总结.rar

    **HBase学习总结** HBase,全称是Apache HBase,是一个分布式的、面向列的开源数据库,它是基于Google的Bigtable模型构建的,专为处理海量数据而设计。HBase是Apache Hadoop生态系统的一部分,它运行在Hadoop分布式...

    HBase学习利器:HBase实战

    ### HBase学习利器:HBase实战 #### 一、HBase简介与背景 HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于...

    Hbase学习分享

    HBase的学习和使用需要对Hadoop生态系统有所了解,因为HBase与Hadoop的其他组件紧密集成,尤其是HDFS和Zookeeper。对于希望构建大规模、可扩展的分布式系统的技术人员来说,掌握HBase是实现这一目标的关键技能之一。

    Hbase学习资料

    学习HBase,可以从《HBase权威指南》和《HBase实战》这两本书入手,它们分别深入探讨了HBase的设计原理、使用方法以及最佳实践,是理解并掌握HBase的重要资源。通过阅读这些书籍,你可以全面了解HBase的核心特性和...

    hbase 学习 hbase原理 hbase资料

    HBase是一种分布式、高性能、基于列族的NoSQL数据库,主要设计用于处理大规模数据集。在深入了解HBase之前,我们先来理解一下它的基本概念。 HBase是构建在Hadoop文件系统(HDFS)之上的,它利用了Hadoop的分布式...

    Hbase学习文档

    《HBase学习文档》 HBase,全称为Apache HBase,是构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,是大数据领域的重要组件。它为海量数据提供了实时、高性能的读写能力,尤其适用于处理半结构化或非结构化的...

    hadoop,hive,hbase学习资料

    【标题】:“hadoop,hive,hbase学习资料”是一份综合性的学习资源,涵盖了大数据处理领域中的三个核心组件——Hadoop、Hive和Hbase。这些工具在大数据处理和分析中发挥着至关重要的作用。 【描述】:描述指出这份...

    hbase的学习

    【HBase 学习】 HBase 是一个分布式、列式存储的开源数据库,基于 Google BigTable 的设计理念,专为处理大规模结构化和半结构化数据而设计。它运行在 HDFS(Hadoop 分布式文件系统)之上,提供高可靠性和高性能的...

    自己学习hbase

    标题“自己学习HBase”表明本文是一份自学HBase(一个开源的非关系型分布式数据库)的开发文档。HBase是建立在Hadoop之上的,使用Google BigTable的数据模型,它是Apache Software Foundation的Hadoop项目的一部分,...

    Hadoop之HBase学习笔记

    【标题】"Hadoop之HBase学习笔记"主要聚焦于Hadoop生态中的分布式数据库HBase。HBase是一个基于Google Bigtable理念设计的开源NoSQL数据库,它运行在Hadoop之上,提供高性能、高可靠性以及可水平扩展的数据存储能力...

    HBase学习笔记(个人整理)

    同时,掌握HBase的安装、配置和基本操作,如创建表、插入数据、查询数据等,是学习HBase的基础。 【HBase与其他技术的集成】 HBase可以与Apache Spark集成,用于实时数据处理和分析。Phoenix是SQL查询引擎,允许...

    hbase学习课件

    ### HBase 学习知识点详解 #### 一、HBase 概述 HBase 是一个分布式、可扩展的大规模数据存储系统,它基于 Google 的 BigTable 模型设计并实现。作为一个非关系型数据库(NoSQL),HBase 提供了高可靠性和高性能的...

    Spark以及hbase学习资料

    Spark作为一个快速、通用且可扩展的数据处理引擎,适用于实时计算、批处理以及机器学习等多种任务。而HBase则是一个基于Hadoop的分布式NoSQL数据库,特别适合处理大规模结构化数据。 在Spark的学习中,你需要理解其...

    小镜子之hbase学习

    《小镜子之HBase学习:深入理解分布式存储的基石》 HBase,全称为Hadoop Database,是一款构建在Hadoop文件系统(HDFS)之上的分布式列式数据库,旨在处理大规模数据集。作为NoSQL数据库家族的一员,HBase在大数据...

    HBase学习资料

    ### HBase学习资料:深入解析HBase与Hadoop文件系统 #### HBase概览与应用场景 HBase,作为Apache顶级项目之一,是一个高度分布式的、版本化的列式存储数据库,其设计灵感来源于Google的Bigtable论文。HBase旨在...

    HBase学习资料.zip

    HBase是一种分布式的、面向列的开源...这些资源为学习和掌握HBase提供了全面的指导,从理论到实践,从基础到高级,帮助读者深入理解HBase在大数据环境中的作用和价值,以及如何有效地利用它来处理和分析大规模数据。

    HBase官方文档中文版-HBase手册中文版

    这份“HBase官方文档中文版”详细阐述了HBase的核心概念、架构、操作以及最佳实践,对于HBase的学习者和使用者来说是一份宝贵的资源。通过深入学习,我们可以更好地理解和利用HBase处理海量数据的挑战。

    深入学习hbase原理资料整理

    《深入学习HBase原理》 HBase,全称为Hadoop Database,是一款高度可扩展的、高性能的、面向列的分布式数据库。它源自Google的Bigtable论文,并在其基础上为Hadoop生态系统提供了一种强大的非结构化数据存储解决...

    hbase学习笔记.doc

    HBase 是一种非关系型数据库,也被称为NoSQL数据库,主要设计用于处理大规模的数据存储。它的核心特性包括列族存储、分布式存储、实时读写、水平扩展和强一致性。HBase构建于Apache Hadoop之上,利用HDFS作为其底层...

Global site tag (gtag.js) - Google Analytics