Elasticsearch+Mongodb 用mongo-connector 实时更新

来源:互联网 发布:云智能网络机顶盒 编辑:程序博客网 时间:2024/05/07 20:45

0.说明:

(1)单机用mongo-connector连接ES和Mongo,ES也支持作为后端数据库,当为了保持业务逻辑.用Mongo作为后端数据库,利用mongo-connector. 将mongo的数据导入到ES中

(2)原来想用nucth作为连接ES和Mongo,没有成功.指定nutch的gora配置,用nucth形成index的时候(nutch index -all),出现问题.

(3)该文章前提是你已经安装了ES和Mongo,主要介绍mongo-connector的配置

1.环境

Ubuntu 14.04

Elasticsearch-1.4.4

Mongodb 2.7.6


2.mongo-connector安装

(1)先安装python-pip

因为之前装了python2.7 直接用apt-get一些依赖出了问题

(2)利用以下方法:

脚本:   http://download.csdn.net/detail/u010167215/9401225

运行安装.

sudo python get-pip.py


(3)安装connector

pip install mongo-connector


在python目录下dist-packages可以看到相应的目录


3.mongo-connector配置过程

(1)项目使用说明: https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch
(2)创建3个mongdb实例的目录,
在mongodb目录下创建mydb文件夹  
在mydb下创建3个文件夹

mkdir -p mydbcd
mydbmkdir -p rs0_0
mkdir -p rs0_1
mkdir -p rs0_2

(3)启动3个mongodb实例,参数-replSet 用来配置replica group(一个PRIMARY节点 27017 ,两个SECONDARY节点 27018和27019)

./mongod --port 27017 --dbpath ../mydb/rs0_0 --replSet rs0 -f ../conf/se_mongdb.yml &
./mongod --port 27018 --dbpath ../mydb/rs0_1 --replSet rs0 -f ../conf/se_mongdb.yml &
./mongod --port 27019 --dbpath ../mydb/rs0_2 --replSet rs0 -f ../conf/se_mongdb.yml &


可以看到如下提示:
about to fork child process, waiting until server is ready for connections.forked process: 31363
child process started successfully, parent exiting

参数说明 --dbpath db地址   
se.mongdb.yml 配置文件  可以参考下一篇(es+mongo+nutch中se.yml的配置)  

启动过程中如果出现 ERROR: child process failed, exited with error number 100 
解决方法 删除对应rs0_0 或1,2 文件夹下的  mongod.lock



(4)启动客户端
./mongo --port 27017

(5)配置replica信息,添加3节点
>rsconf = { _id: "rs0", members: [ { _id: 0, host: "127.0.0.1:27017" } ] }
>rs.initiate( rsconf )
>rs.add("127.0.0.1:27018")
>rs.add("127.0.0.1:27019")

#查看配置结果
>rs.conf()
因为是单机的 所以设置为127.0.0.1

(6)启动  mongo-connector 将mongo的数据实时更新到ES中
mongo-connector -m localhost:27017 -t localhost:9200 -d elastic_doc_manager


可以看到如下提示

Logging to mongo-connector.log.

4.测试过程
(1)启动mongo客户端
bin/mongo --port 27017

(2)在mongo中写入数据
>use test
> db.col.insert({name:"张三", birth:"1980-01-01"})
> db.col.insert({name:"李四", birth:"1981-01-01"})
> db.col.insert({name:"王五", birth:"1982-01-01"})

(3)可以用curl命令或者用ES的插件head查看ES的数据是否更新

head插件运行地址:http://localhost:9200/_plugin/head/

此时在 elasticsearch-1.4.4/data/.../nodes/0/indices  文件夹下也可以看到同步过来的数据

(4)在执行的mongo-connector -m localhost:27017 -t localhost:9200 -d elastic_doc_manager  如果出现

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/dist-packages/mongo_connector/util.py", line 85, in wrapped
    func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/mongo_connector/oplog_manager.py", line 272, in run
    timestamp)
  File "/usr/local/lib/python2.7/dist-packages/mongo_connector/util.py", line 32, in wrapped
    return f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/mongo_connector/doc_managers/elastic_doc_manager.py", line 111, in handle_command
    self.elastic.indices.delete_mapping(index=db.lower(),
AttributeError: 'IndicesClient' object has no attribute 'delete_mapping'


解决方案:

https://github.com/mongodb-labs/mongo-connector/issues/348

即更换elasticsearch-py  按照说明.mongo-connector目前只支持ES1.x  这个时候将脚本进行降级,主要命令如下:

sudo pip install 'elasticsearch < 2.0'




文档参考链接:

http://log.medcl.net/item/2013/03/mongodb-mongodb-river-elasticsearch-deployment/

http://blog.csdn.net/yeasy/article/details/47842437




0 0