[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是利用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'
創(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不是。所以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。
? 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();---->新的對象
查詢所有:
只查詢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
普通關(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)行更新,又或者將這一情況直接反饋給用戶。
? 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:如果傳遞的版本號和待更新的文檔的版本號不一致,則會更新失敗
? 如果你的數(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本身服務(wù)相對比較少,其功能的強(qiáng)大之處就體現(xiàn)在插件的豐富性上。有非常多的ES插件用于ES的管理,性能的完善,下面介紹的是幾款常用的插件。
離線安裝:
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
離線安裝
bin/plugin install file:/home/uplooking/soft/
在線安裝
bin/plugin install mobz/elasticsearch-head
訪問
http://uplooking01:9200/_plugin/head/
即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)表工具:
折線圖
餅形圖
柱狀圖
如果在一個(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: 不是所有的主分片和副分片都可用
代表一個(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
代表索引分片,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
代表索引副本,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
代表數(shù)據(jù)恢復(fù)或者叫數(shù)據(jù)重新分布,ES在有節(jié)點(diǎn)加入或退出時(shí)會根據(jù)機(jī)器的負(fù)載對索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動時(shí)也會進(jìn)行數(shù)據(jù)恢復(fù)。
代表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ù)。
代表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"]
代表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)