Elasticsearch6.6.0集羣搭建(很詳細)

最近本身練個項目須要將HDFS中的數據檢索出來,並作成對應的報表,從效率上說,直接考慮上Elasticsearch(下文直接用ES代替)node


全文檢索linux

數據庫查詢select * from xxx where xxx like '%xxx' 速度慢,結果不是很準確,而全文檢索能夠快速,準確的找到你想要的數據git

:先從索引庫中查找github

:對查詢條件進行分詞,而後對查詢的結果進行相關排序,得分越高,排的越靠前sql


ES簡介
數據庫

是大數據生態系統的後起之秀,有本身的生態系統(ELK E:Elasticserch(全文檢索) L: Logstash(數據採集), K: Kibana(報表)等)Elasticserch 是基於Lucene的分佈式全文檢索系統,能夠認爲是一個分佈式的NoSQL(not only SQL,不只僅有SQL)數據庫,並且支持全文檢索。Lucene是Apache的頂級項目,是一個全文檢索框架,遺憾的是Lucene是個單機版程序,ES底層用就是Lucene,操做API比Lucene方便不少。json



ES集羣搭建 (我用的三臺linux: haoop01,hadoop02,hadoop03)瀏覽器

第一步:ES爲了數據安全,是不容許root身份直接啓動,以root身份啓動會報權限錯誤。
安全

  • es啓動時須要使用非root用戶,因此我這裏建立一個dog用戶bash

useradd dog複製代碼
  • 爲dog用戶添加密碼:

    echo 123456a | passwd --stdin dog複製代碼
  • 用戶權限

    1: echo "dog ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/dog
    2: chmod 0440 /etc/sudoers.d/dog
    複製代碼
  • 建立一個用來存放ES以及數據,日誌的目錄

    mkdir /{bigdata,data}複製代碼
  • 給相應的目錄添加用戶和用戶組權限

    chown -R dog:dog /{bigdata,data}複製代碼

第二步:安裝和配置,注意這一步最好切換到dog身份來操做,省的後面修改文件權限,記得sudo

  • 解壓

    tar -zxvf elasticsearch-6.6.0.tar.gz -C /bigdata/複製代碼
  • 修改配置

    vi /bigdata/elasticsearch-6.6.0/config/elasticsearch.yml複製代碼

    #集羣名稱,經過組播的方式通訊,經過名稱判斷屬於哪一個集羣

    cluster.name: bigdata複製代碼

    #節點名稱,要惟一

    node.name: hadoop01複製代碼

    #數據存放位置

    path.data: /data/es/data複製代碼

    #日誌存放位置(可選)

    path.logs: /data/es/logs複製代碼

    #es綁定的ip地址

    network.host: 192.168.2.4複製代碼

    #初始化時可進行選舉的節點(在這幾臺機器中選舉老大,好比有50臺機器就從這三臺中選舉,選舉的節點數量給3臺就行了)

    discovery.zen.ping.unicast.hosts:["hadoop01", "hadoop02", "hadoop03"]複製代碼

第三步:啓動

  • 使用scp拷貝到其餘節點

    scp -r elasticsearch-6.6.0/ hadoop02:$PWD
    scp -r elasticsearch-6.6.0/ hadoop03:$PWD
    複製代碼
  • 在其餘節點上修改es配置,須要修改的有node.name和network.host

  • 啓動ES (三臺都啓動)

    /bigdata/elasticsearch-6.6.0/bin/elasticsearch -d複製代碼

注意:啓動可能會報錯(用戶最大可建立文件數過小和最大虛擬內存過小)

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決方法:

#用戶最大可建立文件數過小

sudo vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
複製代碼


#查看可打開文件數量

ulimit -Hn複製代碼

#最大虛擬內存過小

sudo vi /etc/sysctl.conf

vm.max_map_count=262144複製代碼

#查看虛擬內存的大小

sudo sysctl -p

到此位置 集羣安裝就搞定收工,是否是很easy


來,檢查如下看看是否安裝成功,瀏覽器敲 http://192.168.2.4:9200/

{
  "name" : "es-1",
  "cluster_name" : "bigdata",
  "cluster_uuid" : "DoB3Oc1hR_aX0HoTeNedSg",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}複製代碼

看到以上信息說明成功了

#在瀏覽器中查看集羣狀態

http://192.168.2.4:9200/_cluster/health?pretty複製代碼

#在linux終端中查看集羣狀態

curl -XGET 'http://192.168.2.4:9200/_cluster/health?pretty'複製代碼
{
  "cluster_name" : "bigdata",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 5,
  "active_shards" : 10,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}複製代碼

三個節點正常運行沒毛病


操做他的API,增刪改查搞起來老弟


ES是RESTful接口URL的格式,數據是以json形式存放

http://192.168.2.4:9200/<index>/<type>/[<id>]

  • 其中index、type是必須提供的。

  • id是可選的,不提供es會自動生成。

  • index、type將信息進行分層,利於管理。

  • index能夠理解爲數據庫;type理解爲數據表;id至關於數據庫表中記錄的主鍵,是惟一的。


1: 向home索引(庫)中添加dog(表)  (ES6.0+ 增長安全機制 添加請求頭便可正常查詢 -H "Content-Type: application/json" )

[dog@hadoop01 bigdata]$ curl -H "Content-Type: application/json" -XPUT 'http://192.168.2.4:9200/home/dog/1' -d '{ > "title": "Elasticsearch: The dogs home", > "name" : { > "first" : "二", > "last" : "狗" > }, > "publish_date":"2019-02-16", > "price":"1314" > }'複製代碼

2: 在linux中經過curl的方式查詢

curl -XGET 'http://192.168.2.4:9200/home/dog/1'複製代碼

3: 經過瀏覽器查詢

http://192.168.2.4:9200/home/dog/1複製代碼

4: 經過_source獲取指定的字段

curl -XGET 'http://192.168.2.4:9200/home/dog/1?_source=title'curl -XGET 'http://192.168.2.4:9200/home/dog/1?_source=title,price'curl -XGET 'http://192.168.2.4:9200/home/dog/1?_source'複製代碼

5: 能夠經過覆蓋的方式更新

[dog@hadoop01 bigdata]$ curl -H "Content-Type: application/json" -XPUT 'http://192.168.2.4:9200/home/dog/1' -d '{ > "title": "Elasticsearch: The xxxxxx", > "name" : { > "first" : "三", > "last" : "狗" > }, > "publish_date":"2019-02-16", > "price":"1199.99" > }'複製代碼

6:或者經過 _update API的方式單獨更新你想要更新的字段等

curl -H "Content-Type: application/json" -XPOST 'http://192.168.2.4:9200/home/dog/1/_update' -d '{ "doc": { "price" : 111111111 } }'複製代碼

7: 刪除一個文檔

curl -XDELETE 'http://192.168.2.4:9200/home/dog/1'複製代碼

8: filter查詢

# SELECT * FROM dog WHERE price = 35.99
# filtered 查詢價格是35.99的
# 返回的的分是1.0
curl -H "Content-Type: application/json" -XGET 'http://192.168.2.4:9200/home/dog/_search' -d '{ "query": { "bool": { "must": { "match_all": {} }, "filter": { "term": { "price": 35.99 } } } } }'複製代碼

9: bool過濾查詢,能夠作組合過濾查詢

# SELECT * FROM dog WHERE (price = 35.99 OR price = 99.99) AND publish_date != "2019-02-16"
# 相似的,Elasticsearch也有 and, or, not這樣的組合條件的查詢方式
# 格式以下:
# {
# "bool" : {
# "must" : [],
# "should" : [],
# "must_not" : [],
# }
# }
#
# must: 條件必須知足,至關於 and
# should: 條件能夠知足也能夠不知足,至關於 or
# must_not: 條件不須要知足,至關於 not
curl -H "Content-Type: application/json" -XGET 'http://192.168.2.4:9200/home/dog/_search' -d '{ "query" : { "bool" : { "should" : [ { "term" : {"price" : 35.99}}, { "term" : {"price" : 99.99}} ], "must_not" : { "term" : {"publish_date" : "2019-02-16"} } } } }'
複製代碼


10: range範圍過濾

# SELECT * FROM dogWHERE price >= 10 AND price < 99
# gt : > 大於
# lt : < 小於
# gte : >= 大於等於
# lte : <= 小於等於
curl -H "Content-Type: application/json"  -XGET 'http://192.168.2.4:9200/home/dog/_search' -d '{ "query": { "range" : { "price" : { "gte" : 10, "lt" : 99 } } } }'
複製代碼

有沒發現這DSL風格寫的要死啊,我靠還要拼接json串,確定寫sql舒服多了啊,下期介紹

  1. Elasticsearch SQL (寫sql簡潔舒服),
  2. Elastic官方的圖形化框架Kibana(Kibana 可以以圖表的形式呈現數據,而且具備可擴展的用戶界面,供您全方位配置和管理 Elastic Stack。這個真的很屌),固然還可使用比較輕便的圖形化框架elasticsearch-head(比較老,界面也比較醜),地址:https://github.com/mobz/elasticsearch-head
  3. elasticsearch-hadoop (如何檢索hdfs數據並經過圖形化框架作成相應報表)


歡迎關注個人微信公衆號(玩玩大數據),剛開的,文章會第一時間更新在公衆號上,哈哈

相關文章
相關標籤/搜索