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-11-19 00:16:52

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

kettle数据同步的五种方案

数据同步:当数据源发生改变时,其他相关数据也跟着发展变化.根据需求不同可采取以下方案. 1.触发器 在数据库建立增删改的触发器.触发器将变更放到一张临时表里.oracle同步cdc 优点:实时同步 缺点:影响到业务系统,因为需要在业务系统建立触发器 2.日志 通过分析源数据库日志,来获得源数据库中的变化的数据.oracle异步cdc 优点:不影响业务系统 缺点:有一定得延时,对于没有提供日志分析接口的数据源,开发的难度比较大 3.时间戳 在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记

使用CopyTable同步HBase数据

CopyTable是Hbase提供的一个数据同步工具,可以用于同步表的部分或全部数据.本文介绍如何使用CopyTable同步HBase数据.针对没有hadoop集群的用户,还介绍了单机运行CopyTable的配置和参数.根据我们的测试,在表不压缩的情况下,单机版CopyTable可以达到1小时100G左右的导入速度.10T以下的数据都可以使用CopyTable导入数据. 准备工作 1 安装HBaseCopyTable依赖于hadoop mapreduce.如果源HBase集群中开启了mapred

IT坊观察:介绍六种常见的网上数据同步方案

现在,很多用户依赖智能电话或其他手持设备(iPhone.iPod Touch.黑莓.Windows Mobile或Android设备等)以及多台电脑来访问和管理公司式个人数据,偶尔也会通过公用的Web服务来访问信息. 即时访问电子邮件.联系人和便笺变得更加方便了,但也存在一些难题--特别是当用户在外需要添加或编辑联系人.设定便笺或约会时,会涉及同样的一组数据的同步管理. 这种数据同步管理可使用基于云的服务: 互联网服务器充当中心存储库和信息门户.要得到准确.可靠的信息同步,至关重要的是选择适合自

Elasticsearch与MongoDB 数据同步及分布式集群搭建

过River可以与多种数据源Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox等同步,公司的业务是用 MongoDB,今天测试环境虚拟机上配置了一下Elasticsearch 与 MongoDB的同步,作个大概的过程记录,主要利用richardwilly98 / elasticsearch-river-mongodb.River通过读取mongodb的oplog来同步数据,oplog这个表来使集群中

MySQL超时参数以及相关数据集成、DataX数据同步案例分享

一.背景 MySQL系统变量提供关于服务器的一些配置和能力信息,大部分变量可在mysqld服务进程启动时设置,部分变量可在mysqld服务进程运行时设置.合理的系统变量设值范围,是保障MySQL稳定提供服务的重要因素.本文主要描述MySQL数据库的超时timeout相关的一些系统变量,部分参数同程序应用中常见到的CommunicationsException: Communications link failure异常息息相关. 本文也结合数据同步的场景,对使用DataX3进行MySQL数据同步

MySQL异构数据同步--tair为例

在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式时候,MySQL的异构数据同步,可以更简单和更通用. 以tair为例,简要描述一下以MySQL为基础的一种方案. 所谓异构数据同步,是指应用只更新MySQL,而由后端的某些机制将这些更新应用到其他数据存储服务上. 1.MySQL-Tair 引擎 a) 使用 b) 说明 这不是一个"存储引擎",实际上数据存储在tair服务器上.执行insert/update/delete时,只是将对应的动作put /rem

两台SqlServer数据同步解决方案

server|sqlserver|解决|数据|数据同步 前些天遇到特殊需求,两台SqlServer服务器天隔一方,需要实效性很高的数据同步.     大家知道通过internet网,要高准确性和高实效性的实现两台数据库数据同步是个棘手的问题.     网络上找了些资料,有一篇文章可供参考http://www.sxsoft.com/technology_test/show_news.asp?id=450,文章中介绍了Sqlserver的出版和订阅方法来同步数据.根据文章做了下试验,是可以的,有以下

两台Sql server数据同步

server|数据|数据同步 复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性. SQL复制的基本元素包括 出版服务器.订阅服务器.分发服务器.出版物.文章 SQL复制的工作原理 SQL SERVER 主要采用出版物.订阅的方式来处理复制.源数据所在的服务

利用数据库复制技术 实现数据同步更新

数据|数据库|数据同步 利用数据库复制技术 实现数据同步更新复制的概念复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性.SQL复制的基本元素包括出版服务器.订阅服务器.分发服务器.出版物.文章SQL复制的工作原理SQL SERVER 主要采用出版物.订阅的方式来处理复