前言:上篇[大數據]-Elasticsearch5.3.1+Kibana5.3.1從單機到分布式的安裝與使用<1>中介紹了ES ,Kibana的單機到分布式的安裝,這里主要是介紹Elasticsearch5.3.1的一些概念。官方示例的基本數據導入,數據查詢以及ES,kibana的功能組件的認識和熟悉。
一、Elasticsearch中的基本概念:
Elasticsearch所涉及到的每一項技術都不是創新或者革命性的,全文檢索,分析系統以及分布式數據庫這些早就已經存在了。它的革命性在於將這些獨立且有用的技術整合成一個一體化的、實時的應用。它對新用戶的門檻很低,當然它也會跟上你技能和需求增長的步伐。-《Elasticsearch權威指南》
Elasticsearch是面向文檔(document oriented)的,這意味着它可以存儲整個對象或文檔 (document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在 Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之 一。 -《Elasticsearch權威指南》
在數據庫的學習中我們就知道了索引這個概念,索引是為提高查詢效率而誕生的。索引讓我們更快的定位需要查詢的關鍵字。以Mysql來說:[從索引的數據結構划分]Mysql數據庫中包含FULLTEXT,HASH,BTREE,RTREE這幾種索引,分別是全文索引(全文索引是MyISAM的一個特殊索引類型,主要用於全文檢索),hash索引(只有Memory存儲引擎顯示支持hash索引),B-tree B樹索引(目前大部分數據庫系統及文件系統都采用B-Tree或其變種B+Tree作為索引結構),R-tree 空間索引(MyISAM支持空間索引,主要用於地理空間數據類型)。
全文索引(FULL-TEXT):用於全文檢索(在一個文件中搜索匹配的詞),又被稱為倒排文檔索引,是現代搜索引擎的關鍵技術。這也是ES的核心側重點,致力於用戶以前所未有的速度檢索和分析大數據。
1、Mapping:相當於數據庫表的schema,即定義這張表的字段和類型
2、Index:索引相當於數據庫
3、Type:相當於數據庫的表
4、Document:行數據
5、Fileds:字段
6、Id:相當於記錄的編號
7、shared:分片,這是ES提供分布式搜索的基礎,其含義為將一個完整的index分成若干部分存儲在相同或不同的節點上,這些組成index的部分就叫做shard
二、Elasticsearch官方示例數據的導入:[localhost換成本機IP即可]
1、獲取示例數據:
-
wget https://download.elastic.co/demos/kibana/gettingstarted/shakespeare.json wget https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip wget https://download.elastic.co/demos/kibana/gettingstarted/logs.jsonl.gz
解壓縮:
-
unzip accounts.zip gunzip logs.jsonl.gz
2、導入示例數據:隨便選取一個節點導入,這里為分布式環境,單機版同理。
- 創建mapping: 以下下指令可以直接在終端運行,也可以在Kibana的控制台運行。
-
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/shakespeare -d ' {"mappings" : { "_default_" : { "properties" : { "speaker" : {"type": "string", "index" : "not_analyzed" }, "play_name" : {"type": "string", "index" : "not_analyzed" }, "line_id" : { "type" : "integer" }, "speech_number" : { "type" : "integer" } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.18 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.19 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/logstash-2015.05.20 -d ' {"mappings": { "log": { "properties": { "geo": { "properties": { "coordinates": { "type": "geo_point" } } } } } } }';
- 導入數據:
-
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary @shakespeare.json curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/_bulk?pretty' --data-binary @logs.jsonl
3、查看是否導入成功:
-
curl 'localhost:9200/_cat/indices?v'
三、ES-head集群管理:
1、分布式環境中只需選取一個節點啟動ES-head,無論是不是Master節點,都能連接到整個集群,這里選取node-1(192.168.230.150)導入。導入之后重新訪問192.168.230.150:9100查看head界面可得到如下:
2、所有數據導入后會分片存儲在不同的節點上,默認是5個分片,一個副本。每一個分片的副本都不會和本體存在一個節點上從而保證一個節點數據丟失可已得到恢復。我們可以修改連接的節點:結果同上,說明無論連接哪個節點都能獲取集群的信息。
3、關閉其中一個節點(這里關閉node-1,master節點看看會出現什么結果)
我們發現集群健康值由green變為了yellow,重新選舉了node-3為主節點Master。我們重新啟動node-1查看:
node-1節點恢復了,所存儲的數據分片也恢復了,node-3仍是Master。
4、ES-head做一個簡單的查詢示例:
ES-head可以清楚的查看集群的各種信息,節點,索引,數據。這里簡單示例一個查詢,具體功能后面在探索。查詢type為account的數據條件是年齡范圍在10-50之間。
四、Kibana功能組件:
1、開啟Kibana,訪問5601端口:http://ip:5601 創建Index pattern :ba*,log*,sh*(Management->Index Patterns->add New->取消所有選項->Create)
2、Discover數據查詢展示:根據條件過濾選擇要展示的字段右側點擊add,點開數據詳情可以選擇table和json兩種格式展示。
3、Visualize可視化:多種可選擇圖形可視化。
- 可選圖形有:餅狀圖,折線圖,條形圖,坐標圖。。。等。
- 下面根據示例創建一個餅狀圖:(Visualizer->Create a Visualizer->pie chart->From a New Search, Select Index選擇ba*)得到下圖:
-
選擇過濾條件和聚合函數:(buckets:Split Slices->Aggregation->Range->Field->balance-add Range選擇數據的范圍 )
-
在此基礎上再添加條件:(Add sub-buckets->Split Slices->aggregation ->Terms ->field ->age ->Apply changes運行):
-
-
點擊右上角的save保存為pie-ba-example.
- 創建條形圖:參考官方文檔https://www.elastic.co/guide/en/kibana/current/tutorial-visualizing.html得到結果如下:
- 保存為log-Vertical-example。
- 創建坐標圖:參考官方文檔https://www.elastic.co/guide/en/kibana/current/tutorial-visualizing.html得到結果如下:
- 保存為log-map-example
4、dashboard:儀表盤,進行多圖組合展示。
- dashboard->create a dashboard->add,然后根據過濾條件選擇我們需要的圖點擊圖選擇,可將多圖放在一起展示。將上幾步做的進行展示如下:
- 保存為dashboard-example。
5、Dev Tools:控制台,可以發送http請求,用Curl可以做的請求,在這里都可以做。只要能和ES的REST API對接,都可以在這里做。
- GET:
-
PUT:
-
-
-
DELETE:
-
6、Management:管理Index Pattern,Object (創建保存的圖像),系統的一些配置文件可以進行編輯,略過(暫時還沒有細細研究)。
到這里,EK的安裝和使用的基本介紹就完了。
注意:
我們在DB中創建數據庫的時候是先配置schema在填寫數據庫的名字然后保存,這樣一個數據庫就建好了,這里在創建Mapping的時候其中就包含index的命名。其中Json參數包含type也就是表名,以及字段的定義。
Kibana主要做可視化展示,需要將可視化的組件多熟悉,了解過濾條件和聚合函數如此才能和業務結合。