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:
Logstash + ElasticSearch + Kibana的完整日志收集分析工具链,也有非常多公司在用。
HBase数据同步到ElasticSearch的方案的更多相关文章
- HBase数据同步ElasticSearch该程序
ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsear ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
- SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据
在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...
- hbase数据备份或者容灾方案
HBase的数据备份或者容灾方案有这几种:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分别介绍(以下描述的内容均是基于0.94.20版本 ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第五篇:logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
文章转载自: https://blog.csdn.net/laoyang360/article/details/51747266 引言: elasticsearch 的出现使得我们的存储.检索数据更快 ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第三篇:logstash_output_kafka:Mysql同步Kafka深入详解
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484411&idx=1&sn=1f5a371 ...
- kettle数据同步的5中方案
数据同步:当数据源发生改变时,其他相关数据也跟着发展变化.根据需求不同可采取以下方案.1.触发器:在数据库建立增删改的触发器.触发器将变更放到一张临时表里.oracle同步cdc优点:实时同步缺点:影 ...
- mysql数据同步到Elasticsearch
1.版本介绍 Elasticsearch: https://www.elastic.co/products/elasticsearch 版本:2.4.0 Logstash: https://www ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第四篇:使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch
文章转载自: https://www.cnblogs.com/dalaoyang/p/11018541.html 1.go-mysql-elasticsearch简介 go-mysql-elastic ...
随机推荐
- mysql创建用户后无法登陆
创建用户后登陆失败的原因是存在匿名用户: root@controller:~# mysql -h localhost -uaa -ppassword ERROR 1045 (28000): Acces ...
- 【原创】Win7 IE故障:APPCRASH,d3d9.dll,c0000005
问题 今天使用使用IE登录某网址,发现总是报错,如下图,无法浏览. 解决方案 主要讲IE的呈现方案修改即可,如下步骤: 在IE的[Internet选项]选择[高级]选项卡,在[加速的图形]中勾选[使用 ...
- CentOS6.5升级autoconf版本,解决”Autoconf version 2.64 or higher is required“错误
CentOS6.5升级autoconf版本,解决”Autoconf version 2.64 or higher is required“错误 https://blog.csdn.net/pretty ...
- css伪类元素:after 的多功能用法——任意大小的底边框
需求用法出现的背景: 由于项目UI的优化,项目中所有tab导航选中的状态都是统一样式书写的,之前都是用的border-bottom,新的需求如果用以前的本办法就是定位一个选中边框在底部,但是涉及的模板 ...
- How to show only next line after the matched one?
awk '/blah/{getline; print}' logfile
- Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度
Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性 ...
- 细说JavaScript对象(4): for in 循环
如同 in 运算符一样,使用 for in 循环遍历对象属性时,也将往上遍历整个原型链. // Poisoning Object.prototype Object.prototype.bar = 1; ...
- 【spring boot】15.spring boot项目 采用Druid数据库连接池,并启用druid监控功能
在http://www.cnblogs.com/sxdcgaq8080/p/9039442.html的基础上,来看看spring boot项目中采用Druid连接池. GitHub地址:示例代码 == ...
- 修改weblogic端口的方法
修改weblogic的端口常用的有两种方法 方法一.登录weblogic的console.如:http://localhost:7001/console/ 1).在环境--服务器节点中点击你要修改的服 ...
- Quartz配置CronTrigger
CronTrigger 构造器 String name, //触发器名称 String group, //触发器的组名 String jobName, //job名称 String jobGroup, ...