目前公司的项目中使用到了ElasticSearch,而自己之前虽然久闻ES大名,但也只是看了一些相关的杂乱的东西,所以很有必要系统地学习并梳理一下ElasticSearch的整个知识架构。
推荐ES官方的QuickStart。
一. 简介
ElasticSearch是一个分布式、可扩展、实时的搜索与数据分析引擎,它能从项目一开始就赋予你的数据以搜索、分析和探索的能力。它基于Apache Lucene构建,并且是开源的。Lucene被认为是迄今为止性能最好的开源搜索引擎,但相对复杂,很难集成到日常应用中。而ElasticSearch是基于Java编写的,并且提供简单的RESTful API,可以轻松实现搜索功能。同时它可以进行轻松的横向扩展,支持PB级的结构化和非结构化数据处理,也就是当存储容量不足时,可以不断地加节点来解决。它有以下的应用场景:
- 海量数据分析引擎:例如海量日志数据,可以利用ES的聚合搜索功能来统计分析一些指标数据
- 站内搜索引擎:简单的继承、封装即可实现站内搜索引擎
- 数据仓库:强大的分布式存储能力,可以直接作为数据仓库产品使用
BAT、GitHub、Google都在使用ElasticSearch。
二.ES安装
2.1 版本问题
版本历史:1.x -> 2.x -> 5.x,版本号之所以不连续,是因为ES属于ELK(ElasticSearch、Logstash、Kibana)技术栈中的一个,当时各个中间件的版本迭代更新速度不同,导致版本号混乱。为了统一,ES出了5.0版本,统一了整个系列的版本号。
2.2 单实例安装
打开ES官网,点击右上角Downloads,在弹出的产品中选择ES,我选择下载linux版本,可以直接复制下载链接,虚拟机里wget下载,但是网速太慢。我还是在windows里面迅雷下载之后把tar.gz文件在我的虚拟机(linux 4.15.0-29-generic、ubuntu 7.3.0)中解压缩。看一下解压之后的核心目录:
启动ES命令: ./bin/elasticsearch
报错1:can not run elasticsearch as root,默认情况下ES不建议使用root用户启动,所以需要使用普通用户启动
报错2:Exception in thread "main" java.nio.file.AccessDeniedException: /usr/es/elasticsearch-7.0.1/config/jvm.options,上面切换了普通用户之后,权限不足,需要授权给我的普通用户haozz:sudo chown -R haozz elasticsearch-7.0.1/
再次启动正常,启动日志如下:
[2019-05-12T00:38:11,845][INFO ][o.e.e.NodeEnvironment ] [haozz-virtual-machine] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [9.2gb], net total_space [19.5gb], types [ext4]
[2019-05-12T00:38:11,853][INFO ][o.e.e.NodeEnvironment ] [haozz-virtual-machine] heap size [990.7mb], compressed ordinary object pointers [true]
[2019-05-12T00:38:11,856][INFO ][o.e.n.Node ] [haozz-virtual-machine] node name [haozz-virtual-machine], node ID [Baijs2IgSieVJdTmxY9t3g]
[2019-05-12T00:38:11,859][INFO ][o.e.n.Node ] [haozz-virtual-machine] version[7.0.1], pid[2662], build[default/tar/e4efcb5/2019-04-29T12:56:03.145736Z], OS[Linux/4.15.0-29-generic/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_131/25.131-b11]
[2019-05-12T00:38:11,864][INFO ][o.e.n.Node ] [haozz-virtual-machine] JVM home [/usr/java/jdk1.8.0_131/jre]
[2019-05-12T00:38:11,866][INFO ][o.e.n.Node ] [haozz-virtual-machine] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycle