环境简介
- JDK1.7.0_79
- Flume1.6.0
- Elasticsearch2.0.0
Flume不支持Elasticsearch2.x版本
目前官方Flume最新的版本是1.6.0,该版本只支持Elasticsearch1.7.x的版本,暂时不支持Elasticsearch2.x版本,因为Elasticsearch2.x版本做了比较大的改动,很多API都已经废弃不用了,具体可以参考下面的连接
第三方ElasticsearchSink2支持2.x版本
这里我找到了一个第三方开源的FlumeSink插件来支持Elasticsearch2.x版本
但是这个项目是使用Gradle编译打包的,所以下面先简单介绍下Gradle的安装和使用
我这里使用的Mac,所以安装Gradle很简单。但是Gradle是依赖于JVM的
|
|
然后从github下载ElasticsearchSink2的源代码,并且导入到idea中,然后执行下面gradle命令构建项目(下面这两个脚本是ElasticsearchSink2项目自带的),会在ElasticsearchSink2/build/libs/目录下生成对应的jar包
|
|
添加刚才构建好的elasticsearch-sink2-1.0.jar到Flume的classpath或者是Flume的lib目录,删除Flume的lib目录下的guava-.jar,jackson-core-.jar。
具体的配置文件
Flume Collector端的flume_collector_es2.conf配置
|
|
flume_collector_es2.conf这里的配置需要修改
|
|
Flume Agent端的flume_agent_file.conf配置
|
|
启动ES服务
|
|
启动Flume Collector端
|
|
启动Flume Agent端
|
|
启动Flume Agent可能会遇到如下的错误:
|
|
出现上面的错误是因为lucene的版本不对,这里我开始尝试安装的是下面的几个版本:
- Elasticsearch-2.2.2:没有选择Elasticsearch-2.2.2版本是因为ik分词插件没有对应的版本
- Elasticsearch-2.2.1:没有选择Elasticsearch-2.2.1版本是因为报错没有找到LUCENE_5_3_1对应的Lucene-5.3.1版本,但是这里下载Elasticsearch-2.2.1版本中的jar包依赖的是Lucene-5.4.1版本,所以找不到Lucene-5.3.1版本。这里可能是因为ElasticsearchSink2的问题,暂时先换成ElasticsearchSink2使用的2.0.0版本,后续在尝试单独升级Lucene-5.4.1试试。
- Elasticsearch-2.0.0:ElasticsearchSink2使用的此版本
检查一下ES源码的pom文件就可以知道ES和Lucene的版本对应关系如下:
ES版本 | Lucene版本 | ik插件版本 |
---|---|---|
Elasticsearch-2.2.2 | Lucene-5.4.1 | 无 |
Elasticsearch-2.2.1 | Lucene-5.4.1 | 1.8.1 |
Elasticsearch-2.0.0 | Lucene-5.2.1 | 1.5.0 |
检查ES的索引数据
如下图所示,ES的mapping和索引数据都正确,说明我们使用ElasticsearchSink2的方式成功将Flume1.6.0采集的command.log日志数据写入到Elasticsearch2.0.0版本里
参考文章: