ES简单学习

概念

集群

在同一个子网内,多个ES节点(master、data、client)组成的一个P2P系统。节点间的通讯和数据分配由ES自动管理。

节点

每一个运行的实例叫做节点。

索引

该索引是名词而不是动词,相当于MySQL里的database。如下图所示

分片与副本

ES自动将数据存储到多个主分片中,也就是说每个主分片保存着某索引的一部分数据。

副本分片是主分片的备份,拥有主分片的数据。一个主分片可以有多个副本。

建立索引的时候默认会建立5个主分片,每个主分片一个副本分片,一共10个分片。也可以在建立索引的时候手动设置主分片数量和副本分片数量。在索引建立完成后,就只能改变副本分片的数量。

ES禁止同一个分片的主分片和副本分片在同一个ES实例节点上。

master节点

在配置文件里配置节点为master节点。一个ES集群可以有多个master节点。master节点负责集群的变更。master节点不参与文档层面的变更和搜索,所以master节点并不会因为流量增长而成为瓶颈。

data节点

data节点持有数据和倒排索引。负责文档的搜索和存储。

client节点

node.master 和 node.data 都设置为false。该客户端节点扮演一个负载均衡的角色。将到来的请求路由到集群各个节点。

recovery

当集群中有节点加入或退出的时候,ES会自动重新分配分片。此代价较高。可以先将自动分片功能关闭,然后添加节点进入集群,手动给其节点分配分片,之后再打开自动分片功能。

自动发现机制

ES2.0之前采用的是ping机制,只要是在同一子网下网络可通且cluster.name相同,就将该节点加入集群。

ES2.0版本之后采用单播和组播的机制(默认单播):配置相同的cluster.name,然后设置discovery.zen.ping.unicast.hosts

ES的了解

功能特性

1.以Lucene搜索引擎库为底层架构

2.分布式搜索引擎,可水平扩展,比如添加节点的时候可以自动均衡数据

3.支持全文索引,搜索功能强大

4.交互数据采用josn模式,且ES提供了基于json的query DSL查询语言

缺点

1.不支持事务

2.读写有一定的延迟。写入的数据最快1s才能被检索到,这样做的原因是提高写入的吞吐量。这个刷新频率是可以手动调整的,一般情况下不建议手工调整。

3.ES没有任何内置的身份验证或授权系统。当然闭源的x-pack除外。

近实时的搜索

当文档写入的时候并不能直接检索出数据,默认需要1S的reflush才能看到。如果业务对实时性要求比较高,可以调用_refresh接口。

全文检索

对文章中的每个词建立一个索引,并指明该词在文章中的位置和数量。也就是说每个词元都是一个倒排索引。

当用户查询的时候,会根据建立的索引来进行查找。

ES没有事务,怎么解决并发冲突的问题呢?

1.悲观锁

  • 优点:方便,直接加锁,不需要额外的操作
  • 缺点:并发能力很低,同一时间只能有一条线程操作数据

2.乐观锁

  • 优点:并发能力高,不给数据加锁,大量线程并发操作
  • 缺点:麻烦,每次更新的时候都先要比对版本号,然后需要更新加载数据再修改再写入。
  • ES中是通过乐观锁解决并发冲突的,采用_version
  • _version :第一次创建document的时候,他的版本号为1,此后每次对该document进行update、delete都会对这个版本号自动加1 . 在删除一个document的时候,它不是立刻就物理删除的,它的一些版本号数据还是保留的:先删除再创建其实是再删除的基础上再加1.

ES的写逻辑

索引的写入:

索引的创建和删除都是在master节点上进行的。如果写入的请求发到了非master节点,那么该节点会将请求转发至master节点,master节点会更改路由和元数据信息,并将对应的修改同步到其他master节点,需要一半以上的候选master节点返回成功才算写入成功。

文档的写入:

请求发到其中一个节点,做路由计算(hash(_id)/候选master +1 )确定请求发往哪一个主分片。

主分片处理请求的同时,执行translog的写入操作和将请求发往其副本分片,等其中一个副本分片返回成功之后,主分片返回客户端写入成功。

 

常用插件

elasticseach-head

head插件只需要安装到其中一台机器上。

功能:ES集群状态查看、索引数据查看、DSL实现增删改查操作

cerebo插件

功能:集群监控

kibana

除了支持各种数据的可视化之外,最重要的是:支持Dev Tool进行RESTFUL API增删改查操作。

但是在功能和可用性上比不上grafana

 

 

 

 

 

Elasticsearch 的机器学习节点用于执行高级分析任务,例如异常检测、预测建模和排序优化。这些功能可以通过内置的机器学习算法或通过集成外部训练的模型来实现。配置和使用机器学习节点涉及多个步骤,包括硬件规划、角色分配、安全设置以及模型部署。 ### 配置机器学习节点 1. **节点角色分配** Elasticsearch 支持多种节点角色,包括数据节点、主节点和机器学习节点。为了高效运行机器学习任务,建议将专用的机器学习节点与数据节点分离,以避免资源竞争。机器学习节点需要足够的 CPU、内存和磁盘空间来运行模型训练和推理任务。 ```yaml node.roles: [ml] ``` 上述配置表示该节点仅承担机器学习角色,不参与数据存储或集群管理任务[^3]。 2. **资源规划与性能优化** 机器学习任务通常需要较高的计算资源,特别是在模型训练阶段。建议为机器学习节点分配足够的内存和 CPU 资源,并启用交换分区限制以防止内存溢出问题。 ```yaml bootstrap.memory_lock: true node.attr.node_type: ml cluster.routing.allocation.node_attr.node_type: ml ``` 这些设置有助于确保 Elasticsearch 正确地将机器学习任务调度到具备相应资源的节点上[^4]。 3. **安全性配置** 为了保护机器学习节点及其运行的模型,需要配置适当的安全策略。Elasticsearch 提供了基于角色的访问控制(RBAC),可以限制用户对机器学习任务的访问权限。 ```yaml xpack.security.transport.ssl.enabled: true xpack.security.http.ssl.enabled: true ``` 启用 SSL/TLS 可以加密节点之间的通信,提高安全性。 ### 使用机器学习节点 1. **模型部署与管理** Elasticsearch 支持通过 Eland 库将外部训练的机器学习模型导入集群中。Eland 是一个 Python 客户端库,能够将 scikit-learn、XGBoost 或 PyTorch 模型转换为 Elasticsearch 可用的格式,并部署到机器学习节点上。 ```python import eland as ed from sklearn.ensemble import RandomForestRegressor # 训练一个简单的随机森林模型 model = RandomForestRegressor() model.fit(X_train, y_train) # 将模型上传到 Elasticsearch ed.ml.model.Model(model).save("rf_model") ``` 上述代码展示了如何使用 Eland 将训练好的模型保存为 Elasticsearch 可识别的格式,并上传到集群中进行部署。 2. **运行机器学习任务** Elasticsearch 提供了多种内置的机器学习功能,例如异常检测(anomaly detection)和排序优化(learning to rank)。可以通过 Kibana 界面或 REST API 创建和管理这些任务。 ```json POST _ml/anomaly_detectors { "description": "Detect anomalies in web traffic", "analysis_config": { "bucket_span": "15m", "detectors": [ { "detector_description": "High request count", "function": "count", "over_field_name": "client_ip" } ] }, "data_description": { "time_field": "@timestamp" } } ``` 上述请求创建了一个用于检测网络流量异常的机器学习任务,该任务将在机器学习节点上运行[^2]。 3. **监控与调优** Elasticsearch 提供了丰富的监控工具,例如 Kibana 的 Machine Learning 监控面板,可以实时查看模型的运行状态和性能指标。管理员可以通过这些信息优化资源配置,确保机器学习任务的高效运行。 ### 总结 Elasticsearch 的机器学习节点为复杂的数据分析任务提供了强大的支持。通过合理配置节点角色、资源分配和安全策略,可以有效提升集群的分析能力和稳定性。同时,结合 Eland 等工具,可以轻松集成外部训练的模型,进一步扩展 Elasticsearch 的机器学习能力[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值