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" alt="">
Logstash + ElasticSearch + Kibana的完整日志收集分析工具链。也有非常多公司在用。
版权声明:本文博主原创文章,博客,未经同意,不得转载。
HBase数据同步ElasticSearch该程序的更多相关文章
- HBase数据同步到ElasticSearch的方案
ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里能够找到官方眼下推荐的River: http://www.elasticsear ...
- Mysql数据同步Elasticsearch方案总结
Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620
- 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原
一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...
- 基于MySQL Binlog的Elasticsearch数据同步实践
一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...
- 使用Observer实现HBase到Elasticsearch的数据同步
最近在公司做统一日志收集处理平台,技术选型肯定要选择elasticsearch,因为可以快速检索系统日志,日志问题排查及功业务链调用可以被快速检索,公司各个应用的日志有些字段比如说content是不需 ...
- 通过HBase Observer同步数据到ElasticSearch
Observer希望解决的问题 HBase是一个分布式的存储体系,数据按照RowKey分成不同的Region,再分配给RegionServer管理.但是RegionServer只承担了存储的功能,如果 ...
- elasticsearch与mongodb分布式集群环境下数据同步
1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...
- Oracle和Elasticsearch数据同步
Python编写Oracle和Elasticsearch数据同步脚本 标签: elasticsearchoraclecx_Oraclepython数据同步 Python知识库 一.版本 Pyth ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
随机推荐
- Windows无法启动OracleOraDb10g_home1TNSListener维修,1错误067
Oracle服务无法启动,据报:Windows无法启动OracleOraDb10g_home1TNSListener维修,错误 1067:这个过程意外终止. 在网上找了好久也没弄好.说什么环境变量的又 ...
- CFormView动态调整对话框的尺寸和调整比例控制的部署
基于单个文件CFormView动态调整对话框的尺寸和调整比例控制的部署 假设你正在开发一个程序基于单个文件,使用CFormView基类来实现多种形式展示,那么,这个文件可能会给你一点帮助. 一.实现对 ...
- [原] Jenkins Android 自动打包配置(转)
一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...
- 随着MapReduce job实现去加重,多种输出文件夹
总结以往的工作中遇到的一个问题. 背景: 操作和维护与scribe从apacheserver一再被推到日志记录,所以在这里ETL处理正在进行的重.有根据业务的输出类型是用于多文件夹一个需求.方便挂分区 ...
- machine learn in python 第二章2.1.1
1大约 sklearn.datasets from sklearn.datasets import load_iris import numpy as np data = load_iris() da ...
- QlikView线图高亮选择尺寸
作为标题,如今,学生问我一个问题.尺寸Month.expression它是Count(Id). 这个图是一个折线图,不管你选择哪个月的其他下拉列表,销售量.由于Expression里面是这样写的 Co ...
- cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()
转载请注明出处:游戏开发实验室http://blog.csdn.net/u010019717/article/details/32942641 我在编写游戏的时候遇到了这个问题. 物理引擎其它的内容 ...
- Entity Framework笔记(二)
前几日学习了在VS2010Console项目中使用Entity Framework,并且使用Code First模式.通过编写Model类,来生成数据库对应的表.并且,往表中写入数据以及获取表中的所有 ...
- WPF六个控制概述
在线演示:http://v.youku.com/v_show/id_XNzA0NjU1Mjk2.html 清晰版视频+代码下载:http://115.com/lb/5lbcftnrfo9s 一.简单介 ...
- HDU 2414 Chessboard Dance (力模拟)
主题链接:HDU 2414 Chessboard Dance 意甲冠军:鉴于地图,>,<,^,v的方向,字母相当于是箱子,箱子能够推出边界.人保证不会做出边界.以下输入指令,依照指令走,输 ...