Hadoop学习之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的比较
Hadoop学习之HBase的更多相关文章
- Hadoop学习之HBase和Hive的区别
Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive ...
- Hadoop学习---Zookeeper+Hbase配置学习
软件版本号: JDK:jdk-8u45-linux-i586.tar.gz Zookeeper:zookeeper-3.4.6 Hbase:hbase-1.0.0-bin 一.JDK版本更换 由于之前 ...
- Hadoop学习(6)-HBASE的安装和命令行操作和java操作
使用HABSE之前,要先安装一个zookeeper 我以前写的有https://www.cnblogs.com/wpbing/p/11309761.html 先简单介绍一下HBASE HBASE是一个 ...
- Hadoop学习笔记之HBase Shell语法练习
Hadoop学习笔记之HBase Shell语法练习 作者:hugengyong 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令 ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是 ...
- Hadoop学习---Hadoop的HBase的学习
Hbase Hbase的特点: Hbase是bigtable的开源的仿制版本 建立在HDFS之上 可靠性,靠性能 大:一个表可以有上亿行,上百万列 面向列:面向列(族)的存储和权限控制,列(族)独立检 ...
- hadoop学习第七天-HBase的原理、安装、shell命令
一. hbase的原理知识 1. hbase介绍 hbase是hadoop的一个重要成员,主要用于存储结构化数据,构建在hdfs之上的分布式存储系统,它主要通过横向扩展,通用不断增加廉价服务器增加计算 ...
- hadoop 与 hbase 添加开机启动,按顺序,先hadoop,后hbase,开机启动脚本,hbase学习
hadoop安装,hbase单机安装,参考链接,https://blog.csdn.net/LiuHuan_study/article/details/84347262 开机启动脚本,参考, http ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
随机推荐
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- RGB,CMYK,HSB各种颜色表示的转换 C#语言
Introduction Why an article on "colors"? It's the same question I asked myself before writ ...
- jquery的slideUp、slideDown、slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug
jquery的slideUp.slideDown.slideToggle等涉及滑动效果的一系列函数,在IE浏览器下有几处bug: 1. 因position引起的问题 影响:IE全系列 症状:在需要sl ...
- CentOS6.5下VNC Server远程桌面配置详解
参考文献: (总结)CentOS Linux下VNC Server远程桌面配置详解 远程桌面连接工具VNC——license Key 我的下载地址为 太平洋下载 VNC连接黑屏的问题 centos 6 ...
- Java--对象内存布局
在HotSpot虚拟机中,对象在内存中的存储布局可以分为3块区域:对象头部.实例数据.对齐填充. 一.对象头部Header的布局 Mark Word Class 指针 在32位系统下,上面两部分各占4 ...
- 处理IIS报“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面”
“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面” 详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 C ...
- 使用sqlite保存数据返回主键
/// <summary> /// 返回insert后的主键值 /// </summary> /// <param name="SQLString"& ...
- Week3(9月23日):例子更Powerful更完整了,哇咔咔
Part I:提问 =========================== 1.控制器中动作方法的返回类型有哪些? 2.如果控制器代码如下,请问浏览器中如何输入什么路由访问? public clas ...
- 西安力邦智能医疗&可穿戴设备沙龙--第1期---苹果HealthKit、谷歌GoogleFit来袭,智能医疗要爆发吗?
背 景: "可穿戴设备"成为2014的行业热点,从Google Glass到苹果iWatch, 越来越多的企业推出了包含眼镜.腕带.鞋等各种可穿戴设备,"可穿戴&q ...
- 修改Hadoop作业调度算法过程解析
最近几个星期一直在修改hadoop的计算能力调度算法,遇到了这样那样的问题. 我修改的版本是hadoop-0.20.2 第一步: 将hadoop的源码加载到eclipse中配置使用ant编译 第二步: ...