本此博客内容来源于之前公司要求使用ES时,在b站学习尚硅谷推出的ES视频课程,收获很大,把其中的文档类内容重新整理了一下。如果需要安装包可私信哦~

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

一 简介

ElasticSearch的使用场景

es searchAfter使用_搜索引擎

es searchAfter使用_elasticsearch_02

 

 

  1. 为用户提供按关键字查询的全文搜索功能。
  2. 实现企业海量数据的处理分析的解决方案。大数据领域 的重要一份子,如著名的ELK框架(ElasticSearch,Logstash,Kibana)。

与其他数据存储进行比较

 

redis

mysql

elasticSearch

hbase

hadoop/hive

容量/容量扩展



较大

海量

海量

查询时效性

极高

中等

较高

中等


查询灵活性

较差 k-v模式

非常好,支持sql

较好,关联查询较弱,但是可以全文检索,DSL语言可以处理过滤、匹配、排序、聚合等各种操作

较差,主要靠rowkey,

非常好,支持sql

写入速度

极快

中等

较快

较快


一致性、事务






elasticsearch的特点

1.天然分片,天然集群

     es 把数据分成多个shard,下图中的P0-P2,多个shard可以组成一份完整的数据,这些shard可以分布在集群中的各个机器节点中。随着数据的不断增加,集群可以增加多个分片,把多个分片放到多个机子上,已达到负载均衡,横向扩展。

es searchAfter使用_elasticsearch_03

在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行Map计算,在一个固定的节点上进行Reduces得到最终结果向客户端返回。

es searchAfter使用_es searchAfter使用_04

 这种集群分片的机制造就了elasticsearch强大的数据容量及运算扩展性。

天然索引

ES 所有数据都是默认进行索引的,这点和mysql正好相反,mysql是默认不加索引,要加索引必须特别说明,ES只有不加索引才需要说明。

而ES使用的是倒排索引和Mysql的B+Tree索引不同。

传统关系性数据库

 

es searchAfter使用_数据库_05

弊端: 

1、 对于传统的关系性数据库对于关键词的查询,只能逐字逐行的匹配,性能非常差。 

2、匹配方式不合理,比如搜索“小密手机” ,如果用like进行匹配, 根本匹配不到。但是考虑使用者的用户体验的话,除了完全匹配的记录,还应该显示一部分近似匹配的记录,至少应该匹配到“手机”。

倒排索引是怎么实现的

 全文搜索引擎目前主流的索引技术就是倒排索引的方式。

es searchAfter使用_大数据_06

 

 传统的保存数据的方式都是

        记录→单词

而倒排索引的保存数据的方式是

        单词→记录

例如

  搜索“红海行动”

但是数据库中保存的数据如图:

那么搜索引擎是如何能将两者匹配上的呢?

基于分词技术构建倒排索引:

首先每个记录保存数据时,都不会直接存入数据库。系统先会对数据进行分词,然后以倒排索引结构保存。如下:

es searchAfter使用_es searchAfter使用_07


然后等到用户搜索的时候,会把搜索的关键词也进行分词,会把“红海行动”分词分成:红海和行动两个词。

这样的话,先用红海进行匹配,得到id=1和id=2的记录编号,再用行动匹配可以迅速定位id为1,3的记录。

那么全文索引通常,还会根据匹配程度进行打分,显然1号记录能匹配的次数更多。所以显示的时候以评分进行排序的话,1号记录会排到最前面。而2、3号记录也可以匹配到。

 

二 ES的安装

  1. 安装包下载

 

下载好后放到/opt/module/目录下

es searchAfter使用_搜索引擎_08

 

安装elasticsearch

1.单机模式

拷贝 elasticsearch-6.6.0.tar.gz  到 /opt/module 目录下

1.修改配置文件

/bigdata/elasticsearch-6.6.0/config/elasticsearch.yml

修改yml配置的注意事项:

每行必须顶格,不能有空格

“:”后面必须有一个空格

集群名称,同一集群名称必须相同

es searchAfter使用_数据库_09

单个节点名称 

es searchAfter使用_数据库_10

网络部分  改为当前的ip地址  ,端口号保持默认9200就行

es searchAfter使用_搜索引擎_11

把bootstrap自检程序关掉

es searchAfter使用_数据库_12

自发现配置:新节点向集群报到的主机名

es searchAfter使用_数据库_13

 

  1. 修改linux配置

为什么要修改linux配置?

默认elasticsearch是单机访问模式,就是只能自己访问自己。

但是我们之后一定会设置成允许应用服务器通过网络方式访问。这时,elasticsearch就会因为嫌弃单机版的低端默认配置而报错,甚至无法启动。

所以我们在这里就要把服务器的一些限制打开,能支持更多并发。

 

问题1max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] elasticsearch

原因:系统允许 Elasticsearch 打开的最大文件数需要修改成65536

解决:vi /etc/security/limits.conf

添加内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 65536

 

注意:“*” 不要省略掉

 

问题2max number of threads [1024] for user [judy2] likely too low, increase to at least [2048]  (CentOS7.x  不用改)

 

原因:允许最大进程数修该成4096

解决:vi /etc/security/limits.d/90-nproc.conf   

修改如下内容:

* soft nproc 1024

#修改为

 * soft nproc 4096

 

问题3max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] (CentOS7.x  不用改)

原因:一个进程可以拥有的虚拟内存区域的数量。

解决:

在   /etc/sysctl.conf  文件最后添加一行

vm.max_map_count=262144

即可永久修改

教学环境启动优化

ES是用在Java虚拟机中运行的,虚拟机默认启动占用2G内存。但是如果是装在PC机学习用,实际用不了2个G。所以可以改小一点内存。

es searchAfter使用_es searchAfter使用_14

2g修改为256m

es searchAfter使用_搜索引擎_15

 重启linux  

 

2.集群模式

 

es天然就是集群状态。

  1. 把ES的安装包分发给其他两台机器
  2. 根据第一台机器的linux系统配置,修改其他两台机子
  3. 在三台机器能够独立启动的情况下,修改/etc/elasticsearch/elasticsearch.yml

 

设置新主机的“报道中心 就行了

1 node-xx

2 network-host hadoop1

es searchAfter使用_es searchAfter使用_16

还要记得把 三台主机的node.name改成各自的

集群启动脚本

 

#!/bin/bash
es_home=/bigdata/elasticsearch-6.6.0
kibana_home=/bigdata/kibana-6.6.0-linux-x86_64
case $1  in
 "start") {
  for i in hadoop1 hadoop2 hadoop3
  do
    ssh $i  "source /etc/profile;${es_home}/bin/elasticsearch >/dev/null 2>&1 &"
 
   done
 
};;
"stop") {
  for i in hadoop1 hadoop2 hadoop3
  do
      ssh $i "ps -ef|grep $es_home |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1
  done
 
};;
esac

curl http://hadoop1:9200/_cat/nodes?v

es searchAfter使用_搜索引擎_17

如果启动未成功,请去查看相关日志

vim  /opt/module/elasticsearch6.6.0/logs/my-es.log

 

3.安装kibana

1.解压缩

进入kibana主目录的config目录下

es searchAfter使用_搜索引擎_18

2.配置

vim  kibana.yml

es searchAfter使用_数据库_19

 

启动

测试

访问http://hadoop1:5601/

es searchAfter使用_elasticsearch_20

最终集群脚本

#!/bin/bash
es_home=/bigdata/elasticsearch-6.6.0
kibana_home=/bigdata/kibana-6.6.0-linux-x86_64
case $1  in
 "start") {
  for i in hadoop1 hadoop2 hadoop3
  do
    ssh $i  "source /etc/profile;${es_home}/bin/elasticsearch >/dev/null 2>&1 &"
 
   done
   nohup ${kibana_home}/bin/kibana >kibana.log 2>&1 &
};;
"stop") {
  ps -ef|grep ${kibana_home} |grep -v grep|awk '{print $2}'|xargs kill
  for i in hadoop1 hadoop2 hadoop3
  do
      ssh $i "ps -ef|grep $es_home |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1
  done
 
};;
esac