• 高级架构师_Elasticsearch_第一章_Elasticsearch安装


    高级架构师_Elasticsearch_第一章_Elasticsearch基础_安装

    第一部分 全文搜索引擎Elasticsearch基础

    第1节 Elasticsearch是什么

    Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数 据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作 为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPIjavaAPI来隐藏Lucene的复杂性, 从而让全文搜索变得简单。

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

    在这里插入图片描述

    起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索引擎。封装了lucene,做出了开源项目compass。找到工作后,做分布式高性能项目,再封装compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic首席执行官。

    第2节 Elasticsearch的功能

    分布式的搜索引擎

    分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索搜索:百度、谷歌,站内搜索

    全文检索

    提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

    数据分析引擎(分组聚合)

    电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访 问量排名top3的新闻板块是哪些

    海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自 然而然就可以实现海量数据的处理近实时:Elasticsearch可以实现秒级别的数据搜索和分析

    第3节 Elasticsearch的特点

    Elasticsearch的特点是它提供了一个极速的搜索体验。这源于它的高速(speed)。相比较其它 的一些大数据引擎,Elasticsearch可以实现秒级的搜索,速度非常有优势。Elasticsearch的cluster是一种分布式的部署,极易扩展(scale )这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 。

    在这里插入图片描述

    • 安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群
    • JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便
    • RESTful:基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行
    • 分布式:节点对外表现对等(每个节点都可以用来做入口) 加入节点自动负载均衡
    • 多租户:可根据不同的用途分索引,可以同时操作多个索引
    • 支持超大数据: 可以扩展到 PB 级的结构化和非结构化数据 海量数据的近实时处理

    第4节 Elasticsearch企业使用场景

    1. 常见场景

    • 搜索类场景
      比如说电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。

    • 日志分析类场景
      经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查 询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了该方案。

    • 数据预警平台及数据分析场景
      例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消 息,通知用户购买。
      数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top 10关注度、评论数、访问量的内容等等。

    • 商业BI(Business Intelligence)系统

      比如大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信 息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

    2.常见案例

    • 维基百科、百度百科:有全文检索、高亮、搜索推荐功能

    • stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。

    • github:从上千亿行代码中搜索你想要的关键代码和项目。

    • 日志分析系统:各企业内部搭建的ELK平台。

    第5节 主流全文搜索方案对比

    Lucene、Solr、Elasticsearch是目前主流的全文搜索方案,基于倒排索引机制完成快速全文搜索。

    在这里插入图片描述

    Lucene

    Lucene是Apache基金会维护的一套完全使用Java编写的信息搜索工具包(Jar包),它包含了索引 结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要我们自己进一步开 发搜索引擎系统,例如数据获取、解析、分词等方面的东西。

    注意:Lucene只是一个框架,我们需要在Java程序中集成它再使用。而且需要很多的学习才能明 白它是如何运行的,熟练运用Lucene非常复杂。

    Solr

    Solr是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,封装了很多Lucene细 节,Solr可以直接利用HTTP GET/POST请求去查询,维护修改索引。

    Elasticsearch

    Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

    三者之间的区别和联系

    Solr和Elasticsearch都是基于Lucene实现的。但Solr和Elasticsearch之间也是有区别的1)Solr利用Zookpper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能

    https://db-engines.com/en/ranking

    1.Elasticsearch****版本介绍Elasticsearch 主流版本为5.x , 6.x及7.x版本

    7.x 更新的内容如下

    1. 集群连接变化:TransportClient被废弃
    以至于,es7的java代码,只能使用restclient。对于java编程,建议采用 High-level-rest- client 的方式操作ES集群。High-level REST client 已删除接受Header参数的API方法,Cluster Health API默认为集群级别。
    
    • 1
    1. ES数据存储结构变化:简化了Type 默认使用_doc
    es6时,官方就提到了es7会逐渐删除索引type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。
    api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值
    
    • 1
    • 2
    1. ES程序包默认打包jdk:以至于7.x版本的程序包大小突然增大了200MB+, 对比6.x发现,包大了 200MB+, 正是JDK的大小

    2. 默认配置变化:默认节点名称为主机名,默认分片数改为1,不再是5。

    3. Lucene升级为lucene 8 查询相关性速度优化:Weak-AND算法 es可以看过是分布式lucene,lucene的性能直接决定es的性能。lucene8在top k及其他查询上有 很大的性能提升。

    weak-and算法 核心原理:取TOP N结果集,估算命中记录数。
    TOP N的时候会跳过得分低于10000的文档来达到更快的性能。
    
    • 1
    • 2
    1. 间隔查询(Intervals queries): intervals query 允许用户精确控制查询词在文档中出现的先后关 系,实现了对terms顺序、terms之间的距离以及它们之间的包含关系的灵活控制。

    2. 引入新的集群协调子系统 移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形 成仲裁的节点。

    3. 7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据 量超出单机处理的最大内存限制时会被截断。

      设置indices.breaker.fielddata.limit的默认值已从JVM堆大小的60%降低到40%。

    4. 分片搜索空闲时跳过refresh

      以前版本的数据插入,每一秒都会有refresh动作,这使得es能成为一个近实时的搜索引擎。但是 当没有查询需求的时候,该动作会使得es的资源得到较大的浪费。

    2. Elasticsearch与其他软件兼容

    2.1 Elasticsearch与操作系统

    在这里插入图片描述

    Elasticsearch and JVM

    在这里插入图片描述

    第7节 Elasticseach Single-Node Mode快速部署

    Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Mode)和集群模式(Cluster Mode)部署,一般来说,小公司的业务场景往往使用Single-Node Mode部署即可。课程中我们先以Single-Node Mode部署实例学习,随后再专门讲授集群模式相关内容。

    1. 虚拟机环境准备

    • 准备一台虚拟机操作系统:CentOS 7.x 64 bit
    • 客户端连接工具:XShell
    • 关闭虚拟机的防火墙
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动
    firewall-cmd --state # 查看防火墙
    
    • 1
    • 2
    • 3

    2. Elasticsearch Single-Node Mode部署

    我们在虚拟机上部署Single-Node Mode Elasticsearch下载Elasticsearch

    地址: https://www.elastic.co/cn/downloads/elasticsearch 最新版本

    下载: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7.3…0 版本

    选择Linux版本下载:

    在这里插入图片描述

    开始安装****JDK[需要先安装jdk]

    1.解压三个tar.gz文件

    tar -zxvf jdk-8u171-linux-x64.tar.gz
    tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
    
    • 1
    • 2

    2.移动文件到安装目录

    mv /root/jdk1.8.0_171 /usr/java/
    mv /root/elasticsearch-7.3.0 /usr/elasticsearch/
    
    • 1
    • 2

    3.配置jdk环境变量

    vim /etc/profile
    
    • 1

    在profile结尾添加如下内容:

    JAVA_HOME=/usr/java
    JRE_HOME=/usr/java/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    export JAVA_HOME JRE_HOME CLASS_PATH PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5

    让修改生效:

    source /etc/profile
    
    • 1

    检查jdk

    java -version
    
    • 1

    jdk配置完成!

    配置Elasticsearch

    1.编辑vim /usr/elasticsearch/config/elasticsearch.yml ,注意冒号后面有个空格。

    vim /usr/elasticsearch/config/elasticsearch.yml
    
    • 1

    单机安装请取消注释:node.name: node-1,否则无法正常启动。

    修改网络和端口,取消注释master节点,单机只保留一个node

    node.name: node-1
    network.host: 192.168.211.136
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    cluster.initial_master_nodes: ["node-1"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.按需修改vim /usr/elasticsearch/config/jvm.options内存设置

    vim /usr/elasticsearch/config/jvm.options
    
    • 1
    根据实际情况修改占用内存,默认都是1G,单机1G内存,启动会占用700m+然后在安装kibana
    后,基本上无法运行了,运行了一会就挂了报内存不足。 内存设置超出物理内存,也会无法启
    动,启动报错。
    
    • 1
    • 2
    • 3
    -Xms1g
    -Xmx1g
    
    • 1
    • 2

    3.添加es用户,es默认root用户无法启动,需要改为其他用户

    useradd estest
    修改密码
    passwd estest
    
    • 1
    • 2
    • 3

    改变es目录拥有者账号

    chown -R estest /usr/elasticsearch/
    
    • 1

    4.修改/etc/sysctl.conf

    vim /etc/sysctl.conf
    
    • 1
    末尾添加:vm.max_map_count=655360
    
    • 1

    执行sysctl -p 让其生效

    sysctl -p
    
    • 1

    5.修改/etc/security/limits.conf

    vim /etc/security/limits.conf
    
    • 1

    末尾添加:

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 4096
    * hard nproc 4096
    
    • 1
    • 2
    • 3
    • 4

    6.启动es

    切换刚刚新建的用户

    su estest
    
    • 1

    启动命令

    cd /usr/elasticsearch/bin/elasticsearch
    
    • 1

    7.配置完成:浏览器访问测试。 ip:9200

    在这里插入图片描述

  • 相关阅读:
    JAVA商城和PHP商城的区别
    计算机应用基础【学习笔记】
    App的回归测试,有什么高效的测试方法?
    pycharm无法加载第三方库问题解决
    【Spring Boot】# 使用AOP实现接口鉴权访问、白名单限制、记录接口访问日志、限制接口请求次数
    轻量封装WebGPU渲染系统示例<19>- 使用GPU Compute材质多pass实现元胞自动机之生命游戏(源码)
    C# 判断电脑是否联网
    缓存失效方案
    Python柯布-道格拉斯效用函数规划食品预算和拟合前沿生产函数评估农作物生产效率
    怎么在 OJ 上用 JavaScript 写算法题,赶快学起来~
  • 原文地址:https://blog.csdn.net/guan1843036360/article/details/127701968