最近新入职,公司在存储业务数据的时候,使用的是elasticsearch,之前只是耳闻并没有实际操作过。
最近在上班过程中,只是使用 elasticsearch官方自带的一些API进行调用,生成查询语句,虽然很好用,但是感觉一直体会不到精髓。在使用的过程中,遇到的最大的坎儿可能就是刚开始没有摸透嵌套文档和父子文档的关系,加上业务数据在设计上有一定的复杂,学习了两天之后也很熟练起来了。但是对于elasticsearch还是有很多地方需要了解。
之前在腾讯云上购买过一台服务器,所以正好拿来练练手。
下载
下载的是elasticsearch 7.3.0 ,下载地址以及版本可以去下面的网站自行挑选,as you wish:
Elasticsearch下载中心
下载完之后解压到对应的文件夹下,然后一路cd到bin,这时候看见一个文件名在闪闪发光,没错,就是ealsticsearch,这个是启动的脚本,执行 ./elasticsearch 或者 sh elassticsearch 之后。
按理说,接下来我们就可以使用es了,但是世事无常,事情的发展往往超出人们的想象,有问题吗,没有问题!程序界没有人情世故,有的是事故。
报错
这不,事故来了,执行完启动脚本之后,发现报错了!!!
could not find java in JAVA_HOME or bundled at /data/tools/elasticsearch/elasticsearch-7.3.0/jdk/bin/java
what the hell!!!
看样子是没有jdk安装?于是我执行了java -version:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
正常啊,作为一个Java程序员,在拿到一个一台新的服务器,第一个执行的命令不就是java -version嘛,否则你肯定是一个产品经理(just kidding)。
解决
俗话说,万事不绝,某度解决。
于是,基于面向搜索引擎开发的本能,我打开了某度。得到的最多的答案就是elasticsearch不能使用root用户启动,重点来了,我压根儿不知道这事儿。
于是,我创建了一个用户es,然后su es 进入es用户,继续 ./elasticsearch。
在学习的过程中,如果不受点挫折,那么肯定还没有逃出自己的舒适区,是的,有他喵的报错了 ,而且错误信息一点都不变,我已读怀疑我是不是查了假的某度。
继续查!!!
终于,在众多的提问中,发现一个大佬提出的问题,被另一个大佬解决了:
elasticsearch:在捆绑的jdk中找不到java,地址是…/jdk/bin/java
根据第一个也是唯一一个回答,我执行了echo $JAVA_HOME,输出空空如也。希望突然就这么来了,就像经历黑暗之后的第一个黎明,是那么的让人舒心。
于是我执行whereis java,确定好java的位置 /usr/bin/java,然后执行export JAVA_HOME=/usr/bin/java,在更新配置sudo update-alternatives --config java,在这次过程中需要输入一次当前用户的密码。
真诚的奉劝各位,在自己服务器上创建用户的时候,最好记下自己设置的密码和用户名,否则就可能跟我一样,从头找(过目不忘的另外,那是病,得治<超忆症>。
下面就是寻找的过程。
cat /etc/passwd :查看所有用户
passwd <userName> :修改userName对应的密码
此外还有几个可能用的到的:
w :查看当前登录用户信息
cat /etc/group:查看用户组
su <userName>:切换用户
再次执行 ./elasticsearch,如果一切顺利,可能我也不会写这篇博客。
我不信基督教的原因,可能是因为上帝真的很会开玩笑,明明已经抓到黎明的光了,可是中间还是能隔着一层玻璃。
提示报错:
could not find java in JAVA_HOME or bundled at /usr/bin/java/bin/java
看到没,看到没,/bin/java/bin/java这种俄罗斯套娃的报错方式,简单但不好玩,于是我重新设置了JAVA_HOME配置 ,将后面的 /bin/java删除了,在此执行,成功了,可喜可贺!!
后面查询才知道,Elasticsearch在启动的时候,会默认给你加上 /bin/java,你搁这儿搁这儿搁这儿呢。
题外话
在启动的时候,还有个小插曲,在启动的时候,需要修改一下安装目录下elasticsearch.yml文件,在最后一行加上xpack.ml.enable: false,否则启动的时候会报错:
org.elasticsearch.ElasticsearchException: Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false].
这个比简单,可以按秒计时解决。
最后说一句,不要相信自己的脑子,那是病,得治(这是对我自己说的,大家的脑子都比我好)。
撤!!!
来都来了,看都看到这儿了,扫一下呗
一个Java和NLP工程师共同维护的公众号