HBase 作为 NoSQL 或列式数据库,虽然解决了海量数据存储需求,但查询满足非常有限。因为访问 HBase 表中的行,只有三种方式:通过单个RowKey

通过RowKey的range(最好是前缀扫描)

全表扫描

如何实现 HBase 的复杂查询,有一些方案:借助 Phoenix,他会给 HBase,做了个映射,生成二级索引,同时支持 SQL, 可实现一些不太复杂的查询,我觉得更适用于离线数据分析的场景。参见《Phoenix 安装与使用》

借助 HBase Indexer,Cloudera 平台默认集成,实际上就是把 HBase 数据同步到 Solr 进行索引,配置很繁琐,并且 Solr 的分布式感觉很蛋疼(除了那个admin ui还凑活)。参见《HBase Indexer 整合 Solr》

所以,HBase 还是让它好好的干存储的事情吧,检索的事情交给搜索来做,通过对比 Solr 和 ES,无疑 ES 使用起来更爽一些。那么同步方案呢?

方案客户端双写

数据可能不同步?面对高并发的写入场景,HBase能扛住,ES能否扛住?双写之前再搞个消息队列?ES 从 HBase 拉数据

(类似 MySQL + Solr 的增量索引),如何增量,其实就是根据监控一个 update_time 来实现,问题也不少,比如不好监控删除的数据,并且 HBase 只有一个 Rowkey,貌似搞不了HBase 入库后同步到 ES

如何实现?还要考虑 ES 的索引性能。

最终发现 HBase Coprocessor + ES BulkProcessor 可以解决上面的问题,不过要稍微写点代码,代码不是很复杂,但是调试和测试很蛋疼。

Coprocessor 与 BulkProcessor

Coprocessor 是 HBase 的协处理器,可以理解为跟数据库触发器一样的东西,他能够监听 HBase 数据改变的事件,并且运行在不同的角色上,这里我们主要是运行在 HBase Region 的 Coprocessor,

BulkProcessor 是 ES 提供的客户端API,能够实现,多少条记录,多大数据量,多少秒进行一次ES操作,相当于客户端实现的缓冲池。

问题总结生产环境 HBase 运行在集群中,所以 Coprocessor 实现的 jar 包需要上传到 HDFS,这样确保 HBase 集群才能加载到。开发环境本地就可以了。

修改 Coprocessor 代码后,重新生成 jar 包上传到 HDFS 的文件名,必须和之前不一样,否则就算卸载掉原有的 Coprocessor 再重新安装也不能生效,建议给 jar 包增加一个版本号。

不小心删除了上一个版本的 jar,然后还没有卸载 HBase 表上老版本的Coprocessor, 完蛋,HBase 直接启动不了,解决办法是先把上一个版本的 jar 恢复,卸载或删除 HBase 的表。

这几个问题导致调试和测试痛苦的一比。

具体实现

待续

hbase 导入到es_HBase 实现数据同步 ElasticSearch相关推荐

  1. hbase 导入到es_HBase数据同步到ElasticSearch的方案

    ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里能够找到官方眼下推荐的River: 可是官方没有提供HBase的River. 事 ...

  2. kafka数据同步Elasticsearch深入详解

    1.kafka同步到Elasticsearch方式? 目前已知常用的方式有四种: 1)logstash_input_kafka插件: 缺点:不稳定(ES中文社区讨论) 2)spark stream同步 ...

  3. 30.kafka数据同步Elasticsearch深入详解(ES与Kafka同步)

    1.kafka同步到Elasticsearch方式? 目前已知常用的方式有四种:  1)logstash_input_kafka插件:  缺点:不稳定(ES中文社区讨论)  2)spark strea ...

  4. hbase导入csv文件_HBase 数据导入 ImportTsv

    ImportTsv 工具是通过map reduce 完成的.所以要启动yarn. 工具要使用jar包,所以注意配置classpath.ImportTsv默认是通过hbase api 插入数据的 [ha ...

  5. elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...

  6. mongo-connector导入数据到Elasticsearch

    当前测试环境下Elasticsearch版本为2.3.不同版本的mongo-connector.elastic-doc-manager/elastic2-doc-manager所支持的Elastics ...

  7. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践

    一.为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数 ...

  8. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原

    一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...

  9. Elasticsearch与MySQL数据同步

    Elasticsearch数据同步 elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsear ...

最新文章

  1. Caffe源码解析5:Conv_Layer
  2. CAS SSO实践中,目前解决的问题和有待解决的问题
  3. Stanford CS107 Programming Paradigms 编程范式
  4. define关键字的使用,以及宏函数的定义
  5. ansible基础-Jinja2模版 | 过滤器
  6. (九)深入浅出TCPIP之网络同步异步
  7. android studio安装教程完整,Android Studio 安装配置方法完整教程【小白秒懂】
  8. 数据结构 2-2 线性表的顺序表实现
  9. IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning
  10. 计算机硬件检测与数据恢复试题,计算机硬件检测维修与数据恢复赛项国赛赛题.doc...
  11. vs2019找不着工具箱了_解决vs2010中工具箱的不见问题
  12. linux内核去掉pty,请问如何升级内核?高手请进!!!
  13. Linux多网卡多路由设置
  14. BUUCTF 从娃娃抓起
  15. 虚拟机安装---模板机准备1(最小化安装)
  16. 医药行业大拼杀 小药药、药聚汇、朗致集团医药、同仁堂,模式对比
  17. 将等号作为键值的js字符串转json
  18. 安徽省宿州高考成绩查询时间2021年,2021年宿州高考成绩查询系统入口
  19. 工艺夹具-减速箱体零件工艺规程及加工φ52H8孔夹具设计(论文+说明书+工艺卡+外文翻译+CAD图纸)
  20. 根据身份证推算出年龄

热门文章

  1. 【Python】密码生成器
  2. C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和
  3. C#LeetCode刷题之#860-柠檬水找零(Lemonade Change)
  4. 为什么大多数程序员都抽烟_为什么大多数重新设计都会失败
  5. 数据科学家 数据工程师_发展数据科学家和工程师
  6. mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
  7. Oracle(二):查询、函数、集合运算
  8. 3行Python代码采集B站(弹幕、评论、用户)数据
  9. kafka 如何做到1秒发布百万级条消息?
  10. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器--在深度学习的视觉分类中的,这两个分类器的原理和比较