大数据搜索与日志挖掘及可视化方案:ELK Stack:Elasticsearch、Logstash、Kibana (第2版)
上QQ阅读APP看书,第一时间看更新

1.1 Elasticsearch的安装与简单配置

“工欲善其事,必先利其器”。要想了解Elasticsearch,就要从该软件的安装入手。传统上,Java类的软件及使用往往比较烦琐,但Elasticsearch的安装却非常简单,几乎是“开箱即用”的。当然,前提是需要先下载JDK并配置相应的环境变量,同时确保系统可用内存大于2GB。

:建议使用JDK7或JDK8,低版本的JDK会对Elasticsearch的使用造成不利影响。

下面对Elasticsearch的安装进行说明。进入官网http://www.elastic.co,找到对应的Elasticsearch软件版本下载并解压。初学者也可以首先从Elasticsearch的RTF版本入手。RTF是Ready To Fly缩写。这是一个集成了基本插件(如服务封装、中文分词、mapper-attachments、transport-thrift、tools.carrot2等插件)并带有示例程序的可直接上手的简易工程版本。可以到https://github.com/medcl/elasticsearch-rtf下载Elasticsearch的RTF版本。RTF版本解压后会看到其目录结构,包括:

(1)bin:含有运行Elasticsearch实例和管理插件的一些脚本。

(2)config:主要是一些设置文件,如elasticsearch.yml和logging.yml等。对elasticsearch.yml和logging.yml文件中相关配置的说明,可参阅本书后续章节。

(3)lib:包含一些相关的包文件等。

(4)plugins:包含相关的插件文件等。

(5)logs:日志文件。

(6)data:Elasticsearch中存放数据的地方。

(7)works:临时文件。

截至本书出版时,Elasticsearch发布了2.1.1版本,其索引文件只是原始文件的一部分,这可为集群节省服务器硬件采购费用。Elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml是基本配置文件,logging.yml是日志配置文件。下面简要介绍在Ubuntu 14.04.2系统上安装Elasticsearch 2.1.1的主要步骤。

首先,在官网上下载对应Linux版本的Elasticsearch文件,然后进入安装文件所在目录下执行操作tar-xvf elasticsearch-2.1.1.tar.gz完成安装,具体步骤不再赘述。

如果将Elasticsearch作为一个系统Service应用,可安装elasticsearch-servicewrapper插件,运行这个插件的好处是Elasticsearch需要的JVM参数和其他配置都已配置好。在https://github.com/elasticsearch/elasticsearch-servicewrapper可下载该插件,解压后将service目录复制到Elasticsearch目录的bin目录下。

如果根目录下没有plugins文件夹,则表示当前的Elasticsearch没有集成任何插件。如果需要安装Head插件,可以进入bin目录下,输入./plugin install mobz/elasticsearch-head,完成后可发现bin的目录中多了plugins文件夹,子文件夹名称为Head,表示完成了插件Head的集成,如图1.2所示。

图1.2 Head插件集成的过程

进入Elasticsearch的bin文件夹,运行elasticsearch.bat文件,启动Elasticsearch。

:若关闭Elasticsearch,可在shell环境输入命令(Elasticsearch默认占用9200端口):curl-xPOST http://ip address:9200/_cluster/nodes/_shutdown

之后,打开浏览器,输入类似http:// ip address:9200,会显示类似图1.3的内容。其中:

(1)name:Elasticsearch实例的名字,默认情况下它将从名字列表中随机选择一个,其设置同样是在config/elasticsearch.yml文件中完成的。

(2)version:版本号,以JSON格式表示了一组信息,其中的number字段代表了当前运行Elasticsearch的版本号,build_snapshot字段代表了当前运行的版本是否从源代码构建而来,lucene_version表示Elasticsearch所基于的Lucene的版本(图1.3显示该版本是基于Lucene5.3.1而构建的)。

图1.3 Elasticsearch启动后的界面

(3)tagline:包含了Elasticsearch的第一个tagline:"You Know,for Search"。

图1.3中出现了JSON格式的数据。JSON(JavaScript Object Notation)是基于JavaScript的轻量级数据交换格式,是独立于语言的文本格式。在JavaScript中处理JSON数据不需要任何特殊的API或工具包,利用JSON可简单地表示半结构化数据,而且目前多数编程语言支持对JSON数据的解析。JSON的基本语法表示如下:

(1)数据在用双引号表示的“名称”:“值”对中,中间用冒号隔开,如:“Name”:“Smith”。

(2)可创建包含多个“名称”:“值”的记录,如{“Name”:“Smith”,“email”:“abc@sjtu.org”}等,它表示以上两个值是同一记录的一部分,数据由逗号分隔,花括号保存对象,方括号保存数组。

如下代码是对同样数据的XML和JSON表示形式。JSON和XML的可读性可谓不相上下,但在JavaScript范围内,JSON优势要大于XML。在Elasticsearch应用中,可以在很多地方看到JSON的身影。

    XML示例代码:
    <?xml version="1.0" encoding="utf-8"?>
    <book>
        <name>Elasticsearch Searching</name>
        <author>
            <name>Gao</name>
            <sex>male</sex>
            <age>45</age>
            <country>China</country>
        </author>
        <price>10</peice>
    </book>
    JSON示例代码:
    {
        "book": {
           "name": " Elasticsearch Searching ",
           "author": {
               "name": "Gao",
               "sex": "male",
               "age": 45,
               "country": "China"
           },
           "price": 10,
         }
    }