1:UV和PV的区别
2:讲解应用分层
3:分析的日志源应该来自于哪个层面
4:分析日志,到底分析什么
5:使用什么分析,自研Python程序,ELK开源解决方案
5:推荐系统的算法
(一)
简要介绍ElasticSearch + Lucene(solr:数据搜索组件)
(构建搜索引擎)
概念说明
1:什么是
document:
具有K/V键值对的结构模型,一般可以称之为
document,例如:
JSON格式的文档,在Lucene里面是Field:Value,F/V键值对
2: 什么是索引:(使用倒排索引创建索引项)
这里的索引就是相当于MySQL中的表,有多个索引项(
document)组成,使得
document切分出来的word,能够被创建为索引项。那么用户通过输入对应的word,能够匹配到对应的索引项,就能取出索引项对应的值,这里的值一般是页面数据。索引必须使用小写字母表示
3:什么是shard(分片)
将一个index分割为多个shard,所有的primary shard组合成为一个index
(二)
ElasticSearch 详解
ElasticSearch是一个基于Lucene的搜索组件,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。且还是一个文档存储容器,
开源的 Elastic Stack下载路径:https://www.elastic.co/cn/products
ElasticSearch集群的components
1:节点:
一个 ElasticSearch
Instance 就是一个节点,实现数据存储,以及搜索数据,
2:集群:
ElasticSearch中可以定义多个集群,集群的名称必须唯一,一个节点只能属于一个集群,不能交叉
3:片区:
通过
shard机制,实现索引数据分布式存储,默认是五个shard,可以被用户指定,无法动态修改,也就是说将索引中的数据切分为多个shard,且分别存储在不同的节点上,实现数据分布式访问。且每一个shard都有一个primary
shard和一个replica
shard,实现数据冗余,且replica
shard可以被用户指定,可以动态修改
ElasticSearch 主要概念说明
1:索引:
相当于表,document的集合
2:类型:
相当于表结构,document的结构
3:文档:
文档使用json格式表示,是field的集合
4:映射:
实现切词分析,排序分析
ElasticSearch 集群的工作原理
各个节点之间以多播方式通信,且通过TCP的
9300端口通信,基于节点名称通信。集群中必须定义一个主节点,用于管理集群。主节点会决定哪个shard是primary,且查找replica shard。如果集群中添加一个新的节点,那么shard均衡将会被ElasticSearch集群自动处理。集群的状态包括:
green、
red、yellow。
下载安装
(Java的JDK必须是最新的,底层是Java语言写的,因此需要安装JDK java开发包)
##### 提示:Java 的JDK必须是符合当前版本需求的。这里安装2.x版本,先不使用5.x版本
参考文档:
https:/
/www.elastic.co/guide
/index.html
RPM包安装:
wget https:/
/download.elastic.co/elasticsearch
/release/org
/elasticsearch/distribution
/rpm/elasticsearch
/2.4.4/elasticsearch-
2.4.
4.rpm
https:/
/www.elastic.co/downloads
/past-releases/elasticsearch-
2-
0-
0
源码安装:
略
温馨提示:如果想用最新版本的Elasticsearch,那么需要先升级系统的JDK环境
先看看系统的JDK版本:yum list all | grep jdk
直接安装最新版本(如果最新JDK满足Elasticsearch对JDK的要求)
yum install -y java-
1.8.
0-openjdk.x86_64
yum install -y java-
1.8.
0-openjdk-devel.x86_64
yum install -y java-
1.8.
0-openjdk-headless.x86_64
配置文件介绍
config目录下有
2个配置文件:es的配置文件(elasticsearch.yml) 和日志配置文件(logging
.yml )
cluster
.name: elasticsearch
配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
node
.name:
"Franz Kafka"
节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node
.master: true
指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node
.data: true
指定该节点是否存储索引数据,默认为true。
index
.number_of_shards:
5
设置默认索引分片个数,默认为
5片。
index
.number_of_replicas:
1
设置默认索引副本个数,默认为
1个副本。
path
.conf: /path/to/conf
设置配置文件的存储路径,默认是es根目录下的config文件夹。
path
.data: /path/to/data
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
path
.data: /path/to/data1,/path/to/data2
path
.work: /path/to/work
设置临时文件的存储路径,默认是es根目录下的work文件夹。
path
.logs: /path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹
path
.plugins: /path/to/plugins
设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap
.mlockall: true
设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
network
.bind_host:
192.168.
0.1
设置绑定的ip地址,可以是ipv4或ipv6的,默认为
0.0.
0.0。
network
.publish_host:
192.168.
0.1
设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network
.host:
192.168.
0.1
这个参数是用来同时设置bind_host和publish_host上面两个参数。
transport
.tcp
.port:
9300
设置节点间交互的tcp端口,默认是
9300。
transport
.tcp
.compress: true
设置是否压缩tcp传输时的数据,默认为false,不压缩。
http
.port:
9200
设置对外服务的http端口,默认为
9200。
http
.max_content_length:
100mb
设置内容的最大容量,默认
100mb
http
.enabled: false
是否使用http协议对外提供服务,默认为true,开启。
gateway
.type: local
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。
gateway
.recover_after_nodes:
1
设置集群中N个节点启动时进行数据恢复,默认为
1。
gateway
.recover_after_time:
5m
设置初始化数据恢复进程的超时时间,默认是
5分钟。
gateway
.expected_nodes:
2
设置这个集群中节点的数量,默认为
2,一旦这N个节点启动,就会立即进行数据恢复。
cluster
.routing
.allocation
.node_initial_primaries_recoveries:
4
初始化数据恢复时,并发恢复线程的个数,默认为
4。
cluster
.routing
.allocation
.node_concurrent_recoveries:
2
添加删除节点或负载均衡时并发恢复线程的个数,默认为
4。
indices
.recovery
.max_size_per_sec:
0
设置数据恢复时限制的带宽,如入
100mb,默认为
0,即无限制。
indices
.recovery
.concurrent_streams:
5
设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为
5。
discovery
.zen
.minimum_master_nodes:
1
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为
1,对于大的集群来说,可以设置大一点的值(
2-
4)
discovery
.zen
.ping