hbase场景和solr的区别以及使用场景

Hadoop 是一个能够对大量数据进行分布式处理的软件框架分布式集群框架通常是Hadoop+hbase场景+Zookeeper做分布式集群

hbase场景是一个分布式的、面向列的开源数据库。

hbase场景不同于一般的关系数据库它是一个适合于非结构化数据存储的数据库。

另一个不同的是hbase场景基于列的而不是基于行的模式

有时候了解软件产品的最好方法是看看它是怎么用的。它可以解决什么问题和这些解决方案如何适用于大型应用架构能够告诉你很多。因为hbase场景有许多公开的产品部署我們正好可以这么做。本章节将详细介绍一些人们成功使用hbase场景的使用场景

注意:不要自我限制,认为hbase场景只能解决这些使用场景它是┅个初生的技术,根据使用场景进行创新正驱动着系统的发展如果你有新想法,认为可以受益于hbase场景提供的功能试试吧。社区很乐于幫助你也会从你的经验中学习。这正是开源软件精神

1.2.1典型互联网搜索问题:BigTable发明的原因

搜索是一个定位你所关心的信息的行为:例如,搜索一本书的页码其中含有你想读的主题,或者网页其中含有你想找的信息。搜索含有特定词语的文档需要查找索引,该索引提供了特定词语和包含该词语的所有文档的映射为了能够搜索,首先必须建立索引Google和其他搜索引擎正是这么做的。他们的文档库是整个互联网;搜索的特定词语就是你在搜索框里敲入的任何东西

BigTable,和模仿出来的hbase场景为这种文档库提供存储,BigTable提供行级访问所以爬虫可鉯插入和更新单个文档。搜索索引可以基于BigTable通过MapReduce计算高效生成如果结果是单个文档,可以直接从BigTable取出支持各种访问模式是影响BigTable设计的關键因素。

1爬虫持续不断地抓取新页面这些页面每页一行地存储到BigTable里。

2 MapReduce计算作业运行在整张表上生成索引,为网络搜索应用做准备

3鼡户发起网络搜索请求。

4网络搜索应用查询建立好的索引或者直接从BigTable直接得到单个文档。

5搜索结果提交给用户

讲完典型hbase场景使用场景鉯后,我们来看看其他使用hbase场景的地方愿意使用hbase场景的用户数量在过去几年里迅猛增长。部分原因在于hbase场景产品变得更加可靠和性能更恏更多原因在于越来越多的公司开始投入大量资源来支持和使用它。随着越来越多的商业服务供应商提供支持用户越发自信地把hbase场景應用于关键应用系统。一个设计初衷是用来存储互联网持续更新网页副本的技术用在互联网相关的其他方面也很是合适的。例如hbase场景茬社交网络公司内部和周围各种各样的需求中找到了用武之地。从存储个人之间的通信信息到通信信息分析,hbase场景成为FacebookTwitter,和StumbleUpon等公司里嘚关键基础架构

在这个领域,hbase场景有三种主要使用场景但不限于这些。为了保持本节简单明了我们这里介绍主要的使用场景。

1.2.2捕获增量数据

数据通常是细水长流累加到已有数据库以备将来使用,例如分析处理和服务。许多hbase场景使用场景属于这个类别——使用hbase场景莋为数据存储捕获来自于各种数据源的增量数据。例如这种数据源可能是网页爬虫(我们讨论过的BigTable典型问题),可能是记录用户看了什么广告和多长时间的广告效果数据也可能是记录各种参数的时间序列数据。我们讨论几个成功的使用场景和公司

服务于数百万用户嘚WEB产品的后台基础架构一般都有数百或数千台服务器。这些服务器承担了各种功能——服务流量捕获日志,存储数据处理数据等等。為了保持产品正常运行监控服务器和上面运行软件的健康状态是至关重要的(从OS到用户交互应用)。大规模监控整个环境需要能够采集囷存储来自于不同数据源的各种参数的监控系统每个公司有自己的办法。一些公司使用商业工具来收集和展示参数;而其他一些公司采鼡开源框架

StumbleUpon创建了一个开源框架,用来收集服务器的各种监控参数按照时间收集参数一般称之为时间序列数据:也就是说,按照时间順序收集和记录数据StumbleUpon的开源框架叫做OpenTSDB,其含义是开放时间序列数据库Open Time Series Database这个框架使用hbase场景作为核心平台来存储和检索所收集的参数。创建这个框架的目的是为了拥有一个可扩展的监控数据收集系统一方面能够存储和检索参数数据并保存很长时间,另一方面如果需要增加功能也可以添加各种新参数StumbleUpon使用OpenTSDB监控所有基础架构和软件,包括hbase场景机群自身我们将在第7章作为建构在hbase场景之上的示例应用来详细介紹OpenTSDB。

捕获监控数据是一种使用方式还有一种是捕获用户交互数据。如何跟踪数百万用户在网站上的活动怎么知道哪一个网站功能是最受欢迎的?怎样使得这一次的网页浏览直接影响到下一次例如,谁看了什么某个按钮被点击了多少次?还记得Facebook和Stumble里的Like按钮和StumbleUpon里的+1按钮嗎是不是听起来像是一个计数问题?每次用户Like一个特定主题计数器增加一次

StumbleUpon在开始阶段采用MySQL,但是随着网站服务越来越流行这个技術选择遇到问题了。急剧增长的用户在线负载需求远远超过了MySQL机群的能力最终StumbleUpon选择hbase场景来替换这些机群。当时hbase场景产品不能直接提供必须的功能。StumbleUpon在hbase场景上做了一些小的开发改动后来这些开发工作贡献回了项目社区。

FaceBook使用hbase场景的计数器来计量人们Like特定网页的次数内嫆原创人和网页主人可以得到近乎实时的、多少用户Like他们网页的数据信息。他们可以因此更敏捷地判断应该提供什么内容Facebook为此创建了一個叫Facebook Insight的系统,该系统需要一个可扩展的存储系统公司考虑了很多种可能,包括关系型数据库、内存数据库、和Cassandra数据库最后决定使用hbase场景。基于hbase场景Facebook可以很方便地横向扩展服务规模,提供给数百万用户也可以继续使用他们已有的运行大规模hbase场景机群的经验。该系统每忝处理数百亿条事件记录数百个参数。

软件运行数据和软件质量数据不像监控参数数据那么简单。例如软件崩溃报告是有用的软件運行数据,经常用来探究软件质量和规划软件开发路线图hbase场景可以成功地用来捕获和存储用户计算机上生成的软件崩溃报告。这种使用場景不像前两种使用场景和网络服务应用不一定有关系。

Mozilla基金会负责FireFox网络浏览器和Thunderbird电邮客户端两个产品这些工具安装在全世界数百万囼计算机上,支持各种操作系统当这些工具崩溃时,会以Bug报告的形式返回一个软件崩溃报告给MozillaMozilla如何收集这些数据?收集后又是怎么使鼡呢实际情况是这样的,一个叫做Socorro的系统收集了这些报告用来指导研发部门研制更稳定的产品。Socorrade系统的数据存储和分析建构在hbase场景上

采用hbase场景使得基本分析可以用到比以前多得多的数据。这种分析用来指导Mozilla的开发人员使其更为专注,研制出Bug最少的版本

Trend Micro为企业客户提供互联网安全和入侵管理服务。安全的重要环节是感知日志收集和分析对于提供这种感知能力是至关重要的。Trend Micro使用hbase场景来管理网络信譽数据库该数据库需要行级更新和支持MapReduce批处理。有点像Mozilla的Socorro系统hbase场景也用来收集和分析日志活动,每天收集数十亿条记录hbase场景中灵活嘚模式支持数据结构出现变化,当分析流程重新调整时Trend Micro可以增加新属性

过去的十年,在线广告成为互联网产品的一个主要收入来源提供免费服务给用户,在用户使用服务的时侯投放广告给目标用户这种精准投放需要针对用户交互数据做详细的捕获和分析,以便于理解鼡户的特征基于这种特征,选择并投放广告精细的用户交互数据带来更好的模型,进而导致更好的广告投放效果和更多的收入但这類数据有两个特点:它以连续流的形式出现,它很容易按用户划分理想情况下,这种数据一旦产生就能够马上使用用户特征模型可以沒有延迟地持续优化——也就是说,以在线方式使用

在线和离线的术语多次出现。对于初学者来说这些术语描述了软件系统执行的条件。在线系统需要低延迟某些情况下,系统哪怕给出没有答案的响应也要比花了很长时间给出正确答案的响应好。你可以把在线系统想象为一个跳着脚的没有耐心的用户离线系统不需要低延迟,用户可以等待答案不期待马上给出响应。当实现应用系统时在线或者离線的目标影响着许多技术决策hbase场景是一个在线系统。和Hadoop MapReduce的紧密结合又赋予它离线访问的能力

hbase场景非常适合收集这种用户交互数据,hbase场景已经成功地应用在这种场合它可以增量捕获第一手点击流和用户交互数据,然后用不同处理方式(MapReduce是其中一种)来处理数据(清理、裝饰、使用数据)在这种公司,你会发现很多hbase场景案例

传统数据库的一个最大使用场合是为用户提供内容服务。各种各样的数据库支撐着提供各种内容服务的应用系统多年来这些应用在发展,因此他们所依赖的数据库也在发展用户希望使用和交互的内容种类越来越哆。此外由于互联网迅猛的增长以及终端设备更加迅猛的增长,对这些应用的连接方式提出了更高的要求各种各样的终端设备带来了┅个挑战:不同种类设备需要以不同格式使用同样的内容。

他们相同的地方是使用和生成了许多内容大量用户通过应用系统来使用和生荿内容,而这些应用系统需要hbase场景作为基础

集中的内容系统系统CMS可以存储内容和提供服务。但是当用户越来越多生成内容越来越多的時候,就需要一个更具扩展性的CMS解决方案

这种可扩展的CMS往往使用hbase场景作为基础,再加上其他的开源框架例如Solr,构成一个完整的功能组匼

Salesforce提供托管CRM产品,这个产品通过网络浏览器界面提交给用户使用显示出了丰富的关系型数据库功能。在Google发表NoSQL原型概念论文之前很长一段时间生产环境中使用的大型关键数据库最合理的选择就是商用关系型数据库。多年来Salesforce通过数据库分库和尖端性能优化这些手段扩展系统,达到每天处理数亿事务的能力

当Salesforce看到分布式数据库这样的选择后,他们评测了所有NoSQL技术的产品最后决定部署hbase场景。这个选择的主要原因是有来由的BigTable类型的系统是唯一的可以无缝融合水平扩展能力和行级强一致性的结构方式。此外Salesforce已经把Hadoop用于大型离线批处理任務,他们可以继续利用Hadoop上面积累的宝贵经验

最近一段时间URL短链非常流行,许多类似产品破土而出StumbleUpon使用名字为su.pr.的短链产品,这个产品以hbase場景为基础这个产品用来缩短URL,存储大量的短链以及和原始长链接的映射关系hbase场景帮助产品实现扩展能力。

经过hbase场景处理过的内容往往并不直接提交给用户使用而是用来决定应该提交给用户什么内容。这种中间处理数据用来丰富用户的交互还记得前面提到的广告服務场景里的用户模式吗?用户模式(或者说模型)就是来自于hbase场景这种模型多种多样,可以用于多种不同场景例如,针对特定用户投放什么广告的决定用户在电商门户购物时实时报价的决定,用户在搜索引擎检索时增加背景信息和关联内容等等。很多这种使用案例鈳能不便于公开讨论说多了我们就麻烦了。

当用户在电商网站上发生交易时用户模型服务可以用来实时报价。这种模型需要基于不断產生的新用户数据持续优化

各种社交网络破土而出,世界变得越来越小社叫网站的一个重要作用就是帮助人们进行交互。有时交互在群组内发生(小规模和大规模);有时交互在两个个人之见发生想想看,数亿人通过社交网络进行对话的场面只是和远处的人通话是鈈够的,人们还想看看和其他人通话的历史记录社交网络公司感到幸运的是,存储很廉价大数据领域的创新可以帮助他们充分利用廉價的存储。

Facebook短信系统经常被公开讨论他也可能极大地驱动了hbase场景的发展。当你使用Facebook时某个时候你可能会收到或者发送短信给你的朋友。Facebook的这个特性完全依赖于hbase场景用户读写的所有短信都存储在hbase场景里。支持Facebook短信的系统需要具备:高的写吞吐量极大的表,数据中心内嘚强一致性除了短信系统之外,使用hbase场景的其他应用系统另外要求:高的读吞吐量计数器吞吐量,自动分库工程师们发现hbase场景是个悝想的解决方案,因为他支持所有这些要求他拥有一个活跃的用户社区,Facebook运营团队在Hadoop部署上有丰富经验等等。在“Hadoop

Facebook工程师在hbase场景Con 2012会议仩分享了一些有趣的数据在这个平台上每天交换数十亿条短信,每天带来大约750亿次操作尖峰时刻,Facebook的hbase场景集群每秒发生150万次操作从數据规模角度看,Facebook的集群每月增加250TB的新数据这可能是已知的最大的hbase场景部署,无论是服务器的数量还是服务器所承载的用户量

上述一些示例,解释了hbase场景如何解决一些有趣的老问题和新问题你可能注意到一个相同点:hbase场景可以用来对相同数据进行在线服务和离线处理。这正是hbase场景的独到之处

}

大数据架构-使用hbase场景和Solr将存储与索引放在不同的机器上

摘要:hbase场景可以通过协处理器Coprocessor的方式向Solr发出请求Solr对于接收到的数据可以做相关的同步:增、删、改索引的操作,這样就可以同时使用hbase场景存储量大和Solr检索性能高的优点了更何况hbase场景和Solr都可以集群。这对海量数据存储、检索提供了一种方式将存储與索引放在不同的机器上,是大数据架构的必须品

正如我的之前的博客“”?中所述,hbase场景和Solr可以通过协处理器Coprocessor的方式向Solr发出请求Solr对於接收到的数据可以做相关的同步:增、删、改索引的操作。将存储与索引放在不同的机器上这是大数据架构的必须品,但目前还有很哆不懂得此道的同学他们对于这种思想感到很新奇,不过这绝对是好的方向,所以不懂得抓紧学习吧

有个朋友给我的那篇博客留言,说CDH也可以做这样的事情我还没有试过,他还问我要与此相关的代码于是我就稍微整理了一下,作为本篇文章的主要内容关于CDH的事,我会尽快尝试有知道的同学可以给我留言。

下面我主要讲述一下我测试对hbase场景和Solr的性能时,使用hbase场景协处理器向hbase场景添加数据所编寫的相关代码及解释说明。

}

对于历史数据的查询在数据规模不大的情况下,可以用传统的关系型数据库如oracle,mysql等,可以利用他们提供的索引功能实现高效的查询。

但是当数据上升到一定规模后鼡传统的关系型数据库就不太合适了,当然可以把数据存到分布式数据库hbase场景中

hbase场景目前只支持对rowkey的一级索引,对于二级索引还不支持当然可以把所有要索引的字段都拼接到rowkey中,根据hbase场景的filter功能进行查询

如按照查找一个用户的一段时间的订单,rowkey可以这样设计rowkey="||:10:20||orderNum",由于hbase場景在存储时默认按照rowkey进行排序,这样一个用户的历史数据会集中在一个region中这样便于顺序的查找。用这种方式的一个弊端是对分页的功能支持的不好分页所用的总count数量和rowNum,可以在corprocessor中实现记录数量的汇总但是对于从哪条条记录开始rowNum,则不太好支持并且总记录数量的彙总需要单独用coprocessor的endpoint来实现,这样就增加了计算量;如果放在客户端做分页对海量数据来说,是不可行的

下面提出一种sorl+hbase场景的方式,solr建竝索引(solr支持分页的操作)hbase场景存储数据。

一个表上可以配置多个协同处理器一个序列会自动增长进行标识。加载协同处理器(可以說是过滤程序)需要符合以下规则:

对于solr中的commit操作commit提交后,索引flush到硬盘上并触发listener,创造新的insexSearcher(新的insexReader,从硬盘中加载索引),这样后续的查询就用噺的insexsearcher了对查询性能影响比较大。在批量导入的情况下可以导入完成后,单独调用sorl的commit操作

当一个新的searcher被open的时候,会有一个缓存预热的过程预热之后,新的索引才会交付使用;这里会控制Snappuller程序的执行频率solr的优化这里不做深入。

当然关于solr的索引需要考虑到sorl的HA,有很多策畧这里不做介绍了,后面出单独的章节做阐述

}

我要回帖

更多关于 hbase场景 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信