如上示例,node.roles的值是一个数组,说明一个节点可以有多个角色。node.roles的可选项如下:
机智的你会发现,上述类型中并没有协调节点的类型选项,那怎么设置一个节点为协调节点那? 其实每个节点本身就是一个协调节点,如果你一定要指定一个节点为协调节点的话,可以这样设置:
分片
分片的概念其实很好理解,试想一下如果家里的书多到一个箱子放不下,是不是要找另外一个箱子来装,这些书好比就是海量的数据,一个机器放不下,就放到多个机器上来存储
一般来说,面对海量数据的时候,分布式系统可以通过增加机器数量来进行水平拓展。所以,系统需要将数据分成几个小块数据,并且尽量均匀的分配到各个机器上,然后通过某种策略找到对应数据所在的位置。分片是ES底层最基本的读写单元,分片是为了分割巨大的索引数据,让读写可以有多台机器来完成,从而提高系统的吞吐量
副本
为了保证数据可靠性,一般分布式系统都会对数据进行冗余备份,这个备份就是副本。**ES将数据副本分为主从2个类型:主分片+副分片。**在写入的过程中,先写入主分片,成功后再并发写副分片,在数据恢复时以主分片为主。多个副本除了可以保证数据可靠性,还有一个好处就是可以承担系统的读负载
可以在创建索引的时候,指定分片数量和副本数量:
数据层面上的基础概念
索引(相当于数据库表)
索引是一类相似文档的集合。ES将数据存储在一个或多个Index中,例如将用户数据存储到User Index中,而将订单数据存储到Order Index中。一个索引有一个或者多个分片,索引的数据会以某种方式分散到各个分片上去存储
如上图,索引有3个分片,主分片分别是P1、P2、P3,队友的副本分别是R1、R2、R3,仔细看主分片和其他副本分片不会同时分配在同一个节点上。这样是保证当一个节点的主分配下线时,其他节点上的从副本可以升级为主分配,保证数据的可靠性
Mapping (相当于建表语句)
Mapping定义了索引里面的文档到底有哪些字段 以及字段的类型,类似于数据库中表结构的定义。Mapping有2种作用:
- 定义索引中各个字段的名称和对应的类型
- 定义各个字段、倒排索引的相关设置,如使用什么分词器
需要注意的是,Mapping一旦定义完成后,已经定义的字段的类型是不能更改的
文档(相当于表记录)
我们往Es中写入的每一条数据都是一个文档,并且我们搜索也是以文档为单位的,所以文档是ES中的主要实体
我们在kibana或者postman中测试插入一条书本记录:
然后在查一下这条记录:
顺便解释一下返回的字段含义:
- _index:文档所属的索引名字,也就是books
- _type:文档所属的类型名称,现在ES7.x统一为_doc
- _id: 文档的唯一id。如果我们插入时不指定文档id,es会随机分配,这里有利于数据均匀分散到各个分片
- _version:文档的版本信息,并发读写时可以解决文档冲突
- _score:相关性算法,代表查询的匹配性
- _seq_no和_primary_term:es内部用来保证主分片和副本数据一致性的,后面的章节中我们会进行介绍**。当一个index每次选择主分配后都会有一个序号,记为_primary_term,它是递增的。在同一个index下,每次写入数据后都会有一个写入顺序号,记为_seq_no, 它也是递增的。_primary_term 和 _seq_no 在逻辑上构成了一个文档写入的唯一位置。**
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-Mb3ZbftO-1712542496958)]