ElasticSearch(一)

ElasticSearch 基础知识点与安装部署

1.ES是什么

ElasticSearch,简称ES,是一个开源的、高扩展的、分布式全文搜索引擎,
是整个ElasticStack技术栈的核心,它可以近乎实时的存储、检索数据。
它具有非常优秀的扩展性,可以扩展到上百台服务器,处理PB级别的数据。
一句话总结:是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。

2.全文索引

Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。基于以上原因可以分析得出,在一些生产环境中,使用常规的搜索方式,性能是非常差
的:

  • 搜索的数据对象是大量的非结构化的文本数据。
  • 文件记录量达到数十万或数百万个甚至更多。
  • 支持大量基于交互式文本的查询。
  • 需求非常灵活的全文搜索查询。
  • 对高度相关的搜索结果但有特殊需求,但是没有可用的关系数据库可以满足。
  • 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。

为了解决结构化数据搜索和非结构化数据搜索性能问题,我们就需要专业,健壮,强大的全文搜索引擎,全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

3.Lucene

Lucene 是 Apache 软件基金会 Jakarta 项目组的一个子项目,提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在 Java 开发环境里 Lucene 是一个成熟的免费开源工具。就其本身而言,Lucene 是当前以及最近几年最受欢迎的免费 Java 信息检索程序库。但 Lucene 只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来进行应用。
目前市面上主流的两款搜索引擎软件:Elasticsearch 和 Solr,
这两款都是基于 Lucene 搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似。

4.ES和Solr

Elasticsearch 和 Solr 都是开源搜索引擎,那么我们在使用时该如何选择呢?

  • 根据Google搜索趋势结果表明,与 Solr 相比,Elasticsearch 具有很大的吸引力,但这并不
    意味着 Apache Solr 已经死亡。虽然有些人可能不这么认为,但 Solr 仍然是最受欢迎的搜索引擎之一,它拥有强大的社区和开源支持。
  • 与 Solr 相比,Elasticsearch 易于安装且非常轻巧,你可以在几分钟内安装并运行Elasticsearch。但是,如果 Elasticsearch 管理不当,这种易于部署和使用可能会成为一个问题。基于 JSON 的配置很简单,但如果要为文件中的每个配置指定注释,那么它不适合您。总的来说,如果你的应用使用的是JSON,那么 Elasticsearch 是一个更好的选择。否则,请使用 Solr,因为它的 schema.xml 和 solrconfig.xml 都有很好的文档记录。
  • Solr 拥有更大,更成熟的用户,开发者和贡献者社区。ES 虽拥有的规模较小但活跃的用户社区以及不断增长的贡献者社区。
  • Solr 更成熟,但 ES 增长迅速,更稳定。
  • Solr 是一个非常有据可查的产品,具有清晰的示例和 API 用例场景。 Elasticsearch 的文档组织良好,但它缺乏好的示例和清晰的配置说明。
  • Elasticsearch 在开源日志管理用例中占据主导地位,许多组织在 Elasticsearch 中索引它们的日志以使其可搜索。
特征Solr/SolrCloudElasticSearch
社区和开发者Apache软件基金和社区支持单一商业实体及员工
节点发现zookeeper,在大量项目中成熟且经过实战实测Zen内置与ES本身,需要专用的主节点才能进行分裂脑保护
碎片放置本质上是静态,需要手动工作来迁移分片,从Solr7开始Autoscaling API允许一些动态操作动态,可以根据集群状态按需一栋分片
高速缓存全局,每个段更改无效每段,更适合动态更改数据
分析引擎性能非常适合精确计算的静态数据结果的准确性取决于数据放置
全文搜索功能基于Lucene的语言分析,多建议,拼写检查,丰富的高亮显示支持基于Lucene的语言分析,单一建议API实现,高亮显示,重新计算
DevOps支持尚未完全,但即将到来非常好的API
非平面数据处理嵌套文档和父-子支持嵌套和对象类型的自然支持允许几乎无限的嵌套和父-子支持
查询DSLJSON(有限),XML(有限) 或URL参数JOSN
索引/收集领导控制领导者安置控制和领导者重新平衡甚至可以节点上的负载不可能
机器学习内置-在流聚合之上,专注于逻辑回归和学习排名贡献模块商业功能,专注于异常值以及时间顺序数据
5.ES应用案例
  • GitHub:2013年初,抛弃了Solr,采取ES来做PB级别的搜索,GitHub使用ES搜索20TB的数据,包括13亿文件和1300亿行代码。
  • 百度:目前广泛使用ES作为文本数据分析,采集百度所有服务器上的各类指标及用户自定义数据,通过各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括:云分析,网盟,预测,百度文库,直达号,钱包,风控等等)
  • 新浪:使用ES分析处理32亿条实时日志
  • 阿里:使用ES构建日志采集和分析体系
  • Stack Overflow:解决Bug问题的网站,全英文,编程人员交流的网站
6.ES安装部署

ES官网:https://www.elastic.co/cn
截止2022年3月27日,ES最新版本8.1.1。本文使用的版本为7.15.2

6.1 windows单点

windows版的ES安装非常简单,解压即安装完毕,解压后的ES的目录结构如下:
windows版ES目录

目录含义
bin可执行脚本目录
config配置目录
jdk内置JDK目录
lib类库
logs日志目录
modules模块目录
plugins插件目录

解压完成后进入bin目录,点击elasticsearch.bat即可启动ES服务
**注意:**9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的

Elasticsearch 是使用 java 开发的,且 7.8 版本的 ES 需要 JDK 版本 1.8 以上,默认安装包带有 jdk 环境,如果系统配置 JAVA_HOME,那么使用系统默认的 JDK,如果没有配置使用自带的 JDK,一般建议使用系统配置的 JDK。
ES默认JVM初始内存配置为4G,根据电脑/服务器配置自行修改config/jvm.options

-Xms1g
-Xmx1g

在这里插入图片描述

6.2 Linux单机

Linux单点服务与windows基本一直,进入bin目录,运行./elasticsearch脚本即可启动
注意:
因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要创建新用户,在 root 用户中创建新用户

useradd es #新增 es 用户
passwd es #为 es 用户设置密码
userdel -r es #如果错了,可以删除再加
chown -R es:es /opt/module/es #文件夹所有者

在这里插入图片描述

6.3 Linux集群

准备好ES包和es用户后
更改配置文件
修改/config/elasticsearch.yml 文件

# 加入如下配置
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-1
#ip 地址,每个节点的地址不能重复
network.host: hadoop102
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["hadoop102:9300","hadoop103:9300","hadoop104:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16

修改Linux:/etc/security/limits.conf

es soft nofile 65536
es hard nofile 65536

修改Linux:/etc/security/limits.d/20-nproc.conf,分发文件

# 在文件末尾中增加下面内容
es soft nofile 65536
es hard nofile 65536
* hard nproc 4096
# 注:* 带表 Linux 所有用户名称

修改Linux:/etc/sysctl.conf

vm.max_map_count=655360

重新加载:

sysctl -p

分别在不同节点服务器上启动ES

#启动
bin/elasticsearch
#后台启动
bin/elasticsearch -d

启动完成后,验证:
在这里插入图片描述
也可使用Google浏览器插件:ElasticSearch Head
标星号的node-1即为配置的主节点master
在这里插入图片描述
提问:当手动杀掉node-1ES进程,集群会怎样?全挂还是推举出新的主节点?
在这里插入图片描述
如图:当结束掉主节点的进程,集群会重新推选出新的主节点,此时变成node-3成为主节点,集群健康值已变成yellow。并且此时访问的是hadoop103。主节点hadoop102已访问不通。

6.4 知识关联:集群分发脚本

当服务是集群方式部署时,我们只需改动一个服务器的配置文件,再执行脚本分发,即可将改动的配置文件同步至所有集群内的服务器中:详细可见文章大数据笔记(四)-Hadoop集群脚本分发和群起

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=102; host<105; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子丶Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值