elasticsearch是基于Luence的一个全文检索框架,高效,快速,准确。
本文参考一下几篇博客:
http://blog.csdn.net/cnweike/article/details/33736429
http://www.cnblogs.com/zhongshengzhen/p/elasticsearch_logstash.html
http://blog.csdn.net/yeyuma/article/details/50240595#quote
等。。。
安装环境:
系统环境:ubuntu 14.0 64位。要求可上外网(需要在线安装一些小插件)。
elasticsearch版本:2.3.2。下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-2-3-2,zip版和tar版均可,linux都能解压。
jdk版本:1.8.0_131
logstash2.3.2(安装logstash-input-jdbc插件用。此插件用于定时同步mysql数据到elasticsearch)
下载地址:https://www.elastic.co/downloads/past-releases/logstash-2-3-2
mysql数据库驱动包:mysql-connector-java-5.1.29.jar
elasticsearch安装步骤:
1.安装jdk1.8
步骤忽略。。。。
输入:java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
安装成功。
2.安装elasticsearch:
1)到官网下载安装包,本文选择2.3.2版。
https://www.elastic.co/downloads/past-releases
因为我们是在linux系统上安装,所以下载tar版的即可。
我是在windows上下载好后,传到linux上的。
2)linux普通用户登录即可。我的是hadoop。
将elasticsearch安装包放到/home/hadoop/software 路径下
解压:tar -zxvf elasticsearch-2.3.2.gar.gz
解压后进入他的bin目录下,执行“./elasticsearch”命令即可启动。
由于没有修改配置文件,此时启动的服务仅可以本机访问。即:
http://localhost:9200
如果想其他电脑远程访问,则要修改配置文件:
elasticsearch-2.3.2/config/elasticsearch.yml
将network.host : 192.168.0.1 改为你的linux系统的ip地址,并将行首的 “#”去掉。保存退出。
然后重启elasticsearch服务。重启时可能会弹出两个错误,别担心,下面会写如何解决这两个问题。如果没有,恭喜,你很幸运。
(1) max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [ 262144]
修改配置文件:
sudo vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
(2) max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
修改配置文件:
sudo vi /etc/security/limits.conf
加入:
hadoop soft nofile 65536
hadoop hard nofile 65536
当你访问http://localhost:9200的时候,浏览器会输出一些信息:证明你的服务启动成功。
{
"name" : "Trip Monroe",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.3.2",
"build_hash" : "b9e4a6acad4008027e4038f6abed7f7dba346f94",
"build_timestamp" : "2016-04-21T16:03:47Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
3)elasticsearch有一个管理插件,安装后可以在浏览器管理你的服务。
执行命令即可安装插件:
在elasticsearch-2.3.2/bin目录下执行:
./plugin install mobz/elasticsearch-head
安装成功后访问
http://192.168.42.190:9200/_plugin/head/
即可看到管理界面。
4)服务启动后会打印一些日志,如果你仔细观察会发现有两个端口号,9200和9300.
9200是http协议的访问端口,而9300是程序访问的入口。
5)如何同步mysql数据到elasticsearch
网上有很多资料,大多数都是安装一些插件,本文也是如此。
现在评价比较好的插件是logstash-input-jdbc,那么本文即将讲解如何安装次插件。
(1)到官网下载logstash插件包,放到/home/hadoop/opt/下,zip版的tar版的都可以,linux都可以解压的。
我下的是zip版的。
解压 unzip logstash-all-plugins-2.3.2.zip
cd logstash-2.3.2/bin
(2)此时还不能直接用plugin安装,还需要配置一些东西
首先给你的linux系统安装gem命令(此处需要连接外网)
sudo apt-get update
sudo apt-get install gem
sudo apt-get install Ruby(这个是否必须安装没测,反正我装了)
然后替换一下镜像
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
或
sudo vi Gemfile #
修改 source 的值 为: "https://ruby.taobao.org"
3, sudo vi Gemfile.jruby-1.9.lock # 找到 remote 修改它的值为: https://ruby.taobao.org
再然后执行
sudo bin/plugin install logstash-input-jdbc
就成功了。
6.安装 logstash-input-jdbc插件同步mysql数据
1, 如果没有安装 gem 的话 安装gem
sudo apt-get update
sudo yum install gem
替换淘宝
1,gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
2,gem sources -l
*** CURRENT SOURCES ***
https://ruby.taobao.org
# 请确保只有 ruby.taobao.org
如果 还是显示 https://rubygems.org/ 进入 home的 .gemrc 文件
sudo vim ~/.gemrc
手动删除 https://rubygems.org/
2, 修改Gemfile的数据源地址。步骤:
1, whereis logstash # 查看logstash安装的位置, 我的在 /opt/logstash/ 目录
2, sudo vi Gemfile #
修改 source 的值 为: "https://ruby.taobao.org"
3, sudo vi Gemfile.jruby-1.9.lock # 找到 remote 修改它的值为: https://ruby.taobao.org
或者直接替换源这样你不用改你的 Gemfile 的 source。
sudo gem install bundler
$ bundle config mirror.https://rubygems.org https://ruby.taobao.org
安装logstash-input-jdbc
我一共试了三种方法,一开始都没有成功,原因如上,镜像的问题。一旦镜像配置成淘宝的了,理论上随便选择一种安装都可以成功,我用的是第三种。
第一种:
cd /opt/logstash/
sudo bin/plugin install logstash-input-jdbc
如果成功就成功了。
./logstash -f jdbc.conf
jdbc.conf(单表同步配置方法)
input {
stdin {
}
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement_filepath => "/home/hadoop/opt/logstash-2.3.2/bin/jdbc.sql"
schedule => "* * * * *"
type => "gjhz"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
elasticsearch {
hosts => "192.168.42.190:9200"
index => "zkr"
document_id => "%{a_id}"
}
stdout {
codec => json_lines
}
}
jdbc.conf(多表同步配置方法)
input {
stdin {
}
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement_filepath => "jdbc.sql"
schedule => "* * * * *"
type => "gjhz"
}
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.42.147:3306/test"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/home/hadoop/opt/logstash-2.3.2/mysql-connector-java-5.1.29.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
statement_filepath => "jdbc2.sql"
schedule => "* * * * *"
type => "rjfw"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
if [type] == "gjhz"{
elasticsearch {
hosts => "192.168.42.190:9200"
index => "zkr"
document_id => "%{a_id}"
}
}else{
elasticsearch {
hosts => "192.168.42.190:9200"
index => "zkr"
document_id => "%{d_id}"
}
}
stdout {
codec => json_lines
}
}
jdbc.sql
select a_id,a_name name , a_age age from aa
jdbc1.sql
select d_id,d_name name ,d_age age from dd
-----------------------------------------------------------------------------
elasticsearch命令行操作
<1> ./elasticsearch
启动服务
<2> ./elasticsearch --cluster.name my_cluster_name --node.name my_node_name
启动服务,并指定集群名称和节点名称。
<3> curl 'localhost:9200/_cat/health?v'
查看集群健康状况
<4> curl 'localhost:9200/_cat/nodes?v'
查看集群节点列表
<5> curl 'localhost:9200/_cat/indices?v'
列出所有索引列表
<6> curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
批量导入数据
注:1 需要在accounts.json所在的目录运行curl命令。
2 localhost:9200是ES得访问地址和端口
3 bank是索引的名称
4 account是类型的名称
5 索引和类型的名称在文件中如果有定义,可以省略;如果没有则必须要指定
6 _bulk是rest得命令,可以批量执行多个操作(操作是在json文件中定义的,原理可以参考之前的翻译)
7 pretty是将返回的信息以可读的JSON形式返回。
8 插入数据格式:
{"index":{"_index":"logstash-2015.05.20","_type":"log","_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender ":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
"_index" 、 "_type" 、"_id" ,三个字段可选,用于指定索引、类型、id。
"_index" 、 "_type"不指定的话默认使用命令中的"bank"、"account".
"_id"不指定的话自动生成。
----------------------------------------------------------------------------------
java API
对jackson的依赖: