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
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.2</version>
</dependency>
對jackson的依賴:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.6.3</version>
</dependency>