中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

ElasticSearch筆記整理(二):CURL操作、ES插件、集群安裝與核心概念

[TOC]

公司主營業(yè)務(wù):成都網(wǎng)站制作、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出金門免費(fèi)做網(wǎng)站回饋大家。


CURL操作

CURL簡介

curl是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實(shí)現(xiàn)常見的get/post請求。簡單的認(rèn)為是可以在命令行下面訪問url的一個(gè)工具。在centos的默認(rèn)庫里面是有curl工具的,如果沒有請yum安裝即可。

curl
    -X 指定http的請求方法 有HEAD GET POST PUT DELETE
    -d 指定要傳輸?shù)臄?shù)據(jù)
    -H 指定http請求頭信息

curl創(chuàng)建索引庫
    curl -XPUT http://<ip>:9200/index_name/
  PUT或POST都可以創(chuàng)建
  舉例:
    curl -XPUT 'http://localhost:9200/bigdata'

CURL操作(一):索引庫創(chuàng)建與查詢

創(chuàng)建一個(gè)索引庫:

curl -XPUT http://uplooking01:9200/bigdata
返回值{"acknowledged":"true"}

查看一個(gè)索引庫信息:

curl -XGET http://uplooking01:9200/bigdata
返回值一個(gè)json字符串
如果想要格式良好的結(jié)果
curl -XGET http://uplooking01:9200/bigdata?pretty

在索引庫中添加若干索引信息:

curl -XPOST http://uplooking01:9200/bigdata/product/1 -d'{
    "name":"hadoop",
    "author":"Dong Couting",
    "version":"2.9.4"
}'  
curl -XPOST http://uplooking01:9200/bigdata/product/2 -d'{
    "name":"hive",
    "author":"facebook",
    "version":"2.1.0",
    "url":"http://hive.apache.org"
}'
curl -XPUT http://uplooking01:9200/bigdata/product/3 -d'{
    "name":"hbase",
    "author":"apache",
    "version":"1.1.5",
    "url":"http://hbase.apache.org"
}'  

查詢某一個(gè)索引庫下面的所有數(shù)據(jù):

curl -XGET http://uplooking01:9200/bigdata/product/_search
格式良好的寫法:
curl -XGET http://uplooking01:9200/bigdata/product/_search?pretty
{
  "took" : 11,
  "timed_out" : false,  ---->是否超時(shí)
  "_shards" : {         ---->分片個(gè)數(shù)(就是kafka中的partition,一個(gè)索引庫有幾個(gè)分區(qū))
    "total" : 5,        ---->默認(rèn)分片有5個(gè)
    "successful" : 5,   ---->能夠正常提供服務(wù)的有5個(gè)
    "failed" : 0        ----> (total-successful)=failed
  },
  "hits" : {            ---->查詢結(jié)果集
    "total" : 2,        ---->查詢到了幾條記錄
    "max_score" : 1.0,  ---->記錄中最大的得分
    "hits" : [ {        ---->具體的結(jié)果集數(shù)組
      "_index" : "bigdata", ----->結(jié)果所在索引庫
      "_type" : "product",  ----->結(jié)果所在索引庫中的某一個(gè)類型type
      "_id" : "2",          ----->結(jié)果索引id
      "_score" : 1.0,       ----->索引得分
      "_source" : {         ----->索引具體內(nèi)容_source
        "name" : "hive",        
        "author" : "facebook",
        "version" : "2.1.0",
        "url" : "http://hive.apache.org"
      }
    }, {
      "_index" : "bigdata",
      "_type" : "product",
      "_id" : "1",
      "_score" : 1.0,
      "_source" : {
        "name" : "hadoop",
        "author" : "Dong Couting",
        "version" : "2.9.4"
      }
    } ]
  }
}
PUT和POST區(qū)別
  • PUT是冪等方法,POST不是。所以PUT用于更新,POST用于新增比較合適。

  • PUT和DELETE操作是冪等的。所謂冪等是指不管進(jìn)行多少次操作,結(jié)果都一樣。比如用PUT修改一篇文章,然后在做同樣的操作,每次操作后的結(jié)果并沒有什么不同,DELETE也是一樣。

  • POST操作不是冪等的,比如常見的POST重復(fù)加載問題:當(dāng)我們多次發(fā)出同樣的POST請求后,其結(jié)果是創(chuàng)建了若干的資源。

  • 還有一點(diǎn)需要注意的就是,創(chuàng)建操作可以使用POST,也可以使用PUT,區(qū)別就在于POST是作用在一個(gè)集合資源(/articles)之上的,而PUT操作是作用在一個(gè)具體資源之上的(/articles/123),比如說很多資源使用數(shù)據(jù)庫自增主鍵作為標(biāo)識信息,這個(gè)時(shí)候就需要使用PUT了。而創(chuàng)建的資源的標(biāo)識信息到底是什么,只能由服務(wù)端提供時(shí),這個(gè)時(shí)候就必須使用POST。

    • ES創(chuàng)建索引庫和索引時(shí)的注意點(diǎn)

    ? 1)索引庫名稱必須要全部小寫,不能以下劃線開頭,也不能包含逗號

    ? 2)如果沒有明確指定索引數(shù)據(jù)的ID,那么es會自動生成一個(gè)隨機(jī)的ID,需要使用POST參數(shù)

    curl-XPOST http://localhost:9200/bigdata/product/ -d'{"author" : "Doug Cutting"}'

舉例說明冪等操作:
    StringBuilder sb = new StringBuilder();
    sb.append("aaaa");結(jié)果是什么?sb

    String str = new StringBuilder();

    str.substring();---->新的對象

CURL操作(二):高級查詢、更新、刪除與批量操作

查詢所有:

只查詢source中的個(gè)別字段
    curl -XGET 'http://uplooking01:9200/bigdata/product/_search?_source=name,author&pretty'

返回結(jié)果只查詢source
    curl -XGET 'http://uplooking01:9200/bigdata/product/1?_source&pretty'

條件查詢:
    curl -XGET 'http://uplooking01:9200/bigdata/product/_search?q=name:hbase&pretty'
        查詢name為hbase的結(jié)果
    curl -XGET 'http://uplooking01:9200/bigdata/product/_search?q=name:h*&pretty'
        查詢name以h打頭的結(jié)果

分頁查詢:

curl -XGET 'http://uplooking01:9200/bank/acount/_search?pretty&from=0&size=5'

更新:

使用post put都可以
    curl -XPOST http://uplooking01:9200/bigdata/product/AWA184kojrSrzszxL-Zs -d'{"name":"sqoop", "author":"apache"}'
    curl -XPOST http://uplooking01:9200/bigdata/product/AWA184kojrSrzszxL-Zs -d'{"version":"1.4.6"}'
但是這些操作都是全局更新,理解為刪除之前的,重新創(chuàng)建一個(gè)新的,id相同的document。

局部更新(必須使用POST)
    要是用update,同時(shí)要更新的是source中的doc內(nèi)容
    curl -XPOST http://uplooking01:9200/bigdata/product/AWA184kojrSrzszxL-Zs/_update -d'
    {"doc":{"name":"sqoop", "author":"apache"}}'

說明:
   ES可以使用PUT或者POST對文檔進(jìn)行更新,如果指定ID的文檔已經(jīng)存在,則執(zhí)行更新操作
注意:執(zhí)行更新操作的時(shí)候,ES首先將舊的文檔標(biāo)記為刪除狀態(tài),然后添加新的文檔,舊的文檔不會立即消失,
但是你也無法訪問,ES會繼續(xù)添加更多數(shù)據(jù)的時(shí)候在后臺清理已經(jīng)標(biāo)記為刪除狀態(tài)的文檔。

刪除:

普通刪除,根據(jù)主鍵刪除
   curl -XDELETE http://localhost:9200/bigdata/product/3/
說明:如果文檔存在,es屬性found:true,successful:1,_version屬性的值+1。
   如果文檔不存在,es屬性found為false,但是版本值version依然會+1,這個(gè)就是內(nèi)部
管理的一部分,有點(diǎn)像svn版本號,它保證了我們在多個(gè)節(jié)點(diǎn)間的不同操作的順序被正確標(biāo)記了。
   注意:一個(gè)文檔被刪除之后,不會立即生效,他只是被標(biāo)記為已刪除。ES將會在你之后添加
更多索引的時(shí)候才會在后臺進(jìn)行刪除。

批量操作-bulk:

Bulk api可以幫助我們同時(shí)執(zhí)行多個(gè)請求
格式:
   action:[index|create|update|delete]
   metadata:_index,_type,_id
   request body:_source(刪除操作不需要)
   {action:{metadata}}\n
   {request body}\n
   {action:{metadata}}\n
   {request body}\n
例如:
{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
{"index":{"_id":"6"}}
{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}

  create和index的區(qū)別
    如果數(shù)據(jù)存在,使用create操作失敗,會提示文檔已經(jīng)存在,使用index則可以成功執(zhí)行。
使用文件的方式
curl -XPOST http://uplooking01:9200/bank/acount/_bulk --data-binary @/home/uplooking/data/accounts.json

關(guān)于批量操作的補(bǔ)充說明:

可以查看一下各個(gè)索引庫信息
curl 'http://localhost:9200/_cat/indices?v'

Bulk請求可以在URL中聲明/_index或者/_index/_type
Bulk一次最大處理多少數(shù)據(jù)量
Bulk會把將要處理的數(shù)據(jù)載入內(nèi)存中,所以數(shù)據(jù)量是有限制的
最佳的數(shù)據(jù)量不是一個(gè)確定的數(shù)值,它取決于你的硬件,你的文檔大小以及復(fù)雜性,你的索引以及搜索的負(fù)載
一般建議是1000~5000個(gè)文檔,如果你的文檔很大,可以適當(dāng)減少隊(duì)列,大小建議是5~15MB,默認(rèn)不能超過100M,可以在es的配置文件中修改這個(gè)值
http.max_content_length:100mb

CURL操作(三):ES版本控制

  • 普通關(guān)系型數(shù)據(jù)庫使用的是(悲觀并發(fā)控制(PCC))

    當(dāng)我們在讀取一個(gè)數(shù)據(jù)前先鎖定這一行,然后確保只有讀取到數(shù)據(jù)的這個(gè)線程可以修改這一行數(shù)據(jù)。

  • ES使用的是(樂觀并發(fā)控制(OCC))

    ES不會阻止某一數(shù)據(jù)的訪問,然而,如果基礎(chǔ)數(shù)據(jù)在我們讀取和寫入的間隔中發(fā)生了變化,更新就會失敗,這時(shí)候就由程序來決定如何處理這個(gè)沖突。它可以重新讀取新數(shù)據(jù)來進(jìn)行更新,又或者將這一情況直接反饋給用戶。

  • ES如何實(shí)現(xiàn)版本控制(使用es內(nèi)部版本號)

? 1:首先得到需要修改的文檔,獲取版本(_version)號

? curl -XGET http://localhost:9200/bigdata/product/1

? 2:再執(zhí)行更新操作的時(shí)候把版本號傳過去

? curl -XPUT http://localhost:9200/bigdata/product/1?version=1 -d '{"name":"hadoop","version":3}'(覆蓋)

? curl -XPOST http://localhost:9200/bigdata/product/1/_update?version=3 -d'{"doc":{"name":"apachehadoop","latest_version": 2.6}}'(部分更新)

? 3:如果傳遞的版本號和待更新的文檔的版本號不一致,則會更新失敗

  • ES如何實(shí)現(xiàn)版本控制(使用外部版本號)

? 如果你的數(shù)據(jù)庫已經(jīng)存在了版本號,或者是可以代表版本的時(shí)間戳。這時(shí)就可以在es的查詢url后面添加version_type=external來使用這些號碼。

? 注意:版本號碼必須要是大于0小于9223372036854775807(Java中l(wèi)ong的最大正值)的整數(shù)。

     es在處理外部版本號的時(shí)候,它不再檢查_version是否與請求中指定的數(shù)值是否相等,而是檢查當(dāng)前的_version是否比指定的數(shù)值小,如果小,則請求成功。
example:
     curl -XPUT 'http://localhost:9200/bigdata/product/20?version=10&version_type=external' -d '{"name": "flink"}'
     注意:此處url前后的引號不能省略,否則執(zhí)行的時(shí)候會報(bào)錯

ES插件

ES本身服務(wù)相對比較少,其功能的強(qiáng)大之處就體現(xiàn)在插件的豐富性上。有非常多的ES插件用于ES的管理,性能的完善,下面介紹的是幾款常用的插件。

BigDesk Plugin

離線安裝:
    bin/plugin install file:/home/uplooking/soft/bigdesk-master.zip
卸載:
    bin/plugin remove bigdesk
在線安裝:
    bin/plugin install hlstudio/bigdesk
訪問(web):
    http://uplooking01:9200/_plugin/bigdesk

Elasticsearch-Head Plugin

離線安裝
    bin/plugin install file:/home/uplooking/soft/
在線安裝
    bin/plugin install mobz/elasticsearch-head
訪問
    http://uplooking01:9200/_plugin/head/

Elasticsearch Kibana

ELK(ElasticSearch LogStach Kibana)中的其中一個(gè)組件。

配置:
    server.port: 5601
    server.host: "uplooking01"
    elasticsearch.url: "http://uplooking01:9200"
    elasticsearch.username: "jack"
    elasticsearch.password: "uplooking"

訪問:
    http://uplooking01:5601

常見的報(bào)表工具:
    折線圖
    餅形圖
    柱狀圖

ES集群安裝

如果在一個(gè)局域網(wǎng)內(nèi)的話,只需要修改一個(gè)地方:cluster.name 保持統(tǒng)一即可,
這樣就可以通過發(fā)現(xiàn)機(jī)制找到新啟動的機(jī)器。
如果在不同局域網(wǎng)內(nèi)的要進(jìn)行組網(wǎng),直接禁用發(fā)現(xiàn)機(jī)制,指定對應(yīng)的節(jié)點(diǎn)主機(jī)名即可。
(但實(shí)際上在使用2.3.0的版本時(shí),并不能自動發(fā)現(xiàn),所以為了配置集群,需要將該機(jī)制禁用并手動配置節(jié)點(diǎn)主機(jī)名)

cluster.name: bigdata-08-28
node.name: hadoop
path.data: /home/uplooking/data/elasticsearch
path.logs:  /home/uplooking/logs/elasticsearch
network.host: uplooking01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["uplooking01", "uplooking02", "uplooking03"]

ElasticSearch的集群狀態(tài):

Green:  所有的主分片和副分片都可用
Yellow:所有的主分片都可以不是所有的副分片都可用
Red:    不是所有的主分片和副分片都可用

ElasticSearch核心概念

Cluster

代表一個(gè)集群,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,主從節(jié)點(diǎn)是對于集群內(nèi)部來說的。ES的一個(gè)概念就是去中心化,字面上理解就是無中心節(jié)點(diǎn),這是對于集群外部來說的,因?yàn)閺耐獠縼砜碋S集群,在邏輯上是個(gè)整體,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)ES集群通信是等價(jià)的。

主節(jié)點(diǎn)的職責(zé)是負(fù)責(zé)管理集群狀態(tài),包括管理分片的狀態(tài)和副本的狀態(tài),以及節(jié)點(diǎn)的發(fā)現(xiàn)和刪除。

只需要在同一個(gè)網(wǎng)段之內(nèi)啟動多個(gè)ES節(jié)點(diǎn),就可以自動組成一個(gè)集群。

默認(rèn)情況下ES會自動發(fā)現(xiàn)同一網(wǎng)段內(nèi)的節(jié)點(diǎn),自動組成集群。

集群的查看狀態(tài):

http://<ip|host>:9200/_cluster/health?pretty

shards

代表索引分片,ES可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上,構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。

可以在創(chuàng)建索引庫的時(shí)候指定:

curl -XPUT 'localhost:9200/test1/' -d'{"settings":{"number_of_shards":3}}'

# 默認(rèn)是一個(gè)索引庫有5個(gè)分片 index.number_of_shards:5

replicas

代表索引副本,ES可以給索引設(shè)置副本,副本的作用一是提高系統(tǒng)的容錯性,當(dāng)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高ES的查詢效率,ES會自動對搜索請求進(jìn)行負(fù)載均衡

可以在創(chuàng)建索引庫的時(shí)候指定:

curl -XPUT 'localhost:9200/test2/'-d'{"settings":{"number_of_replicas":2}}'

# 默認(rèn)是一個(gè)分片有1個(gè)副本 index.number_of_replicas:1

recovery

代表數(shù)據(jù)恢復(fù)或者叫數(shù)據(jù)重新分布,ES在有節(jié)點(diǎn)加入或退出時(shí)會根據(jù)機(jī)器的負(fù)載對索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動時(shí)也會進(jìn)行數(shù)據(jù)恢復(fù)。

gateway

代表ES索引的持久化存儲方式,ES默認(rèn)是先把索引存放到內(nèi)存中,當(dāng)內(nèi)存滿了時(shí)再持久化到硬盤。當(dāng)這個(gè)ES集群關(guān)閉再重新啟動時(shí)就會從gateway中讀取索引數(shù)據(jù)。ES支持多種類型的gateway,有本地文件系統(tǒng)(默認(rèn)),分布式文件系統(tǒng),Hadoop的HDFS和amazon的s3云存儲服務(wù)。

discovery.zen

代表ES的自動發(fā)現(xiàn)節(jié)點(diǎn)機(jī)制,ES是一個(gè)基于p2p的系統(tǒng),它先通過廣播尋找存在的節(jié)點(diǎn),再通過多播協(xié)議來進(jìn)行節(jié)點(diǎn)之間的通信,同時(shí)也支持點(diǎn)對點(diǎn)的交互。

如果是不同網(wǎng)段的節(jié)點(diǎn)如果組成ES集群,禁用自動發(fā)現(xiàn)機(jī)制:
    discovery.zen.ping.multicast.enabled: false

設(shè)置新節(jié)點(diǎn)被啟動時(shí)能夠發(fā)現(xiàn)的注解列表:
    discovery.zen.ping.unicast.hosts: ["master:9200","slave01:9200"]

transport

代表ES內(nèi)部節(jié)點(diǎn)或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時(shí)它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等傳輸協(xié)議(通過插件方式集成)。

分享名稱:ElasticSearch筆記整理(二):CURL操作、ES插件、集群安裝與核心概念
URL標(biāo)題:http://www.rwnh.cn/article12/gcgjgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、微信小程序品牌網(wǎng)站建設(shè)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
中牟县| 精河县| 宣化县| 巩义市| 抚顺县| 东台市| 韶山市| 宜都市| 平罗县| 运城市| 平邑县| 房山区| 宜丰县| 玉田县| 久治县| 三亚市| 灵川县| 洛南县| 泊头市| 泰和县| 漳浦县| 育儿| 湘乡市| 政和县| 垫江县| 团风县| 上高县| 西充县| 灌阳县| 绥棱县| 香河县| 牡丹江市| 望城县| 麻江县| 荔浦县| 天全县| 美姑县| 沽源县| 黄大仙区| 肥东县| 白城市|