Mais conteúdo relacionado
Semelhante a 关于Hbase (12)
关于Hbase
- 1. Hbase
Hbase 作为一个面向列的 k/v 数据库,适合大数据量的读写操作和查询操作.是为查询而生
适合于对实时性和并发性要求比较高的应用项目.
简介
它介于 nosql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单
行事务(可通过 hive 支持来实现多表 join 等复杂操作)。主要用来存储非结构化和半结构化的
松散数据。
与 hadoop 一样,Hbase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加
计算和存储能力。
HBase 中的表一般有这样的特点:
1 大:一个表可以有上亿行,上百万列
2 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
版本特点
hbase 早期版本的目标就是一个海量数据中的离线服务。
2009 年 9 月发布的 0.20.0 版本是一个里程碑,online 应用正式成为了 hbase 的目标,为此 hbase
引入了 zookeeper 来做为 backupmaster 以及 regionserver 的管理。
2011 年 1 月 0.90.0 版本是另一个里程碑,基本上我们今天看到的各大网站, facebook/ebay/yahoo
如
- 2. 内所使用于生产的 hbase 都是基于这一个版本(fb 所采用的 0.89 版本结构与 0.90.x 相近)。
bloomfilter
等诸多属性加入了进来,性能也有极大提升
优点
首先它的数据由 hdfs 天然地做了数据冗余, 而且 hdfs 集群的安全性,以及服务于海量数据的能力
已经得到了多家公司的证明。其次 hbase 本身的数据读写服务没有单点的限制,服务能力可以随服
务器的增长而线性增长,达到几十上百台的规模。LSM-Tree 模式的设计让 hbase 的写入性能非常良
好,单次写入通常在 1-3ms 内即可响应完成,且性能不随数据量的增长而下降。region(相当于数据
库的分表)可以 ms 级动态的切分和移动,保证了负载均衡性。由于 hbase 上的数据模型是按 rowkey
排序存储的,而读取时会一次读取连续的整块数据做为 cache,因此良好的 rowkey 设计可以让批量
读取变得十分容易,甚至只需要1次 io 就能获取几十上百条用户想要的数据。最后, hbase 的 api
对于 JAVA 开发工程师来说非常容易上手,培训成本相对较低。
缺点
hbase 本身也有不适合的场景。比如,索引只支持主索引(或看成主组合索引)
,又比如服务是单点
的,单台机器宕机后在 master 恢复它期间它所负责的部分数据将无法服务等。这就要求在选型上需
要对自己的应用系统有足够了解
- 3. 适合场景
hive
Hadoop+hive 一般是用于数据仓库, 采用 HQL (类 SQL )语言对这些数据进行自动化管理
和处理,适用于一些离线的应用.主要是为简化 mapred 而生.
hive 是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数
据。 它把海量数据存储于 hadoop 文件系统,而不是数据库,但提供了一套类
数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行
自动化管理和处理。我们可以把 hive 中海量结构化数据看成一个个的表,而实
际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,
- 4. 最终生成一系列基于 hadoop 的 map/reduce 任务,通过执行这些任务完成数
据处理。
Hive 诞生于 facebook 的日志分析需求,面对海量的结构化数据, hive 以较
低的成本完成了以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,
应用开发灵活而高效。
Hive 是一个可扩展性极强的数据仓库工具,借助于 hadoop 分布式存储计算平
台和 hive 对 SQL 语句的理解能力,我们所要做的大部分工作就是输入和输出
数据的适配,恰恰这两部分 IO 格式是千变万化的,我们只需要定制我们自己的
输入输出适配器, hive 将为我们透明化存储和处理这些数据,大大简化我们的
工作。本文的重心也正在于此,这部分工作相信每一个做数据分析的朋友都会面
对的,希望对您有益。
- 6. 基于 hive ,我们将这些数据按天为单位建表,每天一个表,后台脚本根据时间
戳将每小时同步过来的 5 台前端机的日志数据合并成一个日志文件,导入 hive
系统,每小时同步的日志数据被追加到当天数据表中,导入完成后,当天各项统
计项将被重新计算并输出统计结果。
以上需求若直接基于 hadoop 开发,需要自行管理数据,针对多个统计需求开
发不同的 map/reduce 运算任务,对合并、排序等多项操作进行定制,并检测
任务运行状态,工作量并不小。但使用 hive ,从导入到分析、排序、去重、结
果输出,这些操作都可以运用 hql 语句来解决,一条语句经过处理被解析成几
个任务来运行,即使是关键词访问量增量这种需要同时访问多天数据的较为复杂
的需求也能通过表关联这样的语句自动完成,节省了大量工作量。