Elasticsearch 之 Hello World (一)

    做为一名半道出家的程序员,学习新的知识老是喜欢先从Hello World开始,以为这样能够比较简单的,首先给我直观上体验下新技术的特色。最近由于一个项目需求,决定开始入手Elasticsearch开始进行数据查询,分析工做。做为传统关系型数据库储备知识约为0,大数据新技术储备知识等于0的我来讲,很想先找来一个Hello World体验下,惋惜网上找了半天,没有找到相关详细的资料(或者至少对我而言,有些教程仍是不够详细,具体,何况时至今日,Elasticsearch已经发布到5.2.1版本了,网上不少教程仍是基于以前的2.X甚至更古老的版本)所以,决定求人不如求己,本身开始来搞一篇Step By Step,做为本身测试过程的一个记录吧。linux

    1、 系统环境程序员

    硬件:一台2年前攒的性能尚可的PC。web

    软件:Vmware + Centos 7 x64shell

    其实在5.2.1版本对windows的支持应该已经不错了,至少从文件来看,有专门的bat和exe文件。但从经验来看,凡是开源的东东,尤为这种开源后移植到win平台的东东,有可能的话仍是老老实实用linux系统吧。况且官方的各类示例基本也是linux下,curl这种小工具更是任意linux系统的标配。最后还有一个缘由:win系统b格不够高。若是未来真的要向领导演示这个系统,让领导看着平台原来和他一直用来写文档,玩扫雷的是一个系统,多掉价。数据库

    2、 安装json

    1 首先固然是安装Elasticsearch 5.2.1了。没想到,刚开始就掉入一个坑,https://www.elastic.co/downloads/elasticsearch中看到有rpm包,想着直接在系统yum install该多么帅。想都没想就按照官方教程windows

      

    来作,然而首先,龟速的下载速度已经让我抓狂,喝了n杯茶以后,悲催的发现,居然安装出错,因为本文写于系统已经初步搭建完成,因此当时报错信息忘记截图了。用万能的google+baidu各类搜索,试了诸如切换用户权限等各类方法后,错误仍然,遂放弃。仍是     老老实实用迅雷下载离线安装包。解压文件夹elasticsearch-5.2.1到当前用户的主文件夹(就是centos当前用户在桌面上打开终端,默认的那个路径)。而后直接在shell定位到bin目录运行centos

    

 ./elasticsearch

 

    成功了,是的,就这么简单,以前被yum给坑死了。然而,这仅仅是安装     的第一步,由于基本上如今用这个的都得装几个必备插件吧,固然这中间还有n个坑。浏览器

    2 安装X-PACK插件。嗯,首先找到这个名字就是一个坑,由于网上搜索相关材料,仍是一窝蜂的告诉你,要安装HEAD插件,而后你就能够很Happy的去web gui体验了。要是你按照这些教程一行行的输入相关安装head的命令,就等着报错吧,由于官方已经明确提     示了,从elasticsearch5.0版本之后,以前经典的head、marvel这些都集成到了x-pack插件包里面。其实要是英语够好,根本不用网上找各类资料,直接去看官网的readme,绝对是最权威,最靠谱的第一手资料。
app

    按照官方提示

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目录\config\jvm.options

  设置为

-Xms4g
-Xmx4g
(我给虚拟机分配了8g内存)

   保存重启便可。