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来启动这个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

这个项目事实上非常easy,在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里。

事实上代码是很easy的,參考下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:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVuZ3l1bmFiYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

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

版权声明:本文博主原创文章,博客,未经同意,不得转载。

时间: 2024-08-24 16:12:10

HBase数据同步ElasticSearch该程序的相关文章

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来启动这个Ri

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

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

关于数据同步的几种实现第五种基于软件应用程序进行同步(前四种基于数据库级,第四种做集群一主多从。)

之前网络上收集到的一些关于数据同步的资料 一通过发布/订阅的方式实现同步 发布/订阅是Sql Server自带的一种数据库备份的机制,通过该机制可以快速的实现数据的备份同步,不用编写任何的代码. 此种数据同步的方式存在的以下的一些问题: 表结构不能更改,同步双方的表结构必须一致,一旦表结构发生更改需要重新生成数据库快照. 对于大数据量的同步没有可靠的保证. 网络不稳定的情况下同步也不能保证. 总的来说,这种数据备份同步的方式,在表结构一致.数据量不是特别大的情况下还是非常高效的一种同步方式. 二

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

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

Mongo同步数据到Elasticsearch

个人博客:https://blog.sharedata.info/ 最近需要把数据从Mongo同步到Elasticsearch环境:centos6.5python2.7pipmongo-connector安装:pip install elastic2-doc-manager[elastic5]pip install mongo-connector[elastic5]命令参数:-m mongodb_host:port -- 数据源地址,mongodb数据库地址.-t target_host:por

mysql 同步数据到 ElasticSearch 的方案

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

使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索

安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/laoyang360/article/details/51694519. 下面开始实践: 1. 下载Logstash安装包,需要注意版本与elasticsearch保持一致,windows系统下直接解压即可. 2.添加同步mysql数据库的配置,并将mysql连接驱动jar包放在指定的配置目录 注: 目

elasticsearch -- Logstash实现mysql同步数据到elasticsearch

配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-output-elasticsearch安装效果图如下所示: 下载mysql连接库由于logstash是ruby开发的,所以这里要下载mysql的连接库jar包,从官网下载,我这里下载的是:mysql-connector-java-5.1.46.jar将下载好的mysql-connector-java

mysql准实时同步数据到Elasticsearch

4. 安装JDK8.MySQL5.6驱动以及Logstash -6.0.0 ECS中分别安装JDK8.MySQL5.6驱动以及Logstash -6.0.0.如下图: 安装Logstash input.output插件,此案例数据输入是MySQL,输出是ES,so相应的插件应该是logstash-input-jdbc和logstash-output-elasticsearch. 安装插件的命令分别是(在Logstash主目录下运行):https://blog.51cto.com/433266/b