当前位置: 首页 > news >正文

《从0开始学Elasticsearch》—初识Elasticsearch

目录

1. Elasticsearch 是什么2. Elasticsearch 中基本概念3. Elasticsearch 安装4. 访问 Elasticsearch

1. Elasticsearch 是什么

Elasticsearch 是一个基于 Lucene 的实时的分布式搜索分析引擎,开箱即用,整合了全文检索、结构化搜索、分析三大功能。
为什么不直接用 Lucene ?Lucene 只是一个全文检索引擎的架构,提供了大量可用的 API,但其并不是一个完整的全文检索引擎,使用 Lucene 时,你还需要自己写代码,自己去封装成全文检索引擎。

2. Elasticsearch 中基本概念

  • field:字段。
  • Document :文档,一条数据,用 json 格式表示。一个Document 包含多个field,json 中的 key 即 field 。
  • Type:类型,一个 Document 分组,和 mysql 中的 table 类似,但又不完全相同。一个 Type 包含多个Document,同一个 Type 中的 Document 所拥有的 field 可以不同,但最好保持一致。
  • Index :索引,类似于 mysql 中的 database。一个 Index 包含多个 Type。默认情况下,Document 中的所有 field 都会被索引,这样这些 field 才会被搜索到。Elasticsearch 中有一个倒排索引(Inverted Index)的概念,可以实现 mysql 中 B+Tree索引加速检索的目的,后面文章我们会详细介绍倒排索引。
  • shard:分片。可以将一个 Index 中的数据切分为多个 shard,然后将之存储在多台服务器上,以增大一个 Index 可以存储的数据量,加速检索能力,提升系统性能。
  • replica :副本。replica 与 shard 存储的数据是相同的,replica 起到备份的作用。当 shard 发生故障时,可以从 replica 中读取数据,保证系统不受影响。
  • Node:节点,单个 Elasticsearch 实例。节点名称默认随机分配。
  • Cluster:集群,一组 Elasticsearch 实例。默认集群名称为 elasticsearch。

3. Elasticsearch 安装

前提条件:系统中已成功安装 jdk8
下载并解压:

cd /usr/local
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
tar -zxvf elasticsearch-6.6.0.tar.gz -C .
复制代码

查看解压后的目录:

[root@153-215 local]cd elasticsearch-6.6.0
[root@153-215 elasticsearch-6.6.0]ls
bin  config  lib  LICENSE.txt  logs  modules  NOTICE.txt  plugins  README.textile
复制代码

启动 Elasticsearch:

[root@153-215 elasticsearch-6.6.0]# bin/elasticsearch
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d4cc00007248281600) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 724828160 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid16393.log
复制代码

遂,查看 Elasticsearch 的启动脚本,看启动时是否对内存大小有要求:

[root@153-215 elasticsearch-6.6.0]# vim bin/elasticsearch
#!/bin/bash

# CONTROLLING STARTUP:
#
# This script relies on a few environment variables to determine startup
# behavior, those variables are:
#
#   ES_PATH_CONF -- Path to config directory
#   ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
# Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
# the Xms and Xmx lines in the JVM options file must be commented out. Example
# values are "512m", and "10g".
#
#   ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch

source "`dirname "$0"`"/elasticsearch-env

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
JVM_OPTIONS=`"$JAVA" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "$ES_JVM_OPTIONS"`
ES_JAVA_OPTS="${JVM_OPTIONS//\$\{ES_TMPDIR\}/$ES_TMPDIR$ES_JAVA_OPTS"
......
复制代码

发现 Elasticsearch 启动时,读取了 jvm.options 文件,于是查看该文件:

[root@153-215 elasticsearch-6.6.0]# ls config
elasticsearch.yml  jvm.options  log4j2.properties  role_mapping.yml  roles.yml  users  users_roles
[root@153-215 elasticsearch-6.6.0]# cat config/jvm.options 
## JVM configuration

################################################################
## IMPORTANT: JVM heap size
###
#############################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g
-Xmx1g
......
复制代码

修改 jvm 的最大可用内存和最小可用内存如下:

-Xms256m
-Xmx256m
复制代码

再次启动 Elasticsearch:

[root@153-215 elasticsearch-6.6.0]# bin/elasticsearch
[2019-02-13T16:42:53,177][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.6.0.jar:6.6.0]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.6.0.jar:6.6.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:103) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.6.0.jar:6.6.0]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.6.0.jar:6.6.0]
        ... 6 more
复制代码

这段报错信息也就是说,不能以 root 用户的身份启动 Elasticsearch,这一要求也是出于系统安全考虑,所以此处我先将 Elasticsearch 目录及目录内文件的拥有者修改为另一个用户,然后再用另一个用户启动:

[root@153-215 elasticsearch-6.6.0]# cd ..
[root@153-215 local]# chown -R lilinru:lilinru elasticsearch-6.6.0
[root@153-215 local]# su lilinru
[lilinru@153-215 local]$ cd elasticsearch-6.6.0
[lilinru@153-215 elasticsearch-6.6.0]$ bin/elasticsearch
....
[2019-02-13T17:10:23,443][INFO ][o.e.n.Node               ] [_xV7bTf] starting ...
[2019-02-13T17:10:23,618][INFO ][o.e.t.TransportService   ] [_xV7bTf] publish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}
[2019-02-13T17:10:23,636][WARN ][o.e.b.BootstrapChecks    ] [_xV7bTf] max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2019-02-13T17:10:23,636][WARN ][o.e.b.BootstrapChecks    ] [_xV7bTf] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
....
复制代码

发现启动时存在两个问题:
问题一: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
解决此问题,我们可以编辑 /etc/security/limits.conf 文件最底端 soft nofilehard nofile 的配置为 65536:

[root@153-215 elasticsearch-6.6.0]# vim /etc/security/limits.conf 
...
# End of file
...
* soft nofile 65536
* hard nofile 65536
...
复制代码

问题二:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决此问题,我们可以编辑 /etc/sysctl.conf 文件,在文件最底端添加如下配置:

vm.max_map_count=262144
复制代码

注意添加完该配置,还需要执行一下 sysctl -p 命令,重新加载一下 sysctl.conf 配置文件。

解决完上述两个问题,再次重启 Elasticsearch,发现上述两个问题都木有了,且启动成功~

4. 访问 Elasticsearch

打开另外一个窗口,请求 Elasticsearch:

[root@153-215 ~]# curl localhost:9200
{
  "name" : "_xV7bTf",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "i3whIPX_Qx2zvaJVZKQY1g",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
复制代码

可以看到,Elasticsearch 返回了一个 json 对象,其中包含当前节点名称、集群名称、集群 uuid、版本信息、宣传语。

Elasticsearch 的基本认识就先写到这里,后续我们再一步步深入了解 Elasticsearch,使用 Elasticsearch。

转载于:https://juejin.im/post/5c6539f351882562e747f57e

相关文章:

  • vue 打包 以及跨域问题组织
  • 深入了解以太坊
  • Python之 Virtualenv简明教程
  • dva中组件的懒加载
  • 「澳洋主数据项目」主数据促企业变革
  • phpstudy中apache的默认根目录的配置
  • 面试总结之人工智能AI(Artificial Intelligence)/ 机器学习(Machine Learning)
  • ActiveMQ之Linux下安装
  • springboot读取配置文件属性
  • PAT A1017 优先队列
  • 后端_ThinkPHP5
  • 从程序员到架构师的最佳技术成长之路
  • Javascript 原型链
  • 交换综合实验一
  • Hanlp分词之CRF中文词法分析详解
  • Angular6错误 Service: No provider for Renderer2
  • Apache的基本使用
  • CSS实用技巧干货
  • HashMap ConcurrentHashMap
  • IDEA常用插件整理
  • js正则,这点儿就够用了
  • Mybatis初体验
  • Python中eval与exec的使用及区别
  • Ruby 2.x 源代码分析:扩展 概述
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SSH 免密登录
  • Vue.js源码(2):初探List Rendering
  • 彻底搞懂浏览器Event-loop
  • 每天一个设计模式之命令模式
  • 你不可错过的前端面试题(一)
  • 前端攻城师
  • 全栈开发——Linux
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一天一个设计模式之JS实现——适配器模式
  • 数据可视化之下发图实践
  • #android不同版本废弃api,新api。
  • #Ubuntu(修改root信息)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)Flask之app.route装饰器函数的参数
  • (九)信息融合方式简介
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (原創) 未来三学期想要修的课 (日記)
  • (转)大道至简,职场上做人做事做管理
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .apk文件,IIS不支持下载解决
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .java 9 找不到符号_java找不到符号
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .stream().map与.stream().flatMap的使用
  • @我的前任是个极品 微博分析