当前位置 : 首页 » 文章分类 :  大数据  »  大数据环境搭建-elasticsearch

大数据环境搭建-elasticsearch

what

       本文仅描述如何在多台机器上部署elasticsearch集群,并简单介绍了es的基本概念和es的基本操作。最后将会介绍elastic dump工具的安装和使用。

Prerequisites

  1. 三台在同一个内网的测试机,系统是64位centos6.5+,最好可以访问外网。
  2. 请参照centos6.5基本开发环境搭建安装并配置jdk环境。

Steps

  1. 在bigdata用户组下创建kafka用户

    group add bigdata
    useradd -g bigdata elastic
    passwd elastic

  2. 然后去elasticsearch官网下载对应版本的安装包放到/home/elasticsearch/opt/目录下,解压

    tar -zxvf elasticsearch-2.1.1.tar.gz

  3. 在elasticsearch-2.1.1/config目录下,配置elasticsearch.yml

    cluster.name: ESTest
    node.name: es-node-1 | 节点名称
    path.data: /mnt/data/elastic/data | es数据存放目录
    path.logs: /mnt/data/elastic/log | es日志存放目录
    network.host: A | 本机ip或域名
    http.port: 9200 | 客户端连接端口
    discovery.zen.ping.unicast.hosts: [“A”, “B”] | zookeeper节点列表

  4. backend start | your server ./elasticsearch -d
  5. 在不同的机器上重复1-4步骤,注意node.name是不同的。
  6. Verify install
    1. jps
    2. ps aux | grep elasticsearch

ES基本概念

       ElastichSearch是一个分布式的,可扩展的,高可用的全文搜索服务器,它可以实时的查询和分析数据,并提供了一套功能强大的rest api。

       1. 索引是elasticsearch存放数据的地方,可以理解为关系数据库的表。
       2. 文档是ElasticSearch中存储的主要实体,可以理解为数据表中的一行数据。文档由字段(行数据的列)组成,多值字段允许一个字段出现多次,一个字段对应一种类型。字段类型可以是复合的,字段可以包含其它子文档或数组。字段类型决定了搜索引擎执行何种操作,如比较、排序等,ElasticSearch可以自动确定字段类型。文档不需要有固定的结构,不同文档可以有不同的字段集合,而且在程序开发时不需要知道文档的字段。
       3. 文档类型:一个索引可以存储许多不同用途的对象,文档类型可以轻松区分这些对象。
       4. 节点和集群:为了能够处理大型数据集并实现容错功能,ElasticSearch支持在多台协同工作的服务器上运行。这些服务器被统称为一个集群,集群的每个服务器被称为一个节点。通过索引分片(分割成更小的个体)将海量数据进行分割并分布到不同的节点。通过副本(索引部分的拷贝)可以实现更强的可用性和更高的性能。
       5. 分片:当需要存储大规模文档时,由于RAM空间、硬盘容量等的限制,仅使用一个节点是不够的。另一个问题是一个节点的计算能力达不到期望的复杂功能的需求。在这些情况下,可以将数据切分,每个部分一个单独的Apache Lucene索引,称为分片(Shard)。每个分片可以被存储在集群的不同节点上。当需要查询一个由多个分片构成的索引时,ElasticSearch将该查询发送到每个相关的分片,并将结果合并。这些过程对应具体应用是透明的,无需知道分片的存在。
       6. 副本:为了提高查询的吞吐量或实现高可用性,可以启用分片副本功能。副本分片是对原始分片的一个精确拷贝,原始分片被称为主分片。对索引的所有修改操作都直接作用在主分片上,每个主分片可以有零个或多个副本分片。当主分片丢失时,集群可以将一个副本分片提升为新的主分片。


ES基本操作

  1. 查看集群健康状况

    curl -XGET http://localhost:9200/_cluster/health?pretty=true

  2. 创建test索引

    curl -XPOST 10.0.2.44:9200/test -d '{
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    "mappings": {
    "record": {
    "properties": {
    "id": {
    "type": "string"
    },
    "day": {
    "type": "string"
    }
    }
    }
    }
    }';

    也可以是curl curl -XPOST ‘http://localhost:9200/test‘ -d @test.json,test.json文件的内容是JSON对象。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    "mappings": {
    "object1":{
    "properties":{
    "id":{"type":"long"},
    "day":{"type":"string"}
    }
    }
    }
    }
  3. 删除索引

    curl -XDELETE http://localhost:9200/test

  4. 创建文档

    curl -XPUT http://localhost:9200/test/record/1 -d “” -d选项的取值用作请求负载的文本,请求正文

  5. 检索文档

    curl -XGET http://localhost:9200/test/record/1

  6. 更新文档

    curl -XPOST http://localhost:9200/test/record/1 update -d选项的取值用作请求负载的文本,请求正文

elasticdump

Tools for moving and saving indicies.

安装

       首先安装nodejs

rpm -ivh http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
yum install npm –enablerepo=epel
node

       然后安装elasticdump

npm install elasticdump -g elasticdump

使用教程

elasticdump works by sending an input to an output. Both can be either an elasticsearch URL or a File.

Elasticsearch:

       format: {protocol}://{host}:{port}/{index}
       example: http://127.0.0.1:9200/my_index
       File:

       format: {FilePath}
       example: /Users/evantahler/Desktop/dump.json
       Stdio:

       format: stdin / stdout
       format: $
       You can then do things like:

Copy an index from production to staging with analyzer and mapping and data:

       elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=http://staging.es.com:9200/my_index \
              –type=analyzer
       elasticdump \
               –input=http://production.es.com:9200/my_index \
              –output=http://staging.es.com:9200/my_index \
              –type=mapping
        elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=http://staging.es.com:9200/my_index \
              –type=data

Backup index data to a file:

        elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=/data/my_index_mapping.json \
              –type=mapping
        elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=/data/my_index.json \
              –type=data

Backup and index to a gzip using stdout:

        elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=$ \
              | gzip > /data/my_index.json.gz

Backup the results of a query to a file

        elasticdump \
              –input=http://production.es.com:9200/my_index \
              –output=query.json \
              –searchBody ‘{“query”:{“term”:{“username”: “admin”}}}’

Options

Import and export tools for elasticsearch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
version: %%version%%
Usage: elasticdump --input SOURCE --output DESTINATION [OPTIONS]
--input
Source location (required)
--input-index
Source index and type
(default: all, example: index/type)
--output
Destination location (required)
--output-index
Destination index and type
(default: all, example: index/type)
--limit
How many objects to move in batch per operation
limit is approximate for file streams
(default: 100)
--debug
Display the elasticsearch commands being used
(default: false)
--type
What are we exporting?
(default: data, options: [analyzer, data, mapping])
--delete
Delete documents one-by-one from the input as they are
moved. Will not delete the source index
(default: false)
--searchBody
Preform a partial extract based on search results
(when ES is the input,
(default: '{"query": { "match_all": {} } }'))
--sourceOnly
Output only the json contained within the document _source
Normal: {"_index":"","_type":"","_id":"", "_source":{SOURCE}}
sourceOnly: {SOURCE}
(default: false)
--ignore-errors
Will continue the read/write loop on write error
(default: false)
--scrollTime
Time the nodes will hold the requested search in order.
(default: 10m)
--maxSockets
How many simultaneous HTTP requests can we process make?
(default:
5 [node <= v0.10.x] /
Infinity [node >= v0.11.x] )
--timeout
Integer containing the number of milliseconds to wait for
a request to respond before aborting the request. Passed
directly to the request library. Mostly used when you don't
care too much if you lose some data when importing
but rather have speed.
--offset
Integer containing the number of rows you wish to skip
ahead from the input transport. When importing a large
index, things can go wrong, be it connectivity, crashes,
someone forgetting to `screen`, etc. This allows you
to start the dump again from the last known line written
(as logged by the `offset` in the output). Please be
advised that since no sorting is specified when the
dump is initially created, there's no real way to
guarantee that the skipped rows have already been
written/parsed. This is more of an option for when
you want to get most data as possible in the index
without concern for losing some rows in the process,
similar to the `timeout` option.
(default: 0)
--inputTransport
Provide a custom js file to us as the input transport
--outputTransport
Provide a custom js file to us as the output transport
--toLog
When using a custom outputTransport, should log lines
be appended to the output stream?
(default: true, except for `$`)
--awsAccessKeyId
--awsSecretAccessKey
When using Amazon Elasticsearch Service proteced by
AWS Identity and Access Management (IAM), provide
your Access Key ID and Secret Access Key
--help
This page

上一篇 接口性能测试工具-ab

下一篇 大数据环境搭建-hadoop