作为一名半道出家的程序员,学习新的知识总是喜欢先从Hello World开始,觉得这样可以比较简单的,首先给我直观上体验下新技术的特点。最近因为一个项目需求,决定开始入手Elasticsearch开始进行数据查询,分析工作。作为传统关系型数据库储备知识约为0,大数据新技术储备知识等于0的我来说,很想先找来一个Hello World体验下,可惜网上找了半天,没有找到相关详细的资料(或者至少对我而言,有些教程还是不够详细,具体,况且时至今日,Elasticsearch已经发布到5.2.1版本了,网上很多教程还是基于之前的2.X甚至更古老的版本)因此,决定求人不如求己,自己开始来搞一篇Step By Step,作为自己测试过程的一个记录吧。
一、 系统环境
硬件:一台2年前攒的性能尚可的PC。
软件:Vmware + Centos 7 x64
其实在5.2.1版本对windows的支持应该已经不错了,至少从文件来看,有专门的bat和exe文件。但从经验来看,凡是开源的东东,尤其这种开源后移植到win平台的东东,有可能的话还是老老实实用linux系统吧。何况官方的各种示例基本也是linux下,curl这种小工具更是任意linux系统的标配。最后还有一个原因:win系统b格不够高。如果将来真的要向领导演示这个系统,让领导看着平台原来和他一直用来写文档,玩扫雷的是一个系统,多掉价。
二、 安装
1 首先当然是安装Elasticsearch 5.2.1了。没想到,刚开始就掉入一个坑,https://www.elastic.co/downloads/elasticsearch中看到有rpm包,想着直接在系统yum install该多么帅。想都没想就按照官方教程
来做,然而首先,龟速的下载速度已经让我抓狂,喝了n杯茶之后,悲催的发现,竟然安装出错,由于本文写于系统已经初步搭建完成,所以当时报错信息忘记截图了。用万能的google+baidu各种搜索,试了诸如切换用户权限等各种方法后,错误仍然,遂放弃。还是 老老实实用迅雷下载离线安装包。解压文件夹elasticsearch-5.2.1到当前用户的主文件夹(就是centos当前用户在桌面上打开终端,默认的那个路径)。然后直接在shell定位到bin目录运行
./elasticsearch
成功了,是的,就这么简单,之前被yum给坑死了。然而,这仅仅是安装 的第一步,因为基本上现在用这个的都得装几个必备插件吧,当然这中间还有n个坑。
2 安装X-PACK插件。嗯,首先找到这个名字就是一个坑,因为网上搜索相关材料,还是一窝蜂的告诉你,要安装HEAD插件,然后你就可以很Happy的去web gui体验了。要是你按照这些教程一行行的输入相关安装head的命令,就等着报错吧,因为官方已经明确提 示了,从elasticsearch5.0版本以后,之前经典的head、marvel这些都集成到了x-pack插件包里面。其实要是英语够好,根本不用网上找各种资料,直接去看官网的readme,绝对是最权威,最靠谱的第一手资料。
按照官方提示
sudo bin/elasticsearch-plugin install x-pack
然后就是令人抓狂的等待过程,实在是太太太慢了,果断采用B方案,即离线安装。首先迅雷下载 https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.1.zip,然后不用解压,不用解压,不用解压,重要的事情说三遍,将该文件放到一个比较方便的 目录,如我就放在tmp目录下。然后运行
./elasticsearch-plugin install file:///tmp/x-pack-5.2.1.zip
秒OK。有洁癖的别急着删除tmp下的这个文件,因为kibana和logstash也需要这样离线安装x-pack。(这样看来,我的安装顺序貌似有误,应该先安装那两个,最后安装x-pack才是。没办法,谁让我是搜索head插件开始的呢)
3 安装 kibana。
没有吸取教训的我,这里一开始仍然妄图通过yum install的方法来安装,然而龟速很快就让我缴械投降了。果断直接下载包https://artifacts.elastic.co/downloads/kibana/kibana-5.2.1-linux-x86_64.tar.gz,解压完之后直接运行
./kibana
是秒OK。
4 安装logstash。完全参照3。
5 注册x-pack。
此时如果打开浏览器http://localhost:5601登录(默认的用户名是elastic密码是changeme),会发现没几天就会过期,这是因为x-pack只是针对开发测试环境免费,但需要去注册激活一个一年的key。根据页面上注册的提示连接,很容易就可以注册下载到一个json 格式的激活文件,有效期一年。(我是用十分钟邮箱去注册的,我会乱说?:))。下载到的json文件是比较长的字符,为了方便我改为key.json。然后根据官方链接的提示,在json当前目录的shell中输入
curl -XPUT 'http://localhost:9200/_license' -d @key.json
然而很不幸,提示如下
{"acknowledged":false,"license_status":"valid","acknowledge":{"message":"This license update requires acknowledgement. To acknowledge the license, please read the following messages and ......
继续google,发现在http://stackoverflow.com/questions/36135815/marvel-basic-licence-installation的解决方法,即在http://localhost:9200/_license后面添加acknowledge=true,即
curl -XPUT 'http://localhost:9200/_license?acknowledge=true' -d @key.json
一切顺利,最好重启下服务,再登陆页面就会发现提示是一年后过期了。
6 参照2,在 kibana和logstash安装x-pack。
至此,Elasticsearch和一些常用的基本组件应该安装完成了。下面,应该就可以开始导入、查询数据了。
BTW,虽然程序已经可以跑起来了,但是仔细查看ElasticSearch的输出日志,发现有两处报警:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:第一个问题,
sudo gedit /etc/security/limits.conf
添加如下两行
启动es的用户名 soft nofile 65536
启动es的用户名 hard nofile 65536
保存重启后,确认下结果为65536
ulimit -Hn
第二个问题,
sudo gedit /etc/sysctl.conf
然后添加
vm.max_map_count=262144
保存重启后,确认下结果修改成功
sysctl vm.max_map_count
最后,设置下Xms和Xmx,最好是物理内存的一半。
gedit ElasticSearch目录configjvm.options
设置为
-Xms4g -Xmx4g (我给虚拟机分配了8g内存)
保存重启即可。