HBase数据同步到ElasticSearch的方案

ElasticSearch的River机制

ElasticSearch自身提供了一个River机制,用于同步数据。

这里可以找到官方目前推荐的River:

http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/

但是官方没有提供HBase的River。

其实ES的River非常简单,就是一个用户打包好的jar包,ES负责找到一个node,并启动这个River。如果node失效了,会自动找另外一个node来启动这个River。

public interface RiverComponent {
    RiverName riverName();
}
public interface River extends RiverComponent {

    /**
     * Called whenever the river is registered on a node, which can happen when:
     * 1) the river _meta document gets indexed
     * 2) an already registered river gets started on a node
     */
    void start();

    /**
     * Called when the river is closed on a node, which can happen when:
     * 1) the river is deleted by deleting its type through the delete mapping api
     * 2) the node where the river is allocated is shut down or the river gets rerouted to another node
     */
    void close();
}

Elasticsearch-HBase-River

github上有两个相关的项目:

https://github.com/mallocator/Elasticsearch-HBase-River

这个项目其实很简单,在River里用定时器启动一个HBase的Scanner,去扫描数据,并把数据插到ES里。和自己手动写代码去扫描差不多。

https://github.com/posix4e/Elasticsearch-HBase-River

这个项目利用了HBase的Replication机制,模拟了一个Hbase Replication的结点,然后同步数据到ES里。

但是这个项目是基于Hbase0.94的,实现的功能有限。

Hbase0.94和HBase0.98 的API变化很大,基本不可用,而且作者也说了不能用于生产环境。

HBase的Relication机制

可以参考官方文档和cloudera的一些博客文章:

http://hbase.apache.org/book.html#cluster_replication

http://blog.cloudera.com/blog/2012/07/hbase-replication-overview-2/

HBase的Relication机制,其实和Mysql的同步机制很像,HBase的每个Region Server都会有WAL Log,当Put/Delete时,都会先写入到WAL Log里。然后后台有线程会把WAL Log随机发给Slave的Region Server。而Slave的Region Server会在zookeeper上记录自己同步到的位置。

HBase同步数据到Solr的方案:Lily HBase Indexer

Cloudera内置的Cloudera Search实际上就是这个Lily Hbase Indexer:

https://github.com/NGDATA/hbase-indexer

这个项目就是利用了HBase的Replication功能,把HBase数据修改(Put,Delete)都抽像成为一系列Event,然后就可以同步到Solr里了。

这个项目抽象出了一个子项目:HBase Side-Effect Processor。

https://github.com/NGDATA/hbase-indexer/blob/master/hbase-sep/README.md

让用户可以自己写Listener来处理Event。

HBase数据同步到ElasticSearch的最终方案

考虑了上面的东东,所以决定基于HBase Side-Effect Processor,来自己写简单的程序数据到ES里。

其实代码是非常简单的,参考下Demo里的LoggingConsumer就好了。

https://github.com/NGDATA/hbase-indexer/blob/master/hbase-sep/hbase-sep-demo/src/main/java/com/ngdata/sep/demo/LoggingConsumer.java

    private static class EventLogger implements EventListener {
        @Override
        public void processEvents(List<SepEvent> sepEvents) {
            for (SepEvent sepEvent : sepEvents) {
                System.out.println("Received event:");
                System.out.println("  table = " + Bytes.toString(sepEvent.getTable()));
                System.out.println("  row = " + Bytes.toString(sepEvent.getRow()));
                System.out.println("  payload = " + Bytes.toString(sepEvent.getPayload()));
                System.out.println("  key values = ");
                for (KeyValue kv : sepEvent.getKeyValues()) {
                    System.out.println("    " + kv.toString());
                }
            }
        }
    }

其它的一些东东:

ElasticSearch 和Solr cloud的比较

从网上找到的帖子,讨论比较多的是12年,貌似后面就比较少了。

https://github.com/superkelvint/solr-vs-elasticsearch

http://stackoverflow.com/questions/2271600/elasticsearch-sphinx-lucene-solr-xapian-which-fits-for-which-usage

http://www.quora.com/Why-Cloudera-search-is-built-on-Solr-and-not-Elasticsearch   Cloudera-Search为什么选择Solr而不是ElasticSearch

个人倾向于ElasticSearch,因为从流行度来看,ES正在超越solr cloud:

Logstash + ElasticSearch + Kibana的完整日志收集分析工具链,也有很多公司在用。

时间: 2024-08-08 13:40:49

HBase数据同步到ElasticSearch的方案的相关文章

HBase数据同步ElasticSearch该程序

ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/ 可是官方没有提供HBase的River. 事实上ES的River很easy,就是一个用户打包好的jar包,ES负责找到一个node.并启动这个River.假设node失效了,会自己主动找另外一个node来启动

转载:MySQL和Redis 数据同步解决方案整理

from: http://blog.csdn.net/langzi7758521/article/details/52611910 最近在做一个Redis箱格信息数据同步到数据库Mysql的功能. 自己想了想,也有大概方案. 1.队列同步,变跟数据2份,使用消息队列,一份给Redis消费,一份给Mysql消费. 2.后台定时任务,定时刷新Redis中箱格信息到数据库. 网上也到处找了下解决方案,发现这么个问题,居然是天下一大抄,还抄的一字不差,我也抄吧. 方案一: 读: 读redis->没有,读

mysql 同步数据到 ElasticSearch 的方案

MySQL Binlog 要通过 MySQL binlog 将 MySQL 的数据同步给 ES, 我们只能使用 row 模式的 binlog.如果使用 statement 或者 mixed format,我们在 binlog 里面只能知道对应的 query 语句,完全没法知道这条语句到底改了啥数据,所以要从 binlog 里面得到实际的数据,只能用 row 模式. Row 模式还可以设置 full,noblob 以及 minimal 三种 image 模式,后面两种主要是为了减少空间占用,默认是

MongoDB 数据自动同步到 ElasticSearch

我们产品中需要全文检索的功能,后端数据存储主要使用了 MySQL + MongoDB,而其中需要检索的内容是在 MongoDB 中的. MongoDB 本身是自带文本索引功能的,但是,不支持中文.术业有专攻,MongoDB 是数据存储应用,那么全文检索就使用专业的全文搜索引擎吧. 预选的几个选手有:Solr.ElasticSearch.Xapian.Sphinx.XunSearch.由于我们的数据量比较大,觉得现在单机已经有些力不从心了,MongoDB 也开始计划做分片,那么全文搜索如果自带分布

Oracle数据库数据同步方案

一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblink来完成. 二.通过物化视图定时刷新来实现数据同步.物化视图刷新方式有增量刷新和完全刷新两种模式: 三.高级复制,分为多主复制和物化视图复制两种模式.其中多主复制能进行双向同步复制和异步复制:物化视图用于单向复制,定时刷新,与第二条类似: 四.流复制,可实现实时和非实时同步: 五.GoldenGat

基于文件的离线数据同步方案

产品此前的数据备份方案,存在不少问题,所以需要设计一个新的方案.本文总结一下新旧方案的优劣 首先APP是一个支持离线的应用.本地数据保存在sqlite,在离线环境下,在本地数据库里读写记录,在有网络的时候,再将数据备份到服务器:同时,也可以随时将数据从服务器恢复到本地 旧方案 此前的备份方案是基于内容的,每一条记录都有create_date和modify_date字段,同时APP保存有latest_backup_date(上次备份时间).然后开始备份的时候,就对所有表进行扫描,根据这3个时间的对

hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步

在之前的博文中提到,hive的表数据是可以同步到impala中去的.一般impala是提供实时查询操作的,像比较耗时的入库操作我们可以使用hive,然后再将数据同步到impala中.另外,我们也可以在hive中创建一张表同时映射hbase中的表,实现数据同步. 下面,笔者依次进行介绍. 一.impala与hive的数据同步 首先,我们在hive命令行执行show databases;可以看到有以下几个数据库: 然后,我们在impala同样执行show databases;可以看到: 目前的数据库

sql server数据同步方案-日志传送

1 功能描述 本方案采用日志传送模式,把核心数据库(主数据库)定期同步到灾备数据库(辅助服务器)及备份库(辅助服务器,便于其他系统使用,减轻主数据压力),期间,如果发生异常导致无法同步,将以电子邮件.短信方式通知管理人员. 2 系统环境 2.1硬件 主数据库: SQLHA 灾备库服务器:DisaterDBSVRA 备份库服务器:BackupDataSVR 2.2软件 主数据库: Win2008 x64 SQL2005 SP4 x64 灾备库: Win2008 x64 SQL2005 SP4 x6

elasticsearch与mongodb分布式集群环境下数据同步

1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索的存储库).ElasticSearch为应用程序提供搜索算法和相关的基础架构,用户只需要将应用程序中的数据上载到ElasticSearch数据存储中,就可以通过RESTful URL与其交互.ElasticSearch的架构明显不同于它之前的其他搜索引擎架构,因为它是通过水平伸缩的方式来构建的.不同