将MySQL中的数据导入ElasticSearch

在海盗湾上下载到了AshleyMadison的数据,脑子一热想拿来试试数据挖掘,于是拿ElasticSearch搞起。但问题是源文件为MySQL的dump文件,将其导入到MySQL中之后还不够用的,为了方便搜索,需要将数据再导入到ElasticSearch中。在网上找了很多相关资料和方法进行尝试,出现了各种各样奇怪的错误。最后终于折腾成功,记录一下。

首先,重要的事情说三遍:版本号一定要相互对应,版本号一定要相互对应版本号一定要相互对应版本号不对的话,会出现很多奇奇怪怪的错误,挖下去会是各种无底洞呀……

简单记录一下我的历程:在DigitalOcean上新建了一个Droplet,按照DigitalOcean提供的ElasticSearch安装教程安装了ES 0.90.7,之后按照这篇记录中的方法尝试使用river插件导入,无果。原因是,ES版本不对应。折腾了半天之后发现目前比较靠谱的方法应该是使用elasticsearch-jdbc来直接进行数据导入。

以下为一些简单的命令记录,如果也是用Ubuntu 14.04的同学可以直接拷贝使用。

版本:
ElasticSearch: 1.7.0
elasticsearch-jdbc: 1.7.0.1

1、下载 ElasticSearch 1.7.0

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.0.deb

2、安装 ElasticSearch 1.7.0

dpkg -i elasticsearch-1.7.0.deb

3、配置 ElasticSearch 1.7.0

vim /etc/elasticsearch/elasticsearch.yml

之后修改 network.host: localhost

4、启动 ElasticSearch 1.7.0

service elasticsearch start

5、下载 elasticsearch-jdbc 1.7.0.1

wget http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/1.7.0.1/elasticsearch-jdbc-1.7.0.1-dist.zip

6、解压 elasticsearch-jdbc 1.7.0.1

unzip elasticsearch-jdbc-1.7.0.1-dist.zip

7、配置 elasticsearch-jdbc 1.7.0.1

新建一个.sh文件: vim import.sh

文件内容

bin=/data/elasticsearch-jdbc-importer/bin
lib=/data/elasticsearch-jdbc-importer/lib
echo ‘{
“type” : “jdbc”,
“jdbc” : {
“url” : “jdbc:mysql://localhost:3306/<dbname>“,
“user” : “<dbuser>“,
“password” : “<dbpass>“,
“sql” : “select * from aminno_member_email;“,
“index”: “am“,
“type”: “email
}
}’ | java \
-cp “${lib}/*” \
-Dlog4j.configurationFile=${bin}/log4j2.xml \
org.xbib.tools.Runner \
org.xbib.tools.JDBCImporter

注意红字部分需要根据自己需要进行替换

之后 chmod +x import.sh

8、执行导入

./import.sh

9、测试导入结果

curl -XGET ‘localhost:9200/am/email/_search?pretty&q=*’