- 浏览: 399095 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
秦时明月黑:
深入浅出,楼主很有功底
hive编译部分的源码结构 -
tywo45:
感觉好多错误,但还是支持!
HDFS+MapReduce+Hive+HBase十分钟快速入门 -
xbbHistory:
解析的很棒!!
Linux-VFS -
darrendu:
执行这个命令,bin/hadoop fs -ls /home/ ...
Hadoop示例程序WordCount运行及详解 -
moudaen:
请问楼主,我执行总后一条语句时,执行的是自带的1.sql,你当 ...
TPC-H on Hive
转自http://www.jdon.com/jivejdon/thread/38244
最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL
数据库,最终决定采用HBase。在这里,我就向大家分享一下自己对HBase的理解。
在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到
底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫“杯具啊”。
其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性
,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性
这事儿.对于伸缩性
这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性
,我在这里先不说了,因为这部分的伸缩性
相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。
首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一个Server里,包括web server,app
server,db server,但是随着人越来越多,系统压力越来越多,这个时候可能你把web server,app server和db
server分离了,好歹这样可以应付一阵子,但是随着用户量的不断增加,你会发现,数据库这哥们不行了,速度老慢了,有时候还会宕掉,所以这个时候,你
得给数据库这哥们找几个伴,这个时候Master-Salve就出现了,这个时候有一个Master
Server专门负责接收写操作,另外的几个Salve
Server专门进行读取,这样Master这哥们终于不抱怨了,总算读写分离了,压力总算轻点了,这个时候其实主要是对读取操作进行了水平扩张,通过增
加多个Salve来克服查询时CPU瓶颈。一般这样下来,你的系统可以应付一定的压力,但是随着用户数量的增多,压力的不断增加,你会发现Master
server这哥们的写压力还是变的太大,没办法,这个时候怎么办呢?你就得切分啊,俗话说“只有切分了,才会有伸缩性
嘛”,
所以啊,这个时候只能分库了,这也是我们常说的数据库“垂直切分”,比如将一些不关联的数据存放到不同的库中,分开部署,这样终于可以带走一部分的读取和
写入压力了,Master又可以轻松一点了,但是随着数据的不断增多,你的数据库表中的数据又变的非常的大,这样查询效率非常低,这个时候就需要进行“水
平分区”了,比如通过将User表中的数据按照10W来划分,这样每张表不会超过10W了。
综上所述,一般一个流行的web站点都会经历一个从单台DB,到主从复制,到垂直分区再到水平分区的痛苦的过程。其实数据库切分这事儿,看起来原理貌似很
简单,如果真正做起来,我想凡是sharding过数据库的哥们儿都深受其苦啊。对于数据库伸缩的文章,哥们儿可以看看后面的参考资料介绍。
好了,从上面的那一堆废话中,我们也发现数据库存储水平扩张scale out是多么痛苦的一件事情,不过幸好技术在进步,业界的其它弟兄也在努力,09年这一年出现了非常多的NoSQL
数据库,更准确的应该说是No relation数据库,这些数据库多数都会对非结构化的数据提供透明的水平扩张能力,大大减轻了哥们儿设计时候的压力。下面我就拿Hbase这分布式列存储系统来说说。
一 Hbase是个啥东东?
在说Hase是个啥家伙之前,首先我们来看看两个概念,面向行存储和面向列存储。面向行存储,我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的,面向行存储的数据库主要适合于事务
性要求严格场合,或者说面向行存储的存储系统适合OLTP,但是根据CAP理论,传统的RDBMS,为了实现强一致性,通过严格的ACID事务来进行同步,这就造成了系统的可用性和伸缩性
方面大大折扣,而目前的很多NoSQL
产
品,包括Hbase,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性。好像,我上面说了面向列存储,那么到底什么是面向列存储
呢?Hbase,Casandra,Bigtable都属于面向列存储的分布式存储系统。看到这里,如果您不明白Hbase是个啥东东,不要紧,我再总结
一下下:
Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性
。
二 Hbase数据模型
HBase,Cassandra的数据模型非常类似,他们的思想都是来源于Google的Bigtable,因此这三者的数据模型非常类似,唯一不同的就
是Cassandra具有Super cloumn
family的概念,而Hbase目前我没发现。好了,废话少说,我们来看看Hbase的数据模型到底是个啥东东。
在Hbase里面有以下两个主要的概念,Row key,Column Family,我们首先来看看Column family,Column
family中文又名“列族”,Column family是在系统启动之前预先定义好的,每一个Column
Family都可以根据“限定符”有多个column.下面我们来举个例子就会非常的清晰了。
假如系统中有一个User表,如果按照传统的RDBMS的话,User表中的列是固定的,比如schema
定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义User表,然后定
义info 列族,User的数据可以分为:info:name =
zhangsan,info:age=30,info:sex=male等,如果后来你又想增加另外的属性,这样很方便只需要
info:newProperty就可以了。
也许前面的这个例子还不够清晰,我们再举个例子来解释一下,熟悉SNS的朋友,应该都知道有好友Feed,一般设计Feed,我们都是按照“某人在某时做
了标题为某某的事情”,但是同时一般我们也会预留一下关键字,比如有时候feed也许需要url,feed需要image属性等,这样来说,feed本身
的属性是不确定的,因此如果采用传统的关系数据库将非常麻烦,况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题,在Hbase
里,如果每一个column 单元没有值,那么是占用空间的。下面我们通过两张图来形象的表示这种关系:
上图是传统的RDBMS设计的Feed表,我们可以看出feed有多少列是固定的,不能增加,并且为null的列浪费了空间。但是我们再看看下图,下图为
Hbase,Cassandra,Bigtable的数据模型图,从下图可以看出,Feed表的列可以动态的增加,并且为空的列是不存储的,这就大大节约
了空间,关键是Feed这东西随着系统的运行,各种各样的Feed会出现,我们事先没办法预测有多少种Feed,那么我们也就没有办法确定Feed表有多
少列,因此Hbase,Cassandra,Bigtable的基于列存储的数据模型就非常适合此场景。说到这里,采用Hbase的这种方式,还有一个非
常重要的好处就是Feed会自动切分,当Feed表中的数据超过某一个阀值以后,Hbase会自动为我们切分数据,这样的话,查询就具有了伸缩性
,而再加上Hbase的弱事务
性的特性,对Hbase的写入操作也将变得非常快。
上面说了Column family,那么我之前说的Row key是啥东东,其实你可以理解row
key为RDBMS中的某一个行的主键,但是因为Hbase不支持条件查询以及Order by等查询,因此Row
key的设计就要根据你系统的查询需求来设计了额。我还拿刚才那个Feed的列子来说,我们一般是查询某个人最新的一些Feed,因此我们Feed的
Row
key可以有以下三个部分构成<userId><timestamp><feedId>,这样以来当我们要查询某个
人的最进的Feed就可以指定Start Rowkey为<userId><0><0>,End
Rowkey为<userId><Long.MAX_VALUE><Long.MAX_VALUE>来查询了,同时
因为Hbase中的记录是按照rowkey来排序的,这样就使得查询变得非常快。
三 Hbase的优缺点
1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
2 Hbase自动切分数据,使得数据存储自动具有水平scalability.
3 Hbase可以提供高并发读写操作的支持
Hbase的缺点:
1 不能支持条件查询,只支持按照Row key来查询.
2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.
关于数据库伸缩性
的一点资料:
http://www.jurriaanpersyn.com/archives/2009/02/12/database-sharding-at-netlog-with-mysql-and-php/
http://adam.blog.heroku.com/past/2009/7/6/sql_databases_dont_scale/
暂时先分享这么多,以后在项目运用中,遇到问题再分享给大家.
发表评论
-
Hadoop的Secondary NameNode方案
2012-11-13 10:39 1253http://book.51cto.com/art/20120 ... -
hadoop
2011-10-08 12:20 1071hadoop job解决 ... -
hadoop作业调优参数整理及原理
2011-04-15 14:02 12811 Map side tuning 参数 ... -
Job运行流程分析
2011-03-31 11:04 1638http://www.cnblogs.com/forfutur ... -
hadoop作业运行部分源码
2011-03-31 10:51 1377一、客户端 Map-Reduce的过程首先是由客户端提交 ... -
eclipse中编译hadoop(hive)源码
2011-03-24 13:20 3385本人按照下面编译Hadoop 所说的方法在eclipse中编 ... -
Configuration Parameters: What can you just ignore?
2011-03-11 15:16 840http://www.cloudera.com/blog/20 ... -
7 Tips for Improving MapReduce Performance
2011-03-11 15:06 966http://www.cloudera.com/blog ... -
hadoop 源码分析一
2011-02-22 15:29 1175InputFormat : 将输入的 ... -
hadoop参数配置(mapreduce数据流)
2011-01-14 11:08 2861Hadoop配置文件设定了H ... -
混洗和排序
2011-01-05 19:33 3209在mapreduce过程中,map ... -
hadoop中每个节点map和reduce个数的设置调优
2011-01-05 19:28 8342map red.tasktracker.map.tasks. ... -
hadoop profiling
2010-12-20 20:52 2602和debug task一样,profiling一个运行在分布 ... -
关于JVM内存设置
2010-12-20 20:49 1318运行map、reduce任务的JVM内存调整:(我当时是在jo ... -
HADOOP报错Incompatible namespaceIDs
2010-12-14 12:56 978HADOOP报错Incomp ... -
node1-node6搭建hadoop
2010-12-13 18:42 1092环境: node1-node6 node1为主节点 ... -
hadoop启动耗时
2010-12-07 17:28 1288http://blog.csdn.net/AE86_FC/ar ... -
namenode 内部关键数据结构简介
2010-12-07 16:35 1237http://www.tbdata.org/archiv ... -
HDFS常用命令
2010-12-04 14:59 1276文件系统检查 bin/hadoop fsck [pa ... -
HDFS添加和删除节点
2010-12-04 14:45 1983From http://developer.yahoo.co ...
相关推荐
Difference between HBase and RDBMS
非常好的比较了hbase和rdbms的区别与联系 大规模web开发的好资料
HBase 和RDBMS(关系数据库)的比较.doc
2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1). 数据模式 3 2). HBase的基本元素: 4 3) 数据模型有哪些操作? 4 4) 返回结果的排序方式是什么? 5 5)最后,HBase...
一、 HBase技术介绍 HBase简介 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统... Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。
它介于 nosql 和 RDBMS 之间,仅能通过主键(row key)和主键的 range 来检索数据,仅支持单行事务(可通过 hive 支持来实现多表 join 等复杂操作)。 主要用来存储结构化和半结构化的松散数据。 结构化:数据结构字段...
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。 与hadoop一样,Hbase目标主要依靠...
大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第15期_HBase、Hive与RDBMS 共15页.pdf
Grab data from various RDBMS/Flat files into the HBASE systems Understand table design and perform CRUD operations Find out how the communication between the client and server happens in HBase Grasp ...
HBase不能取代RDBMS,因为二者的应用场景不同。HBase为了解决海量数据的扩展性,支持简单的增加节点来实现线性扩展,从而在集群上管理海量的非结构化或半结构化的稀疏数据。HBase仅能通过主键(row key)或主键的...
I either invest into serious RDBMS scalability skills, or find something else instead. Obviously I went the latter route and since my mantra always was (and still is) "How does someone like Google do...
一种由RDBMS到HBase海量数据迁移方法的研究,付志成,刘辰,信息化的世界需要大数据的支持,大数据的出现又使得关系型数据库暴露出了种种的不足,应用分布式数据库HBase可以解决这一问题。本�
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。 与hadoop一样,Hbase目标主要...
HBase是一个在HDFS上开发的...作为NoSQL的一种,HBase不同于一般的关系型数据库,它不支持SQL,但在特定的问题空间里,它能够做RDBMS不能做的事。它不仅能够存储结构化的数据,而且适合于半结构化甚至非结构化的数据。
HBase是参考google的bigtable的一个开源产品,建立在hdfs之上的一个提供高可靠性、高...是一种介于nosql和RDBMs之间的一种数据库系统,仅支持通过rowkey和range进行数据的检索,主要存储非结构化数据和半结构化数据。
tpcc-hbase tpcc-hbase是在Domino上运行的tpcc基准。 传统的tpcc基准测试仅支持RDBMS和SQL接口。 tpcc-hbase支持Domino的键值接口。 任何问题请与我联系:
传统的RDBMS关系型数据库(例如SQL)存储一定量数据时进行数据检索没有问题,可当数据量上升到非常巨大规模的数据(TB或PB)级别时,传统的RDBMS已无法支撑,这时候就需要一种新型的数据库系统更好更快的处理这些...
Pig和Hive为HBase提供了高层语言支持,使其可以进行数据统计(可实现多表join等),Sqoop则为其提供RDBMS数据导入功能。HBase不能支持where条件、Orderby查询,只支持按照主键Rowkey和主键的range来
Hbase是一种NoSQL数据库,这意味着它不像传统的...Hbase是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多RDBMS系统的特性,比如列类型,辅助索引,触发器,和高级查询语言等。