| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> ElasticSearch 入门学习 -> 正文阅读 |
|
[大数据]ElasticSearch 入门学习 |
1.基本概念1.1 基本概念和原理ES是实时的分布式搜索分析引擎,内部用Lucene做索引与搜索。 1.1.2 分片(shard)分片:为了水平扩容,将数据分成不通小块到不通机器上。 副本:复制多个副本,放不通机器,增加系统可用性。并发读,分担集群压力。 主分片(primary shard)和副分片(replica shard):为了应对并发更新问题,将副本分为主从2部分。 写过程先写主分片,成功后再写副分片,恢复阶段以主分片为准。 ? 关系: 一个ES索引包含很多分片,一个分片是一个Lucene的索引,它本身是一个完整的搜索引擎,可以独立的执行建立索引和搜索任务。 Lucene索引又有很多分段组成,每个分段都是一个倒排索引。Es每次refresh(用户缓存写入os缓存)都会生成一个新的分段(segment) 1.1.3 动态更新索引倒排索引被写入文件之后就不再改变 好处:对文件的访问不需要加锁,读取索引可以被文件系统缓存。 更新: 新增内容写入到一个新的倒排索引中,查询的时候每个倒排索引都被轮流查询,查询完在对结果进行合并。 也就是每次内存缓冲被写入文件,都会产生一个新的Lucene段,每个段都是一个倒排索引。 更新删除等操作实际上是将数据标记为删除,记录到单独的位置,因此删除部分数据不会释放磁盘空间。 1.1.4 近实时搜索写操作: 现在内存中缓冲一段数据,再将这些数据写入磁盘,每次写入磁盘的这批数据被称为一个分段。 es每秒产生一个新分段,新分端先写入文件系统缓冲,但稍后再刷入磁盘。写入系统缓冲,就可以被读取了。很快。 translog事务日志: 由于刷磁盘不会立即执行,所以为了防止以外,丢失数据,ES进行操作都会记录事务日志。启动的时候,重放translog中所有最后一次提交后发生的变更操作。 1.1.5 段合并refresh: Es中,每秒清空一次写缓冲,将数据写入系统缓冲,这个过程叫做refresh,每次refresh都会创建一个新的Lucene段。 分段太多:会消耗文件句柄和内存,还需要遍历每个分段合并结果,分段越多搜索也就越慢, 合并: 通常选择大小相似的分端合并。合并去除标记删除的数据,合并结束后,删除旧分端。这个时候标记删除的数据才从磁盘删除。 es的refresh调用Lucene的flush, flush调用Lucene的commit refresh写入系统缓存,flush写入磁盘。 1.2 集群内部原理1.2.1 集群节点角色
1.2.2 集群健康状态
每个索引也有这三种状态。如:丢了一个副分片,该分片所属的索引和整个集群变为Yellow,其他索引为Green。 1.3 主要内部模块
2 集群启动流程? 选主-》发布元信息-》分片分配-》恢复 2.1 选举主节点若干节点正在启动,第一件事就是从已知的活跃机器列表中选择一个作为主节点。 ES选主算法基于Bully算法改进,Bully主要思路是对节点Id进行排序,取Id最大的座位Master。 ES有三个约定条件:
集群并不知道自己有多少节点,quorum值从配置中读取,我们需要设置配置项discovery.zen.minumum_master_nodes 2.2 选举集群元信息选举出的Master和集群元信息的新旧程度没有关系。因此第一个任务是选举元信息。让各个节点把各自存储的元信息发过来,根据版本号确定新的元信息,然后把这个信息广播下去。 选举包括2个级别:集群级和索引级。 为了集群的一致性,参与选举的元信息数量要过半。 在选举过程中,不接受新节点的加入请求。 集群元信息选举完毕后,Master发布首次集群状态,然后开始选举shard级元信息。 2.3 allocation 过程选举shard级元信息,构建内存路由表,是在allocation模块完成的。在初始阶段,所有shard都处于UNASSIGNED(未分配)状态。通过该过程决定哪个分片位于哪个节点,重构内容路由表。
allocation过程允许新节点加入。 2.4 index recovery主分片的recovery不会等其他副分片成功才开始recovery。副分片需要等主分片恢复完毕才开始。 原因:主:可能有些数据还没来得及刷盘。 副:与主分片数据不一致。
3.写流程ES写入单个文档被称为Index请求,批量写入被称为Bulk请求。使用相同的处理逻辑,请求被统一分装为BulkRequest。 在ES中,对文档的操作有下面几种类型:
3.1 Index/Bulk 基本流程
3.1.2 创建索引如果是创建索引,协调节点会把请求发送到Master, 3.1.3路由算法shard_num = hash(_routing) % num_primary_shards 默认情况下, _routing值就是文档id。 3.1.4 主分片节点流程
3. GET流程ES 的读取被分为GET和Search两种操作。 get必须指定 _index _type _id 。 search根据关键字搜索。 3.1 get基本流程搜索和读取文档都属于读操作,可以从主分片或者副分片中读取数据。 读取单个文档的流程:
写入返回成功,意味着主副分片都是可用的。 读取可能打到主或者副,如果副分片还没有同步数据,有可能返回不存在。 4. search 流程由于不知道文档位于哪个分片,因此索引的所有分片都要参与搜索,然后协调节点将结果合并,在根据文档ID获取文档内容。 有2中搜索类型:
4.1 Query阶段查询可以指定参数{from:90, size:10},表示从第91个开始的10个结果,用来确定优先队列的大小。
结果:协调节点根据关键字,维护了一个文档id和排序值的列表。 4.2 Fetch 阶段
5、写入速度优化
5.1 translog flush间隔调整默认的设置:每个请求都会flush translog。只有这样,写操作才是可靠的。 index.translog.durability:async 可以将策略改成异步,index.translog.sync_interval:120s 按照这个时间周期进行。 index.translog.flush_threshold_size:1025mb : 重启时回放translog,超过这个大小会导致refresh操作,产生新的分段默认为512MB。 5.2 索引刷新间隔默认情况下刷新建个为1s,每次刷新都会产生一个新的Lucene 的segment。 增大刷新间隔。index.refresh_interval:120s 5.3 段合并优化merge由Lucene控制,对I/O和内存占用比较高。 //线程数 //默认 Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors()/2)) //也就是如果有效进程数的一版大于4,就是4个。 index.merge.scheduler.max_therad_count //策略 index.merge.policy.* 如果只有一块硬盘,非SSD,最好把线程设为1,因为寻址的原因,会降低写入速度。 5.4 indexing bufferindexing buffer是在为doc建立索引时使用,当缓冲满会刷入磁盘,生成一个新的segment。每个分片上都有自己的indexing buffer. indices.memory.index_buffer_size:所有总的大小,分片上的大小需要除以分片数,默认为整个堆空间的10%。 5.5 使用bulk使用批量请求写数据。但是不要太大,最好不要超过几十M。 5.6 磁盘间的任务均衡如果有多块磁盘,ES分配shard时,可能会不均匀。
5.7 索引阶段1.自动生成文档id 手写会去查询是否存在,存在则更新。自动生成,不需要查询。 2.调整字段mappings,去除不需要的,设置不需要分词的,选择不通的分词器。 6、搜索速度优化6.1 选择好的硬盘6.2 预留足够的内存6.3 合并分段为不再更新的只读数据,合并为一个分段,提升查询速度。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:21:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |