Bootstrap

Elasticsearch-Base

Feature

  • 分布式搜索引擎

  • 近实时分析引擎

  • 性能很高

  • 容易扩展

Plan

  • 入门和深入

  • 集群管理

  • ELK 进行大数据分析

  • 实战和总结

Basic Concepts

Near Realtime(NRT)

es 是一个近实时的检索平台, 从建立索引到可搜索大约只需要 1s 钟, 具有非常低的延迟.

Cluster

  • 高可用

  • 可扩展性

一个集群由一个或者多个 node组成. 用于保存全部的数据, 提供联合索引和搜索功能, 一个集群在创建后必须拥有一个唯一的名字, 默认是 elasticsearch, node 都是通过这名字来加入到指定的集群中去的.

Node

一个 node是一个集群的的一个单独的服务, 用于存储数据和提供索引和搜索的功能, 和 cluster 一样, 每个 node 也要有自己的唯一的名字, 默认是一个 uuid, 也可以自定义 node 名称. node 是通过配置加入到指定的集群中去. 默认每个节点会被加入到 elsaticsearch 集群中.

Index

是 document 的容器, 一类相似文档的结合, 每个索引都有自己的 mapping, 用于定义包含文档的字段名和类型. 索引中的数据分散在 Shard 上. 索引的 settings定义了不同数据的分布方式.

Type

6.0 开始被废除.

Document

  • es 是面向文档的. 文档是可搜索数据的最小单位, 类似于关系型数据库表中的一条记录,

  • 在 es 中每个文档会被序列化为 json 格式存储, json 对象由字段组成, 字段有不同的类型(字符串, 数值, 布尔, 日期...)

  • 每个文档都有一个 unique ID, 类似于 Mysql 中的主键, 可以事 es 自动生成, 也可以自己指定.

  • 元数据

  • _index 文档所属的索引名称

  • _type 文档所属的类型名

  • _id 文档唯一 id

  • _source 文档的原始 json 数据

  • _version 文档的版本信息

  • _score: 相关性打分

Shards & Replicas

  • 主分片, 用于解决水平扩展问题, 通过主分片可以将数据分布到集群内的所有节点之上

  • 一个分片是一个运行的 lucene 实例

  • 主分片数量在索引创建时指定, 后续不允许修改, 除非 reIndex

  • 副本, 用于解决数据高可用问题

  • 副分片数量可以动态调整.

  • 增加副本数量可以提供服务的可用性.

ES Installation

```bash
bin/elasticsearch -E node.name=node0 -E cluster.name=demo_cluster -E path.data=node0_data -d
bin/elasticsearch -E node.name=node1 -E cluster.name=demo_cluster -E path.data=node1_data -d
bin/elasticsearch -E node.name=node2 -E cluster.name=demo_cluster -E path.data=node2_data -d
bin/elasticsearch -E node.name=node3 -E cluster.name=demo_cluster -E path.data=node3_data -d
```

plugins

bin/elasticsearch-plugin install analysis-icu

bin/elasticsearch-plugin list

bin/elasticsearch-plugin remove name

Kibana

Installation

Logstash

installation

input {
  file {
    path => "/Users/yiruan/dev/elk7/logstash-7.0.1/bin/movies.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }

  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }

  mutate {

    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }

  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }

}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
   }
  stdout {}
}

Cerebro

installation

参考: