ES+HBase【案例】仿百度搜索02:项目架构设计

本文探讨了一个项目中如何处理海量数据的存储与检索问题。数据来源于爬虫或企业内部,存储在HBase中,并在ES建立索引来实现快速查询。提出了三种HBase到ES的数据同步方案,包括直接同步、使用HBase协处理器和借助Redis做中间层。推荐使用第三种方案,因具有较好的可控性和容错性。项目流程涉及数据入库、Redis存储Rowkey、ES索引建立、用户查询及数据完整信息获取。
摘要由CSDN通过智能技术生成

一、项目概览

在这里插入图片描述

二、项目整体架构流程

在这里插入图片描述
1:项目的数据来源可以是通过爬虫到互联网上采集的数据,也可以是企业数据库中的内部数据
2:根据数据的来源不同,使用不同的程序将数据入库到HBase,实现海量数据存储
3:针对HBase中的数据在ES中建立索引。

注意:并不是把HBase中数据的完整内容全部在ES中建立索引,只需要将检索用到的那些字段在ES中建立索引即可。例如:HBase存储的原始数据有20个字段,在ES可能只需要存储5个字段即可,具体的存储细节在后面会详细分析。

4:在数据展现模块中提供仿百度搜索功能。

三、ES和HBase数据同步的三种方案

针对此项目,有一个核心功能点,如何在ES中同步对HBase中的数据建立索引?
大致有下面这几种方案:

1:方案1

在将原始数据入库HBase的时候,同时在ES中对数据建立索引,此时可以把入库HBase和ES的代码放在一个事务中,保证HBase和ES的数据一致性。

这种方案的优点是操作方便,缺点是入库HBase和ES的代码绑定到一起了,耦合性太高,如果遇到ES出现故障,会导致入库HBase的操作也会失败,或者是ES集群压力过大的时候,会导致数据入库HBase的效率降低。
在这里插入图片描述

2、方案二

在将原始数据入库HBase的时候,通过HBase中的协处理器实现数据同步,让协处理器监听HBase中的新增和删除操作,在协处理器内部操作ES,实现对数据建立索引的功能。
HBase中的协处理器其实类似于MySQL中的触发器。

这种方案的优点是通过协处理器可以很方便的获取到HBase中新增和变化的数据,如果入库HBase的程序是之前已经开发好的,此时不需要对之前的代码进行任何改动,影响程度比较低。缺点是过于依赖HBase了,如果后期涉及到HBase集群版本升级,无法保证协处理器功能的可用性。
在这里插入图片描述

3、方案3

在将原始数据入库HBase的时候,同时在Redis中使用list数据类型模拟一个队列,存储数据的Rowkey。此时将入库HBase和Redis的操作放在一个事务里面,保证数据的一致性。然后再通过另外一个同步程序,从Redis的list队列中读取Rowkey,根据Rowkey到HBase中获取数据的详细信息,在ES中建立索引,将HBase中数据的Rowkey作为ES中数据的ID。

在这个方案里面是将入库HBase和在ES中建立索引这两个功能解耦了,借助于中间层的Redis实现的。
这种方案的缺点是把入库HBase和Redis的功能耦合在一起了,但是Redis是轻量级的,出现问题的概率是比较低的,对性能损耗也不高,所以是可以接受的。
此时就算ES出现问题,只需要在同步程序内部实现正常的异常处理即可,将建立索引失败数据的Rowkey重新添加到Redis的list列表里面即可,不会导致HBase和ES数据不一致的问题。

其实第2种方案和第3种方案都可以使用,个人推荐使用第3种方案,可控性高一些,在项目中也会使用第3种方案实现。
在这里插入图片描述

四、项目整体执行流程

接下来分析一下项目底层细节流程
如下图所示
在这里插入图片描述
1:通过入库程序向HBase中入库数据,同时在Redis中存储数据的Rowkey。

2:从Redis中获取数据的Rowkey,根据Rowkey到HBase中查询数据的详细信息,然后在ES中建立索引。
此时我们的海量数据已经存储到HBase中,并且将需要查询的字段在ES中建立索引了。

3:用户向ES发送查询请求。

4:ES返回符合条件的数据的ID,其实就是HBase中数据的Rowkey。在这里也可以根据需求额外再返回一些字段信息都是可以的。

5:当用户想要查看数据完整详细信息的时候,需要根据Rowkey到HBase中查询。

6:HBase会给用户返回Rowkey对应数据的详细信息。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: ElasticsearchHBase 都是流行的大数据处理工具,可以被集成在一起使用以满足特定的需求。 Elasticsearch 是一个开源的实时分布式搜索和分析引擎,主要用于存储、搜索和分析海量的非结构化和半结构化数据。它具有高可扩展性、性能优越和易于使用的特点,适用于日志分析、全文搜索、指标分析等场景。与其相比,HBase 是一个开源的分布式列存储系统,具有极高的读写性能和大规模扩展性,适用于存储和处理海量结构化数据。 将 ElasticsearchHBase 集成在一起可以发挥两者的优势。可以使用HBase作为Elasticsearch的数据源,将结构化数据存储在HBase中,通过Elasticsearch进行数据的实时搜索和分析。这种集成方式可以兼顾结构化和非结构化数据的处理需求,使得数据的存储和查询更加高效和灵活。 此外,由于Elasticsearch具有分布式的特点,通过与HBase的集成,可以进一步提升数据的容错性和可扩展性。采用HBase作为Elasticsearch的数据存储后端,可以通过HBase内置的负载均衡和数据分区功能将数据分散存储在不同的节点上,实现数据的高可用和分布式处理。同时,HBase从设计上支持横向扩展,可以轻松地扩展存储容量和吞吐量,满足不断增长的数据处理需求。 综上所述,ElasticsearchHBase的集成可以充分发挥两者的优势,实现对结构化和非结构化数据的高效存储、索引和查询。这种集成方式可以应用于各种领域,如日志分析、在线广告、电子商务等,为用户提供更好的数据处理和分析能力。 ### 回答2: ElasticsearchHBase是两种不同的开源分布式数据库系统。它们各自有不同的特点和适用场景。 Elasticsearch是一个全文搜索引擎,用于快速、实时地搜索和分析大量数据。它基于Lucene库构建,提供了分布式的搜索和分析功能。Elasticsearch支持实时索引和搜索,适用于需要快速查询和高可用性的场景。它在海量数据上表现出色,并具有良好的扩展性和可靠性。 而HBase则是一个分布式、可扩展的列式数据库,用于存储大规模结构化数据。它基于Hadoop的HDFS文件系统,适用于需要高度可靠性和扩展性的大数据存储场景。HBase支持面向列的数据存储和查询,并提供ACID事务保障。它适用于需要大规模并发读写和随机访问的场景。 当需要将ElasticsearchHBase集成时,通常是为了利用它们各自的优势来满足复杂的应用需求。例如,可以使用HBase来存储大规模的结构化数据,同时使用Elasticsearch进行实时搜索和分析。在这种集成方案中,HBase作为数据存储层,而Elasticsearch用于提供高效的实时搜索和查询功能。 通过将两者集成,可以在HBase上存储大规模的数据,同时使用Elasticsearch进行快速的全文搜索和分析。这种集成方案可以使得数据的存储和查询具备更高的效率和性能。同时,由于Elasticsearch具有良好的可伸缩性和高可用性,因此还可以提高系统的稳定性和容错性。 总而言之,ElasticsearchHBase的集成可以为大规模数据存储和实时搜索需求提供一个理想的解决方案。这种集成方案可以充分发挥两者的优势,提供高效、可靠的数据存储和搜索能力,满足复杂的应用场景需求。 ### 回答3: ElasticsearchHBase是两个开源的分布式数据存储和搜索系统,具有不同的特点和应用场景。他们可以相互集成,以提供更强大的数据存储和搜索能力。 首先,Elasticsearch是一个用于全文搜索和分析的分布式实时搜索引擎。它可以通过将数据索引到倒排索引中,以高效地执行全文搜索、实时分析和数据聚合。Elasticsearch还具有分布式的架构,能够自动处理数据的分片和复制,并实现高可用性。它还提供了灵活的查询语言和API,以便于开发者进行复杂的搜索和分析操作。 而HBase是一个建立在Hadoop上的分布式列式数据库。它以Hadoop的分布式文件系统HDFS作为底层存储,支持海量数据的存储和处理。HBase具有强大的随机读写能力,并且是一个高度可扩展的系统。它适用于需要快速随机访问大规模结构化数据的应用场景,例如日志分析、订单处理等。 集成ElasticsearchHBase可以利用它们各自的优势,实现更丰富的数据存储和搜索功能。一种常见的方案是使用HBase作为主数据存储,而使用Elasticsearch作为辅助索引和搜索引擎。当数据变更时,可以将数据同步到Elasticsearch中进行实时索引更新,以支持更快速的全文搜索和复杂的查询分析。这样一方面可以保证数据的高可靠性和可扩展性,另一方面可以提供更优秀的搜索性能和用户体验。 总而言之,ElasticsearchHBase可以通过集成实现更强大的数据存储和搜索能力。这种集成方案可以根据实际应用场景的需要进行灵活的设计和部署,为用户提供更好的数据分析和搜索体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值