ElasticSearch基本知识介绍和安装常见报错解决
ES简介
ES是一个开源的高扩展的分布式全文搜索引擎,可以近乎实时的存储,检索数据,扩展性好,数据处理量大,用于Java开发,使用Lucene作为他的核心。
这里说明一下为何说他可以近乎近乎实时的存储和检索:ElasticSearch默认每秒更新存储的数据,把他放到文件系统的缓存当中,因此你刚写入的数据,在下一秒就可以搜索了。
ES的几个核心概念
- Cluster
ES是分布式的一个引擎,可以单机也可以集群,Cluster也就是集群 - Node
Node也就是分布在集群上的每一台机器,所谓节点。 - Shard
分片。比较重要,ES将数据分成很多个分片(为了方便存储和备份),而每一个分片又放在不同的服务器上(Node),查询的时候,ES是将查询发送给每个相关的分片,然后每个分片会去做自己的查询,最终把结果汇总在一起输出。(ES中默认设置为3,并且不可以更改) - Replia
副本。也就是一个分片的一个copy的存在。可以有多个,副本可以更改。其中一个副本作为主副本。类似于主从复制。 - 全文检索:
意思是:将内容根据词的意思进行分词,然后分别创建索引,ES分词后,对每一个分词都是默认建立索引的,因此如果不需要对某一个分词创建索引,一定要定义出来。
举个例子:
我在天安门隔壁的菜市场买了鸡蛋。分词后:
我,天安门,隔壁,菜市场,买,鸡蛋
ES与关系型数据库(如Mysql)的对比
Mysql | ElasticSearch |
---|---|
Database:数据库 | Index:ES的索引 |
Table:表 | Type:一个索引下面可以有多个类型(相当于表) |
Row:行,一个表有多条数据组成 | Document:一个文档相当于一条数据 |
Column:列 | Field:ES字段(文档分词后,每个分词属于一个字段) |
Schema:模式 | Mapping:映射关系,组成一个Index |
Index | ES默认给每个分词都创建一个索引 |
SQL | DSL |
insert:增加数据 | POST/PUT |
delete:删除数据 | DELETE |
update:更新数据 | PUT |
select:查询数据 | GET等 |
备注:
至于为什么ES中的PUT又可以增加又可以更新,原因如下:
- ES的更新操作一定要带上ID,也就是一个唯一标识
- 如果这个ID不存在,PUT操作会执行插入数据。
- 如果存在,那么就会对对应的数据进行更改
Mapping的解释:Mapping定义了索引Index下的Type(表)下的字段处理规则,比如:索引如何建立,索引的类型是什么,是否保留原始索引JSON文档,是否需要分词等等。
什么是ELK
ELK是ElasticSearch+LogStash+Kibana的英文缩写
- ES:就是一个分布式存储,全文搜索的引擎
- LogStash:从ES当中抽取数据进行日志加工(可以理解为一个ETL)
- Kibana:就是一个数据可视化的工具。
ES的特点
- 分布式实时文件存储,每个字段都可以放入索引
- 实时分析的分布式搜索引擎(将一个索引拆分成多个分片)
- 支持插件的机制(比如上面说的支持Kibana,还可以支持自定义的分词IK,还可以关联Hadoop)
- 拓展性强(可以搞集群,还支持各种插件)
ES安装常见的错误和解决方案
备注:ES版本在7.0以后支持的jdk版本都很高,所以我安装用例,使用的是ES6.0版本的。
问题一:不可以用root用户启动
解决方案:创建普通用户启动
(注意使用chown -R xxx:xxx ES文件夹的命令赋予权限)
问题二: JVM内存大小不够(默认大小为1g)
解决方案:在该目录下,编辑文件:
修改后,:wq保存即可:
问题三:ES用户拥有的可创建文件描述的权限太低
查看权限命令:
解决方案:在root下,执行命令
vi /etc/security/limits.conf
添加以下参数:
* soft nofile 65536
* hard nofile 65536
问题四:ES用户拥有的内存权限太小
解决方案:
- 修改sysctl.conf文件
- 添加以下内容
- 让配置文件生效:执行命令 sysctl -p
该版本的ES解决完以上四个问题后,正常下能启动成功:
配置ES外网访问:
配置文件当中打开注释:
network.host:你的虚机ip地址
http.port :ES的默认开放ip
然后重启ES就可以访问外网:
ES后台启动命令
bin/elasticsearch -d -p pid
ES验证安装成功
curl http:127.0.0.1:9200/