一、ElasticSearch概念
1、ElasticSearch是一个基于Lucene的搜索服务器。Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎。
注意:elasticsearch设计的理念就是分布式搜索引擎,底层实现还是基于Lucene的,核心思想是在多态机器上启动多个es进程实例,组成一个es集群。(elasticsearch简称es)。
二、ElasticSearch的关键词
1、索引:是在Elasticsearch中存储数据的地方,可以理解为MySQL中的一个数据库。
注意:和数据库中的索引概念不一样,区分好。
2、类型:类型是定义数据结构的,类似MySQL中的一张表。
3、文档:是最终的数据,类似表中的一行数据。
例如:比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。文档以json格式存储数据。
4、倒排索引又叫反向索引:将文章内容的关键字作为索引,对应文章内容的对应段落。但是,这样会导致索引爆炸性增长,可以对其进行压缩简化。
(1)压缩具体操作如下:通过对文章内容进行分词,建立内容关键词索引(即把分词之后的文章内容作为Key,文章的标题作为Value),这样就可以通过文章内容找到对应文章。
例如:
5、像百度、谷歌等这些搜索引擎的原理的核心就是建立反向索引。只不过流程稍微复杂点,包括网页爬取、停顿词过滤等。主要包括:爬取内容、进行分词和建立反向索引。
(1)停顿词过滤就是指没有意义的词不建立反向索引。例如:的,而等词。
实例:
三、Elasticsearch分布式原理
1、Elasticsearch 也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用。
注意:只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。
2、HDFS:Hadoop Distributed File System的简称,即 hadoop分布式文件系统,其最主要的作用是作为 Hadoop 生态中各系统的存储服务。HDFS 架构原理HDFS采用master/slave架构(即主从设备模式,又称为主仆设备模式)。一个HDFS集群包含一个单独的NameNode和多个DataNode。Namenode管理文件系统的元数据,而Datanode存储了实际的数据。
四、Elasticsearch的应用
1、很多公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。
2、日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。
五、HDFS(Hadoop分布式文件系统)
1、HDFS 架构原理HDFS采用master/slave架构(即主从设备模式,又称为主仆设备模式)。一个HDFS集群包含一个单独的NameNode和多个DataNode。Namenode管理文件系统的元数据,而Datanode存储了实际的数据。
2、一个HDFS集群包含一个单独的Master节点和多个Slave节点服务器,这里的一个单独的Master节点的含义是HDFS系统中只存在一个逻辑上的Master组件。一个逻辑的Master节点可以包括两台物理主机,即两台Master服务器、多台Slave服务器。一台Master服务器组成单NameNode集群,两台Master服务器组成双NameNode集群,并且同时被多个客户端访问。
3、NameNode作为master服务,它负责管理文件系统的命名空间和客户端对文件的访问。NameNode会保存文件系统的具体信息,包括文件信息、文件被分割成具体block块的信息、以及每一个block块归属的DataNode的信息。
注意:Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
注意:NameNode负责管理block块的复制,它周期性地接收集群中所有DataNode的心跳数据包和Blockreport。心跳包表示DataNode正常工作,Blockreport描述了该DataNode上所有的block组成的列表。
4、DataNode负责管理节点上它们拥有的存储,它将存储划分为多个block块,管理block块信息,同时周期性的将其所有的block块信息发送给NameNode。
注意:DataNode作为slave服务,在集群中可以存在多个。通常每一个DataNode都对应于一个物理节点。
六、HDFS架构图
1、文件写入时:Client向NameNode发起文件写入的请求。NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。Client将文件划分为多个block块,并根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
2、当文件读取:Client向NameNode发起文件读取的请求。NameNode返回文件存储的block块信息、及其block块所在DataNode的信息。Client读取文件信息。HDFS 数据备份HDFS被设计成一个可以在大集群中、跨机器、可靠的存储海量数据的框架。它将所有文件存储成block块组成的序列,除了最后一个block块,所有的block块大小都是一样的。文件的所有block块都会因为容错而被复制。每个文件的block块大小和容错复制份数都是可配置的。容错复制份数可以在文件创建时配置,后期也可以修改。HDFS中的文件默认规则是write one(一次写、多次读)的,并且严格要求在任何时候只有一个writer。
3、备份数据的存放:备份数据的存放是HDFS可靠性和性能的关键。HDFS采用一种称为rack-aware(机架感知)的策略来决定备份数据的存放。通过一个称为Rack Awareness的过程,NameNode决定每个DataNode所属rack id。缺省情况下,一个block块会有三个备份:
(1)一个在NameNode指定的DataNode上;
(2)一个在指定DataNode非同一rack的DataNode上;
(3)一个在指定DataNode同一rack的DataNode上。
注意:这种策略综合考虑了同一rack失效、以及不同rack之间数据复制性能问题。
4、副本的选择:为了降低整体的带宽消耗和读取延时,HDFS会尽量读取最近的副本。如果在同一个rack上有一个副本,那么就读该副本。如果一个HDFS集群跨越多个数据中心,那么将首先尝试读本地数据中心的副本。安全模式:系统启动后先进入安全模式,此时系统中的内容不允许修改和删除,直到安全模式结束。安全模式主要是为了启动检查各个DataNode上数据块的安全性。
七、OSS:阿里的对象存储系统
1、OSS 是一个分布式的对象存储服务,提供的是一个 Key-Value 对形式的对象存储服务。用户可以根据 Object 的名称(Key)唯一的获取该Object的内容。虽然用户可以使用类似 test1/test.jpg 的名字,但是这并不表示用户的 Object 是保存在test1 目录下面的。对于 OSS 来说,test1/test.jpg 仅仅只是一个字符串,和a.jpg 这种并没有本质的区别。因此不同名称的 Object 之间的访问消耗的资源是类似的。
八、存储组件的适应场景
1、当前各类数据存储组件的设计是为满足不同场景下数据存储的需求,提供不同的数据模型抽象,以及面向在线和离线的不同的优化偏向。