日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ElasticSearch 大数据搜索查询分析全指南

發布時間:2023/12/3 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch 大数据搜索查询分析全指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

專欄亮點

  • 本專欄采用最新的 ElasticSearch7.x 版本

    同市面上大部分的 ElasticSearch6.x 教程相比較,7 版本更新改動很大,比如新增 KQL(Kibana Query Language),內部索引類型限定為 _doc ,還是 ES for python API 接口的改變等。

    眾所周知,在技術更新如此快的年代,掌握最新的技術就能夠在未來使用它的時候不會那么快就被淘汰。比如從 Java 的 iBatis 到 MyBatis ,從 Struts2 到 Spring MVC 再到 Spring Boot 。雖然你不能夠停止學習的腳步,但是你可以選擇插隊學習,彎道超越,直接學習最新的最流行的技術,這樣就比別人更領先一步。

  • 本專欄將針對 ES 在業務中的核心概念進行解析,讓你不僅明白為什么使用它還能了解該怎樣選擇。

    ES 作為目前大數據方向必須掌握的技能,主要是作為工具分析挖掘業務數據,因此專欄會有大量的實踐案例,涵蓋了工作中常見的業務場景,無論你是初入職場的小白,還是即將畢業的學生黨,專欄能夠給你提供各種實踐操作,手把手帶你玩轉起 ES 。而且我也將在專欄里針對大廠面試中常見的問題給出正確的解答思路。

  • 本專欄將介紹在 Java 和 Python 框架下如何運用 ElasticSearch。

    本專欄講究變學邊做,把學的到東西能夠立即投入到公司實際業務中,所以會介紹如何在 Python 與 Java 框架下使用 ES。同時,比如制作業務分析表、Dashboard、檢測異常值、篩選數據、分組統計數據等功能,本專欄中不會單純貼幾個 Demo,而是會以一個更系統的案例來演示。

  • 專欄將針對 ES 的重要搜索功能 DSL 進行業務分析。

    DSL 之于 ES 的重要性不言而喻,就相當于 SQL 對于傳統數據庫而言。關于如何使用 DSL,對查詢效率較差語句如何進行提高查詢效率,本專欄將針對 DSL 的查詢結合不同的業務需求進行實現,從簡單到深入一步步理解 DSL 。

  • 專欄前部分偏重理論,后部分偏實踐

    實踐是檢驗真理的唯一標準,職場中講究的是效率,先把工具用起來,當使用一段時間后,再去理解不同的概念,相信你會有醍醐灌頂的感覺。就像在大學里上關于數據庫的課,老師會先讓你做個學生數據庫,在慢慢告訴你什么是索引、表連接、范式等。

  • 豐富的圖片展示進行原理和案例講解。

    🔺 如何查看相應數據🔺 如何范圍查詢🔺 餅狀圖開發案例🔺 數據可視化案例

專欄目錄

我們首先會介紹 ElasticSearch 的基本原理概念,對 ES 有個整體的把控。

實踐是最好的學習方式,專欄之后會用 Kibana 對常見的業務需求進行分析,作為學習 ES 的開始,然后到進階 ES 分析,對 ES 高階的分析組件進行學習。

然后會詳細介紹 ES 開發的核心部分 DSL 的詳細介紹講解,結合目前主流的開發語言,Python 與 Java 模擬工作中常見的業務進行開發分析。

為了加強對 ES 的理解,專欄最后會結合多種需求案例進行系統的學習。

一 ElasticSearch 基本原理與環境搭建

  1. 關系型數據庫與 ElasticSearch 對比

  2. ElasticSearch 搜索原理之倒排索引

  3. ElasticSearch 不同角色分工

  4. 分片及副本原理

  5. 基于 Docker 部署單節點 ElasticSearch

  6. 基于 Docker 安裝 Kibana

  7. 基于 Docker 一鍵式部署分布式 ElasticSearch

二 運用 ElasticSearch 做業務分析

  1. Discover 如何查看相應的業務數據

  2. 如何篩選只包含某個字段的業務數據

  3. 如何自定義的查看某個時間段的數據

  4. 折線圖繪制過程與應用場景

  5. 柱狀圖繪制過程與應用場景

  6. 餅狀圖繪制過程與應用場景

三 ElasticSearch 高級數據分析可視化

  1. 熱力圖在數據分析中的應用

  2. 主題分析之標簽云圖

  3. 業務分析進階之腳本字段

  4. 高階時間序列數據可視化

  5. Timelion 在時間序列中的應用

  6. Dashboard 專題數據分析可視化

四 深入理解 ElasticSearch 之搜索

  1. 基于 Rest API 的 ElasticSearch 增刪改查(1)

  2. 基于 Rest API 的 ElasticSearch 增刪改查(2)

  3. 基于 Rest API 的 ElasticSearch 增刪改查(3)

  4. 如何運用強大的 ElasticSearch 核心 DSL

  5. 組合查詢怎么玩

  6. 如何根據聚合求取各種數值指標

  7. 什么是深入嵌套聚合的萬用套法

  8. 優化 Query 查詢效率之 Scroll 查詢

  9. 優化聚合數據查詢效率之 Partition

五 基于 Python/Java 開發案例解析

  1. Python Elasticsearch Client 實戰

  2. 天氣指標監控數據實戰

  3. 天氣指標數據篩選實戰

  4. 結合指標數據場景優化查詢效率實戰

  5. Java Elasticsearch Client 實戰

  6. 基于 Java 進行天氣指標數據篩選實戰

  7. 基于Java 優化效率查詢

六 ElasticSearch 實戰業務案例上手

  1. 基于 ELK 天氣指標監控在線實時監控案例

  2. 基于機器學習的 ElasticSearch 異常值檢測案例

  3. 基于 MovieLens 的電影搜索案例

你將獲得什么?

  • 最新的 ElasticSearch 特性運用

  • ElasticSearch 業務核心技能比如 Kibana 業務分析方法,這些方法將會滿足絕大多數公司需求,餅圖,折線圖,柱狀圖,聚合分析,分桶等。

  • ElasticSearch 大數據搜索分析高級玩法比如 DSL 查詢語法的基礎與高級用法,了解如何使用 DSL 為全文檢索服務,了解如何把 ES 當做數據庫,使用 DSL 實現各種 SQL 操作。

  • Java 和 Python 框架下如何運用 ElasticSearch

  • ElasticSearch 環境部署和搭建比如集群搭建,了解分片,實例,節點角色概念,什么是倒排索引,對 ES 有個整體的把握。

適讀人群

  • ElasticSearch 愛好者,對 ES 有強烈的好奇心

  • 大數據工程師,Java/Python/ES 運維工程師,數據分析與挖掘工程師

  • 初入職場的或者即將找工作面試的同學

  • 急需 ES 解決當前公司的業務需求

作者介紹

作者 zhupc,有豐富的大數據與機器學習工作經驗。目前在某上市外企公司研發中心任職,負責 ES 數據分析與機器學習開發工作。

擅長 Java、Python、機器學習、Kafka 和 ES 等項目開發與管理。

購買須知

  • 本專欄為圖文內容,共計 38 篇。每周更新 2 篇,預計從 2020 年 4 月 8 日至 2020 年 6 月 15 日左右更新完畢。
  • 本專欄為虛擬產品,一經付費概不退款,敬請諒解。
  • 本專欄可在 GitChat 服務號、App 及網頁端 gitbook.cn 上購買,一端購買,多端閱讀。

訂閱福利

  • 訂購本專欄可獲得專屬海報(在 GitChat 服務號領取),分享專屬海報每成功邀請一位好友購買,即可獲得 25% 的返現獎勵,多邀多得,上不封頂,立即提現。

  • 提現流程:在 GitChat 服務號中點擊「我-我的邀請-提現」。

  • 購買本專欄后,服務號會自動彈出入群二維碼和暗號。如果你沒有收到那就先關注微信服務號「GitChat」,或者加我們的小助手「GitChatty6」咨詢。(入群方式可查看第 4 篇文末說明)。

課程內容

ElasticSearch 是什么?

為什么要學習 ElasticSearch ?

ElasticSearch(ES)作為一款優秀的分布式搜索分析引擎,越來越受到許多互聯網公司的關注,像小米、滴滴出行、攜程旅游、阿里云和騰訊云等都在使用 ElasticSearch 。

最知名的應用公司就是 GitHub,它采用 ES 作為搜索引擎對代碼進行搜索。雖然它是一款優秀的分布式搜索引擎,但是它強大的查詢、分析、聚合能力使得它與數據庫的邊界越來越模糊。因此很多大公司都喜歡用 ES 作為數據庫來存儲日志或者其他業務數據,最常見的結合就是通過 Kafka 、 Redis 來作為數據源,logstash 進行轉化,ES 對數據存儲,kibana 對數據進行展示, ES+logstash+kibana(ELK)一體化的日志分析、業務指標分析。

越來越多的公司使用 ElasticSearch ,這門技術已經不僅僅是大數據工程師必須要掌握的了,ES 還提供了 Java ,python 等 API,因此 ES 將會成為 Java 工程師與 Python 工程師必不可缺的工具,靈活應用 ES 將會成為你未來最有競爭力的能力。

為什么不使用 MySQL,Oracle 或者 Hbase

傳統數據庫優點是結構化查詢,查詢速度快、安全。但是當數據量較大時候,無論是查詢還是插入都會變的十分緩慢,當然 MySQL 也可以做成分布式,但是部署以及維護成本較高。Oracle 查詢速度是很快的,即使數據量較大,查詢速度也不會很慢,但是有多少公司愿意負擔這個費用呢?

為什么不使用 Redis 或者 Hbase 呢?

對于文檔數據庫,每個數據庫都有其應對的需求,就 Redis 而言,Redis 更適合做緩存數據庫,查詢速度非常快,但是它的數據結構是鍵值對,不能夠進行復雜的需求查詢,只能給一個 key 然后返回結果。Hbase 是基于Hadoop 的數據庫,它的特點是能夠存儲海量數據,并且擴展起來簡單,因為底層是基于 HDFS 的。對于實時需求任務,以及在線分析就比較困難,不可能把所有數據都加載出來,或者寫一個 MapReduce job 來進行任務分析,這樣的工程是比較耗費資源的。

ES 是分布式的,并且在數據量超大的情況下其查詢速度也嗖嗖的快。另外對象中無論是怎樣的復雜關系,都可以用 JSON 格式表達出來,可讀性較高,ES 就是以 JSON 數據格式存儲數據。并且支持在線分析、實時分析。ES 是基于存儲、查詢、聚合分析和可視化于一體的解決方案。

什么樣的數據適合存進去呢?

日志數據,一般如果程序遇到什么問題都可以通過查詢日志分析來定位錯誤的地方,這種需求肯定是能夠過關鍵字查詢,能夠在線可視化分析。這個需求就不合適放在傳統數據庫中,因為日志冗余大,而且涉及很多文本查詢,使用傳統數據庫是非常不方便的,Redis 等文檔數據庫更不適合。ES 正好就是全文本檢索系統,且是分布式的適合這個需求。另外指標數據也是適合存進去的,指標實時在線監控、報警等,ES 提供了一整套解決方案。

所以說不同的數據庫或者全文檢索系統都有其專門的應用場景,當涉及到實時,文本檢索,數據量大,可視化分析,聚合分析的時候都可以考慮使用 ES 來作為解決方案。

ElasticSearch 能夠做什么?

從數據獲取,存儲計算到可視化,ES 開發了一整套解決方案,Logstash 、Beat 負責數據抓取,ES 負責存儲計算,kibana 對數據進行展示分析。另外還有收費的 X-Pack 可以實現安全、告警、監控和 ML 等更豐富的功能。ES 在搜索、日志分析、指標分析和安全分析等領域應用廣泛。從前端到后端到數據分析,從云服務到最流行的機器學習,ES 都提供了一整套解決方案。

ElasticSearch 項目的起源是什么?

ES 起源于一款優秀的基于 Java 開發的搜索引擎類庫——Lucene。Lucene 具有高性能、易擴展的優點,但是它只是一個類庫,與業務結合的比較緊密。筆者曾使用過 C# 的 Lucene.net ,當時的業務場景是對農村宅地基信息進行搜索,我那時候研究類庫的使用方法,首先如何對文本分詞,分詞后如何建立索引……之后終于完成了一個全文搜索功能,踩了很多坑,學習曲線很陡峭。

另外如果有其他的項目也需要全文搜索功能,那你只能重新寫全文搜索功能業務。全文搜索只是一個功能,不應該跟業務耦合的這么緊密,因此將這個功能單獨抽離出來作為一個服務,只需要提供一個接口,就可以實現這個功能。因此出現了 Solr(Apache 開源項目),Elastic Inc(開源軟件/上市公司)的 ES ,Splunk(商業上市公司)。

圖(a)是使用 Lucene 開發項目,與業務耦合緊密,不同的項目需要重新開發全文搜索功能。

圖(b)是將全文搜索業務抽離出來作為一個云服務。

ElasticSearch 在互聯網開發中有多火爆?多流行?

市場上存在很多搜索引擎,相對于 Java 工程師來說 Solr 應該是最為熟悉的,當然 Solr 也火爆了很多年,而 Splunk 鮮為人知些,因為它是收費的。查看最近幾年搜索引擎的排名情況,可以看出,2016 年是個分水嶺,2013 年到 2016 年 Solr 都遠遠超過 ES,但是 ES 在 2016 年之后,開始飛速的增長,以至超過 solr 跟 Splunk ,成為最受歡迎的一款搜索引擎。

伴隨而來就是 ElasticSearch 相關的崗位在招聘市場中陡然大增,一度出現供不應求的現象。平均薪資水平也遠高于行業內其他工種。

關系型數據庫與 ElasticSearch 對比

基本概念對比

關系型數據庫,像最常見的 Mysql , SqlServer 都是屬于關系型數據庫,關系型數據中有這幾種概念:數據庫、表、行、列、Schema,還有 SQL 查詢語句。

以學生數據庫為例,回憶一下數據庫過程:

  1. 建學生數據庫
  2. 見一個學生表
  3. 配置學生字段,如名稱 varchar、性別 char 等
  4. 一行代表一個學生,不同的列代表這個學生不同的屬性

ES 也與關系型數據庫如出一轍,只是叫法不同,在 ES 中建一個學生數據庫步驟如下:

在 ES 中啟動一個 ES 實例,這個實例就相當于數據庫,表在 ES 中被稱為索引 Index,行稱為文檔 Document,列稱為字段 Field ,Schema 被稱為 Mapping ,數據庫中查詢語句 SQL 在 ES 中有相應的 DSL 查詢語句。

因此建學生索引:

  1. 配置 ES,啟動一個 ES 實例
  2. 新建一個學生索引
  3. 不需要配置字段屬性,ES 會自動識別
  4. 一個 JSON 字符串代表一個學生,JSON 字符串中有學生屬性字段 Field

具體對應關系如下表:

RDBMS ES
Table Index(Type)
Row Document
Column Field
Schema Mapping
SQL DSL

創建 Table/Index 對比

傳統數據創建方式如下,使用簡單的 SQL 語句就能夠輕松創建,但是前提是要定義好表結構以及數據類型。

CREATE TABLE Student(    name varchar(20),    sex char(2),    age int);

ES 基于 Http 協議的,增刪改查的接口都基于 Http ,因此它需要使用 ES 的 Rest API 才能夠創建,只需要將 JSON 格式的學生數據利用 Rest API PUT 給 ES 即可自動創建,并且可以選擇性的更改 ES 自動創建好的數據字段的類型 ,后面的課時中有詳細的介紹如何對 ES 進行增刪改查。

下面的這個語法,是基于 ES 的可視化界面 Kibana 來做的,使用 PUT 的方式,索引是 student,操作是 _create 創建。這樣的話就會自動創建好索引,以及數據字段的類型,比如 name 是 text 類型,age 是 數字類型。

PUT student/_create/1{  "name":"xiaoming",  "sex":"male",  "age":18}

Row/Document 對比

傳統數據庫中,row 就是一行數據,每行數據是一條記錄。查詢結果如下:

name     | sex  |age xiaoming | male | 18

但是在 ES 中數據記錄的方式是 documet ,插入數據是將數據看做 documet 然后以 JSON 的格式插入進行,因此查詢返回的結果也是 JSON。

{  "took" : 10,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 1,      "relation" : "eq"    },    "max_score" : 1.0,    "hits" : [      {        "_index" : "student",        "_type" : "_doc",        "_id" : "1",        "_score" : 1.0,        "_source" : {          "name" : "xiaoming",          "sex" : "male",          "age" : 18        }      }    ]  }}

Column/ Field 對比

傳統數據的話每列代表一個屬性,name 列都是都是姓名并且類型是 varchar(20)。

ES 根據字段類型自動創建,會給 name 字段自動定義為 String 類型。

Schema /Mapping 對比

傳統數據庫 Schema 說明了表之間的聯系結構,字段關系主外鍵等。

而 ES 是沒有這么多復雜的關系,不存在主外鍵,表與表之間相互聯系,因此 ES 是將一個對象的 JSON 實體直接存到 ES 中,通過 mapping 來查看具體結構。

{  "mapping": {    "properties": {      "age": {        "type": "long"      },      "name": {        "type": "text",        "fields": {          "keyword": {            "type": "keyword",            "ignore_above": 256          }        }      },      "sex": {        "type": "text",        "fields": {          "keyword": {            "type": "keyword",            "ignore_above": 256          }        }      }    }  }}

SQL/DSL 對比

兩者都是一種語法,SQL 是針對傳統數據庫的,DSL 是針對 ES 的。在 “創建 Table/Index 對比” 這個部分已經能夠很好的說明了兩者的區別與聯系,語法不通,但是應用場景非常的相似,像增刪改查,分組等,兩者都具備這樣的功能。

小結

本節我們明白了兩者之間的異同,就能夠很好的理解ES各個概念,本課時對傳統數據庫與 ES 做了一個粗略的對比,只通過本課時想要把握兩者的具體與聯系是比較困難的,想要了解更多的 ES 特性請多關注后面的實戰課時。

ElasticSearch 搜索原理之倒排索引

倒排索引作用

試想一下這個情景,你也記不清什么時候讀過這個一段話:“老劉,老劉,食量大似牛,吃一個老母豬不抬頭.”,只記得是紅樓夢里面的臺詞,上學的時候語文老師還解讀過,現在覺得特別有意思,想看看完整的這個故事。

于是你買了一本《紅樓夢》,打開目錄,定位不同章節的位置,然后按照順序一章一章的遍歷,找找哪一章里面有這么一句話。終于經過你不懈的努力終于找到這句話來自于“劉姥姥進大觀園”哪一章。

這個檢索的過程,映射關系是從文檔關鍵詞,因為我們是翻閱不同的章節文檔來檢索哪里出現了這么一句話。

這都能忍?也是服了。如何解決這個問題呢?為了查找某一個或多個關鍵詞,不得不查詢遍歷所有文檔,得出這些關鍵詞出現在哪些文檔中。這種方式未免也太耗時耗力了,有沒有一種方法能夠快速檢索到呢?

思考一下,我們要避免根據章節一章章的取遍歷查詢,能不能夠根據詞來定位到章節呢?像新華字典那樣,查找某個詞,然后定位到某個詞的頁數,如果也對《紅樓夢》這本書也建立那樣的索引,起步不是非常的方便?

這個建索引的過程,就是所謂的倒排索引,是從關鍵詞文檔,這是一個反過程。英文叫 invert index ,你也可以理解為反索引,或者逆索引,只不過這種索引方式,大部分譯為倒排索引

創建倒排索引

針對《紅樓夢》這本書,我們搭建一個搜索引擎,因此人為的查找實在是太變態了。

首先以章節為 ID 建立一個《紅樓夢》數據庫。

ID Text
0 老劉,老劉,食量大似牛,吃一個老母豬不抬頭
1 女兒是水作的骨肉,男人是泥作的骨肉。
2 必得兩個女兒伴著我讀書,我方能認得字

常規的檢索方法,遍歷 ID ,通過 ID 查找對應的 Text 是否包含”老劉,老劉,食量大似牛,吃一個老母豬不抬頭“這句話。如果使用倒排索引該怎么做呢?

  • 首先對文檔分詞,并統計詞在哪個章節 ID 里面
  • 生成一張"詞-章節"映射表
  • 對查找句子進行分詞,拿著這些詞到映射表中查找,在哪個章節里面
  • 計算并排序相似度,相似度的 topN 推薦給用戶

建設倒排索引映射表(為了減少冗余,這里分詞結果沒有被全部列出):

Word ID
老劉 0
食量 0
老母豬 0
女兒 1,2
男人 1
骨肉 1
讀書 2
方能 2
兩個 2

基于倒排索引查詢

假設映射表如上,我們再對”老劉,老劉,食量大似牛,吃一個老母豬不抬頭“這句話進行檢索,首先這句話會被分詞處理成”老劉,食量,老母豬“。

得到了這三個詞,到索引表中檢索,得到的結果是(0,3,100%),0代表章節的ID,4代表詞在對應章節中命中的次數,100%代表通過某種相似度計算方法得出的相似度(這里相似度的計算方法,假設為”相似度=檢索語句命中的詞個數/檢索語句總的詞個數“),因此就能輕易的得出,這句話很有可能出現在《紅樓夢》的第一章中。

再對一句話進行檢索”女兒一定要學會讀書寫字“,這句話將會被分詞處理成”女兒,讀書,寫字“。

再到索引表中去檢索,得到

  1. (1,1,33%),第一個1代表章節ID,第二個1代表三個詞在這個章節中只命中了一個,33%代表我使用相似度方法計算的相似度。
  2. (2,2,66%),第一個2代表章節ID,第二個2代表三個詞在第2章節中命中了2個,66%是計算的相似度。

對相似度進行排序,自然搜索引擎將會把文檔2推薦出來。這里可能會有個疑問,為什么把2推薦出來呢?這句話在紅樓夢中并不存在啊?從這里就可以看出,搜索引擎只是根據相似度進行推薦,而并不能保證推薦的一定是對的。搜索引擎只是將數據庫中相似的案例推薦給你。

小結

通過本小節我們明白了,什么是倒排索引,以及如何建立倒排索引。對搜索引擎原理有個大致的了解,明白了搜索引擎原理,原來搜索引擎是通過相似度的指標將文檔推薦出來,怪不得使用百度搜索關鍵詞是總是出來很多鏈接,并且越往后的鏈接越是跟想要搜索的內容不相關。

ElasticSearch 不同角色分工

節點作用

ES 是一個分布式全文檢索引擎,既然是分布式那一定是設計多個節點甚至多個集群。為什么需要分布式呢?試想一下,如果 ES 節點只設計成一個,那么這個節點會涉及哪些工作呢?

  • 首先該節點應該具備響應用戶的讀寫操作
  • 該節點應該具備存儲數據的能力
  • ES應該具備協調多個用戶集體請求的操作
  • 另外 ES 會自動映射用戶輸入的數據類型,因此ES應該具備自動映射數據類型的操作

節點優化

當然這些只是這個節點最基本,最應該做到的功能,節點應該具備的功能絕不會僅限于此。這么多工作都讓這個單個節點來做,服務器撐得住恐怕這個節點也不樂意了。當多個用戶觸發寫操作,節點會協調多個用戶的請求,然后再把寫的數據進行類型轉換,然后再把數據寫到磁盤中。整個過程,可以說任何一個過程都能夠輕易的達到瓶頸。

  • 請求響應瓶頸:這個不難理解,如果請求過多,服務器宕機也不為過
  • 讀寫瓶頸:磁盤的寫入能力是有限的,也就是經常說的 I/O 瓶頸
  • 協調請求以及自動映射數據類型:這個瓶頸來自于服務器 CPU 性能,CPU 需要協調多個線程來做這些事

節點分工

這個單個節點可以把它比喻為牛批的全棧工程師,啥都會,啥都干,但是一個的精力總是有限的,現在不是一個人單打獨斗就能解決問題,需要有一個好的 Team 才能夠成就偉大的事。ES 也是如此,既然單個節點不能夠滿足需求,那就按照任務多分配幾個節點,將任務具體到節點,不同的節點負責不同的任務。

因此 ES 為分配不同的任務,定義了以下幾個節點角色:Master,Data Node,Coordinating Node,Ingest Node

Master 節點:每個 ES 節點啟動之前都會有個默認配置 node.master:true ,也就是說每個節點都有可能成為 Master 節點,這些節點被稱作 Master-eligible nodes ,就是合格的有資格成為 Master 節點的節點。

當然 Master 只能有一個,所以會通過選舉的方法對這啟動的節點選舉,被選中的節點才會成為 Master 節點。 Master 節點主要是負責維護集群的狀態,像所有節點的信息,所有的索引和它相關的 Mapping 關系,配置信息,分片的路由等。既然 Master 節點維護了這么重要的信息,玩意它掛了怎么辦?

掛了的話,將會對其他的有資格成為 Master 節點的節點重新選舉出另一個 Master 節點,因此這就說明了其他 Master-eligible nodes 也會保存集群信息,但是只有 Master 節點有權限能夠修改,試想如果其他節點也能修改的話,這將會導致數據不一致的問題。

Data Node 節點:這個節點從字面上就很容易理解,數據節點,這個節點主要負責數據的存儲,在數據擴展上起到了至關重要的作用。也就是說讀寫數據都會找到相應的 Data Node 節點。

Coordinating Node 節點:協調節點主要負責協調客戶端的請求,將接收到的請求分發給合適的節點,并把結果匯集到一起。比如客戶端請求查詢某個索引的數據,協調節點將會把請求分發給保存相關的數據的 DataNode 節點,找到相應的分片,并把查詢到的結果都匯集返回。并且每個節點都默認起到了 Coordinating Node 的職責。

Ingest Node: Ingest node 專門對索引的文檔做預處理,發生在對真實文檔建立索引之前。在建立索引對文檔預處理之前,先定義一個管道(pipeline),管道里指定了一系列的處理器。每個處理器能夠把文檔按照某種特定的方式轉換。比如在管道里定義一個從某個文檔中移除字段的處理器,緊接著一個重命名字段的處理器。集群的狀態也會被存儲到配置的管道內。

定義一個管道,簡單的在索引或者bulk request(一種批量請求方法)操作上定義 pipeline 參數,這樣 ingest node 就會知道哪個管道在使用。這個節點在使用過程中用的也不多,所以大概了解一下就行。

小結

本次課講述了 ES 的不同節點角色功能,從簡單的單節點 ES 可能會遇到的問題,引述到需要分布式才能解決這些問題,然后分布式需要不同的角色功能協助才能夠完成,因此我們明白了為什么 ES 節點需要哪些角色,以及這些角色能起到什么作用?

分片及副本原理
基于 Docker 部署單節點 ElasticSearch
基于 Docker 安裝 Kibana
基于 Docker 一鍵式部署分布式 ElasticSearch
Discover 如何查看相應的業務數據
如何篩選只包含某個字段的業務數據
如何自定義的查看某個時間段的數據
折線圖繪制過程與應用場景
柱狀圖繪制過程與應用場景
餅狀圖繪制過程與應用場景
熱力圖在數據分析中的應用
主題分析之標簽云圖
業務分析進階之腳本字段
高階時間序列數據可視化
Timelion 在時間序列中的應用
Dashboard 專題數據分析可視化
基于 Rest API 的 ElasticSearch 增刪改查(1)
基于 Rest API 的 ElasticSearch 增刪改查((2)
基于 Rest API 的 ElasticSearch 增刪改查(3)
如何運用強大的 ElasticSearch 核心 DSL
組合查詢怎么玩
如何根據聚合求取各種數值指標
什么是深入嵌套聚合的萬用套法
優化 Query 查詢效率之 Scroll 查詢
優化聚合數據查詢效率之 Partition
Python Elasticsearch Client 實戰
天氣指標監控數據實戰
天氣指標數據篩選實戰
結合指標數據場景優化查詢效率實戰
Java Elasticsearch Client 實戰
基于 Java 進行天氣指標數據篩選實戰
基于Java 優化效率查詢實戰
基于 ELK 天氣指標監控在線實時監控案例
基于機器學習的 ElasticSearch 異常值檢測案例
基于 MovieLens 的電影搜索案例

閱讀全文: http://gitbook.cn/gitchat/column/5e8553f36a28093c950e1614

總結

以上是生活随笔為你收集整理的ElasticSearch 大数据搜索查询分析全指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。