码迷,mamicode.com
首页 > 其他好文 > 详细

初识Elasticsearch

时间:2016-05-12 18:28:46      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

Elasticsearch是一个高度可扩展的开源的全文搜索和分析引擎,它可以接近实时的快速的存储、搜索、分析大量的数据


基本概念

对es有几个核心概念,开始学习之前理解这些概念将极大的帮助你理解后面的学习

Near Realtime(NRT)--接近实时

elasticsearch 是一个接近实时的搜索平台。通俗的讲就是,从你索引一个文档直到这个文档可被搜索会有一段时间的延迟(一般是1s)。个人理解就是你创建了个文档,会有将近1秒的延迟,别人才能搜索到这个文档

Cluster--集群

集群就是一个或者多个节点(服务器)的集合,承载着你的所有数据并在所有节点之间提供联合索引和搜索能力。一个集群被一个唯一的名字所标识,默认是elasticsearch。这个名字很重要,因为一个节点要加入集群,必须指定这个集群的名字。

确保在不同的环境不要使用相同的集群名字,否则节点将加入错误的集群。

注意,一个集群就有一个节点是合法的。除此之外,你也可以有多个相互独立的集群,每个用一个唯一的名字标识。

Node--节点

节点就是集群中的一个单个服务器,它存储数据,参与集群的索引和搜索。就像一个集群,节点也用一个名字来标识,默认是一个随机的传奇人物的名字,在节点启动的时候被指定。

一个节点可以配置加入一个集群通过集群的名字。默认,每个节点设置为加入名字为elasticsearch 的集群,这就意味着,如果你启动了多个节点在你的网络-假定他们能彼此发现对方-他们将自动的组织成一个名字为elasticsearch的集群。

在一个集群中,你可以拥有你想要数量的节点。除此之外,如果没有其他elastisearch节点当前运行在你的网络上,启动一个节点将默认形成一个新的单个节点的名字为elastisearch的集群

index--索引

一个索引就是文档的集合,这些文档有几分相似的特性。比如,你可以有一个索引存储客户数据,另一个索引存储产品分类,另一个索引存储订单信息。一个索引用一个名字来标识(必须是小写),这个名字被用来指定索引当针对其中的文档执行索引、搜索、更新、删除操作时。

在一个集群中,你可以定义任意数量的索引,只要你想。

es 的index 相当于mysql 的database (个人理解)

Type--类型

在索引中,你可以定义一个或者多个类型。type是index的逻辑分类,怎么定义完全取决于你。大体上,具有相同字段的文档的集合被定义为一个type。打个比方,你运行了一个博客平台,且所有数据存储在了一个index里。在这个index里,你可以给用户数据定义一个type,给博客数据定义一个type,给评论数据定义一个type。

type相当于mysql的 table

Document -- 文档

一个文档是可被索引的基本信息单元。例如,你可以有一个针对顾客的文档,还可以有个针对产品的文档,还可以有一个针对订单的文档。文档用json格式表示,此格式是普遍使用的一种数据交换格式。

在一个index/type中,你可以存储你想要数量的文档。注意,尽管一个文档物理上存在一个index中,一个文档事实上必须被指定到一个index中的type上。

document相当于myslq 的 row

shards & replicas -- 分片与副本

一个index可能存储大量的数据,且超过了一个节点硬件的容量限制。比如,一个index存储了10亿个文档,这将占据1TB的硬盘,这不适合存储在一个节点的硬盘上,或者在如此大的数据量的情况下,从单一节点请求未免太慢。

去解决这个问题,elastisearch细分index为多个碎片称之为shards。当创建索引时,你可以定义你想要的shards数量。每个shard都是功能齐全、独立的‘index‘,且可分布在集群的任何节点上。

分片重要主要有以下两点:
  • 它允许你水平的拆分/扩展你的数据量
  • 它允许你分发和并行的跨分片操作(可能在多个节点上),从而提高性能和吞吐量。
shard是如何分布的和文档是如何聚合回搜索请求点是完全由elasticsearch管理的,这对于你来说是透明的。

在网络/云环境,故障在任何时候都可能不期而至,这是非常有用和高度推荐的去部署一个故障转移机制,以防shard/node不知何故掉线或者消失因为某种原因。为此,elasticsearch允许你去给shards 部署一个或者多个拷贝被称为副本shards,或者副本简而言之。

副本重要的两点原因:
  • 支持高可用当shard/node挂掉。基于这个原因,需要明确注意的是副本永远不要和他的shard分配到一个节点(node)上。
  • 它可以扩展搜索量和吞吐量,因为搜索可以并行的在所有副本上执行

总结,每个index可以拆分成多个shards。一个index也可以被复制0次或者多次。一旦被复制,每个index将拥有主分片(primary)和副本分片(replica)。index在创建的时候可以指定shards和replicas的数量。index创建后,副本的数量可以在任何时候动态的调整,但是主分片(primary)的数量是不能调整的。

默认,每个index在es里被分配5个主分片和一个副本,这个的意思是如果你有至少两个节点在你的集群里,你的index将有5个主分片和另五个副本分片(1 个完整的副本),总共10个分片对每个index。

注意

每个es的shard 都是一个lucene index。在每个Luene index里,documents数量都有个上线。根据LUCENE-5843,这个限制是2,147,483,519(=integer.MAX_VALUE-128)。你可以监控shard size 使用_cat/shards api (之后会学习到)


Elasticsearch安装

Elasticsearch的运行需要java的支持,es需要至少java 7。当写作本节的时候,推荐使用Oracle JDK version 1.8.0_73。所以在安装es之前需要先查看java 的版本通过执行以下命令
  • java -version
  • echo $JAVA_HOME
es官网有很重类型的es安装文件,现在我们以tar文件为例说明(linux 平台)

下载tar 文件:
curl-L-O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.2/elasticsearch-2.3.2.tar.gz

解压
tar-xvf elasticsearch-2.3.2.tar.gz

进入解压后的 es目录
cd elasticsearch-2.3.2/bin

启动es
./elasticsearch 此时集群名字和节点名字都是默认的 如果想开启守护进程 可以加-d 参数

如果想启动es的时候自己指定集群名字和节点名字,可以加以下参数
./elasticsearch--cluster.name my_cluster_name --node.name my_node_name
其中my_cluster_name和my_node_name就是要新命名的集群名字和 节点名字

默认 es使用端口号9200来支持REST API的请求。


Exploring Your Cluster(探索你的集群)

我们可以使用curl或者其他任何可以进行http/rest请求的工具与es进行交互请求。

集群健康

curl‘localhost:9200/_cat/health?v‘

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 
1462841542 08:52:22  elasticsearch yellow          1         1    139 139    0    0      139             0                  -                 50.0% 

这个我自己搭建的一个cluster,可以看到我集群elasticsearch 状态为yellow,因为我只有一个节点,主分片和副本分片不能在一个node上,故副本分片没有被分配,因此状态是yellow,但是整个集群是完全可用的。

集群状态有三种,green、yellow、red。green的意思就是集群一切正常,功能完全可用。yellow的意思是所有数据可用但是一些副本没有被分配(集群完全可用),red的意思是一些数据是不可用的因为某种原因。注意就算一个集群的状态是red,它仍然是部分可用的(仍将从可用的分片上提供请求服务),但是需要尽快修复,因为已经丢失数据了。

查看集群列表

curl‘localhost:9200/_cat/nodes?v‘

列出所有index

curl‘localhost:9200/_cat/indices?v‘

创建索引

curl -XPUT  ‘localhost:9200/customer?pretty‘

此命令代表创建一个名为customer的index

如果返回此值就代表创建成功
{
  "acknowledged" : true
}

初识Elasticsearch

标签:

原文地址:http://blog.csdn.net/baoxifu/article/details/51356089

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!