`

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学习笔记

    比较详细的HBase学习笔记,精心制作 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其...

    HBase学习笔记(个人整理)

    个人笔记整理(带目录),共8个章节:...一.Hbase快速入门 二.Apache HBase配置 三.Hbase数据存储 四.HBase协处理器与二级索引 五.PHOENIX操作HBASE 六.HBase设计与优化 七.HBase与Spark集成 八.Trafodion操作HBase 共146页

    hbase使用学习中文文档

    这是 Apache HBase的官方文档, Hbase是一个分布式,,版本化(versioned),构建在 Apache Hadoop和 Apache ZooKeeper上的列数据库.

    Hbase学习资料

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。

    深入学习hbase原理资料整理

    HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储...

    hbase学习课件

    hbase是基于Google BigTable模型开发的,典型的key/value系统。是建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。它是Apache Hadoop生态系统中的重要一员,主要用于海量结构化...

    大数据技术原理及应用课实验3 熟悉常用的HBase操作 林子雨实验

    一、实验目的 1. 理解HBase在Hadoop体系结构中的角色; 2. 熟练使用HBase操作...在本题中学习了列出HBase所有的表的相关信息,在终端打印出指定的表的所有记录数据,向已经创建好的表添加和删除指定的列族或列,清空

    大数据HBASE视频教程-免费

    这里是一套关于Hadoop架构中数据存储HBASE的教学视频,希望大家可以一起学习!

    HBase.docx

    一、HBase的概述 5 1.hbase的特点 6 2.特殊概念 6 3.确定值 6 4.HBASE的架构 6 5.apache的下载地址 7 二、HBase安装部署与简单应用 7 一:下载安装 7 1.下载安装 7 2.开启hadoop与zookeeper 7 3.修改配置文件hbase-...

    Hbase+Spring boot实战分布式文件存储

    第4章 HBase进阶 讲解HBase的高级特性,常用的优化策略,协处理器等,并实战开发协处理器,将开发的协处理器加载到HBase测试环境,验证其功能 4-1 HBase优化策略一:服务端优化策略 4-2 HBase优化策略二:常用优化...

    HBase不睡觉

    意,所以我们的目标就是写一本让人看了不会睡着的HBase技术书籍。 希望大家可以通过这本书成功地入门HBase技术。 为什么要写这本书? 目前网上关于HBase的知识比较零碎,缺乏系统性。翻译的作 品,语言的组织又不...

    HBase In Action(Hbase实战) 英文版非影印

    HBase In Action(Hbase实战) 英文版非影印 自己正在学习的一本书,感觉很不错的。

    一个开源、成体系的大数据学习教程 spark学习 hadoop hive hbase flink教程 linux 从入门到精通

    一个开源、成体系的大数据学习教程。spark学习 hadoop hive hbase flink教程 linux 从入门到精通 一个开源、成体系的大数据学习教程。spark学习 hadoop hive hbase flink教程 linux 从入门到精通 一个开源、成体系的...

    hbase权威指南CN

    HBase学习及工作的“秘籍”,通过该书,能够对HBase有一个由浅到深的认识。

    mgljava#bigData-study#HBase视频学习1

    HBase概念分布式、高可用、高性能、面向列、底层采用HDFS存储数据HBase一些术语列族:一组列的集合逻辑表时间戳决定一行数据按照字典顺序排序Row key

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    在下面的流程图中,我们使用下面这样一个红色小图标来表示该数据所在的位置:数据位置标记HBase中提供了如下几种主要的接口:HBase的基础API,应用最为广泛。基于Shell的命令行操作接口,基于JavaClientAPI实现。...

    HBase权威指南中文版

    HBase权威指南中文版,一本Hbase入门学习之宝典。

    HBase权威指南

    HBase学习,比较权威的一本书,大家可以进行参考学习。

    Hbase技术介绍

    先从外围做一个简单的介绍,便于入门者学习使用!

    HBase企业应用开发实战

    大数据需要落地,需要开源技术来驱动新一轮的变革,而HBase作为大数据落地过程中的神兵利器,已经一次又一次证明了其巨大价值。本书不同于其他HBase的翻译版书籍,由来自国内互联网最前沿的实战派资深人士撰写而成,...

Global site tag (gtag.js) - Google Analytics