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

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

一 简介

ElasticSearch的使用场景

ElasticSearch(一)概述+安装(超详细!)

ElasticSearch(一)概述+安装(超详细!)

 

 

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

与其他数据存储进行比较

  redis mysql elasticSearch hbase

hadoop/hive

容量/容量扩展 较大 海量 海量
查询时效性 极高 中等 较高 中等
查询灵活性 较差 k-v模式 非常好,支持sql 较好,关联查询较弱,但是可以全文检索,DSL语言可以处理过滤、匹配、排序、聚合等各种操作

较差,主要靠rowkey,

scan的话性能不行,或者建立二级索引
非常好,支持sql
写入速度 极快 中等 较快 较快
一致性、事务

elasticsearch的特点

1.天然分片,天然集群

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

ElasticSearch(一)概述+安装(超详细!)

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

ElasticSearch(一)概述+安装(超详细!)

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

天然索引

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

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

传统关系性数据库

 

ElasticSearch(一)概述+安装(超详细!)

弊端: 

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

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

倒排索引是怎么实现的

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

ElasticSearch(一)概述+安装(超详细!)

 

 传统的保存数据的方式都是
        记录→单词
而倒排索引的保存数据的方式是
        单词→记录
例如
  搜索“红海行动”
但是数据库中保存的数据如图:
那么搜索引擎是如何能将两者匹配上的呢?
基于分词技术构建倒排索引:
首先每个记录保存数据时,都不会直接存入数据库。系统先会对数据进行分词,然后以倒排索引结构保存。如下:
ElasticSearch(一)概述+安装(超详细!)
然后等到用户搜索的时候,会把搜索的关键词也进行分词,会把“红海行动”分词分成:红海和行动两个词。
这样的话,先用红海进行匹配,得到id=1和id=2的记录编号,再用行动匹配可以迅速定位id为1,3的记录。
那么全文索引通常,还会根据匹配程度进行打分,显然1号记录能匹配的次数更多。所以显示的时候以评分进行排序的话,1号记录会排到最前面。而2、3号记录也可以匹配到。

 

二 ES的安装

  1. 安装包下载

Elasticsearch官网: https://www.elastic.co/products/elasticsearch

https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-6-0

本博选择的版本是elasticsearch-6.6.0

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

ElasticSearch(一)概述+安装(超详细!)

 

安装elasticsearch

1.单机模式

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

1.修改配置文件

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

修改yml配置的注意事项:

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

后面必须有一个空格

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

ElasticSearch(一)概述+安装(超详细!)

单个节点名称 

ElasticSearch(一)概述+安装(超详细!)

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

ElasticSearch(一)概述+安装(超详细!)

把bootstrap自检程序关掉

ElasticSearch(一)概述+安装(超详细!)

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

ElasticSearch(一)概述+安装(超详细!)

 

    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。所以可以改小一点内存。

ElasticSearch(一)概述+安装(超详细!)

2g修改为256m

ElasticSearch(一)概述+安装(超详细!)

 重启linux  

 

2.集群模式

 

es天然就是集群状态。

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

 

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

1 node-xx

2 network-host hadoop1

ElasticSearch(一)概述+安装(超详细!)

 还要记得把 三台主机的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

ElasticSearch(一)概述+安装(超详细!)

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

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

 

3.安装kibana

1.解压缩

进入kibana主目录的config目录下

ElasticSearch(一)概述+安装(超详细!)

2.配置

vim  kibana.yml

ElasticSearch(一)概述+安装(超详细!)

 

启动

测试

访问http://hadoop1:5601/

ElasticSearch(一)概述+安装(超详细!)

最终集群脚本

#!/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

 

 

相关文章:

  • 2021-10-01
  • 2021-11-30
  • 2022-01-19
  • 2021-08-25
  • 2022-01-17
  • 2021-10-21
  • 2021-06-27
猜你喜欢
  • 2022-01-16
  • 2022-01-01
  • 2021-03-30
  • 2021-07-08
  • 2021-12-06
  • 2021-06-18
相关资源
相似解决方案