本此博客内容来源于之前公司要求使用ES时,在b站学习尚硅谷推出的ES视频课程,收获很大,把其中的文档类内容重新整理了一下。如果需要安装包可私信哦~
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
一 简介
ElasticSearch的使用场景
- 为用户提供按关键字查询的全文搜索功能。
- 实现企业海量数据的处理分析的解决方案。大数据领域 的重要一份子,如著名的ELK框架(ElasticSearch,Logstash,Kibana)。
与其他数据存储进行比较
| redis | mysql | elasticSearch | hbase | hadoop/hive |
容量/容量扩展 | 低 | 中 | 较大 | 海量 | 海量 |
查询时效性 | 极高 | 中等 | 较高 | 中等 | 低 |
查询灵活性 | 较差 k-v模式 | 非常好,支持sql | 较好,关联查询较弱,但是可以全文检索,DSL语言可以处理过滤、匹配、排序、聚合等各种操作 | 较差,主要靠rowkey, | 非常好,支持sql |
写入速度 | 极快 | 中等 | 较快 | 较快 | 慢 |
一致性、事务 | 弱 | 强 | 弱 | 弱 | 弱 |
elasticsearch的特点
1.天然分片,天然集群
es 把数据分成多个shard,下图中的P0-P2,多个shard可以组成一份完整的数据,这些shard可以分布在集群中的各个机器节点中。随着数据的不断增加,集群可以增加多个分片,把多个分片放到多个机子上,已达到负载均衡,横向扩展。
在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行Map计算,在一个固定的节点上进行Reduces得到最终结果向客户端返回。
这种集群分片的机制造就了elasticsearch强大的数据容量及运算扩展性。
天然索引
ES 所有数据都是默认进行索引的,这点和mysql正好相反,mysql是默认不加索引,要加索引必须特别说明,ES只有不加索引才需要说明。
而ES使用的是倒排索引和Mysql的B+Tree索引不同。
传统关系性数据库
弊端:
1、 对于传统的关系性数据库对于关键词的查询,只能逐字逐行的匹配,性能非常差。
2、匹配方式不合理,比如搜索“小密手机” ,如果用like进行匹配, 根本匹配不到。但是考虑使用者的用户体验的话,除了完全匹配的记录,还应该显示一部分近似匹配的记录,至少应该匹配到“手机”。
倒排索引是怎么实现的
全文搜索引擎目前主流的索引技术就是倒排索引的方式。
传统的保存数据的方式都是
记录→单词
而倒排索引的保存数据的方式是
单词→记录
例如
搜索“红海行动”
但是数据库中保存的数据如图:
那么搜索引擎是如何能将两者匹配上的呢?
基于分词技术构建倒排索引:
首先每个记录保存数据时,都不会直接存入数据库。系统先会对数据进行分词,然后以倒排索引结构保存。如下:
然后等到用户搜索的时候,会把搜索的关键词也进行分词,会把“红海行动”分词分成:红海和行动两个词。
这样的话,先用红海进行匹配,得到id=1和id=2的记录编号,再用行动匹配可以迅速定位id为1,3的记录。
那么全文索引通常,还会根据匹配程度进行打分,显然1号记录能匹配的次数更多。所以显示的时候以评分进行排序的话,1号记录会排到最前面。而2、3号记录也可以匹配到。
二 ES的安装
- 安装包下载
下载好后放到/opt/module/目录下
安装elasticsearch
1.单机模式
拷贝 elasticsearch-6.6.0.tar.gz 到 /opt/module 目录下
1.修改配置文件
/bigdata/elasticsearch-6.6.0/config/elasticsearch.yml |
修改yml配置的注意事项:
每行必须顶格,不能有空格
“:”后面必须有一个空格
集群名称,同一集群名称必须相同
单个节点名称
网络部分 改为当前的ip地址 ,端口号保持默认9200就行
把bootstrap自检程序关掉
自发现配置:新节点向集群报到的主机名
- 修改linux配置
为什么要修改linux配置?
默认elasticsearch是单机访问模式,就是只能自己访问自己。
但是我们之后一定会设置成允许应用服务器通过网络方式访问。这时,elasticsearch就会因为嫌弃单机版的低端默认配置而报错,甚至无法启动。
所以我们在这里就要把服务器的一些限制打开,能支持更多并发。
问题1:max 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
注意:“*” 不要省略掉
问题2:max 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
问题3:max 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。所以可以改小一点内存。
2g修改为256m
重启linux
2.集群模式
es天然就是集群状态。
- 把ES的安装包分发给其他两台机器
- 根据第一台机器的linux系统配置,修改其他两台机子
- 在三台机器能够独立启动的情况下,修改/etc/elasticsearch/elasticsearch.yml
设置新主机的“报道中心” 就行了
1 node-xx
2 network-host hadoop1
还要记得把 三台主机的node.name改成各自的
集群启动脚本
|
curl http://hadoop1:9200/_cat/nodes?v |
如果启动未成功,请去查看相关日志
vim /opt/module/elasticsearch6.6.0/logs/my-es.log
3.安装kibana
1.解压缩
进入kibana主目录的config目录下
2.配置
vim kibana.yml
启动
测试
访问http://hadoop1:5601/
最终集群脚本
|