elk学习
# ELK第一天
## 课程内容回顾
1、sparkStreaming的基本介绍:实时的处理的模块
sparkCore ==> RDD ==> sparkContext
sparkSQL ==> df/ds ==> sparkSession
sparkStreaming ==> DStream ==> StreamingContext
2、SparkStreaming的原理与架构
每隔一段时间计算一次累计的数据,将每一段时间转换成为一个个的RDD运行在sparkCore上面
3、DStream的入门案例 接收socket的数据,实现单词计数的统计
4、sparkStreaming的数据源
1、文件数据源
2、自定义数据源 通过自定义receiver接收器,实现数据的接入 搞定
3、rdd的队列 用于测试使用
高级数据源
flume的数据源 知道
kafka数据源
0.8版本
Receiver DStream:数据消费的offset保存在zk当中,造成重复消费 at least once
DirectDstream: 数据消费的offset保存在了默认的topic里面,造成数据丢失 at most once
0.10版本 搞定
DirectDstream :配置使用我们手动提交offset,保证数据不会丢失也不会重复消费 exactly once
DStream的转换
DStream的容错
## 课程大纲
1、ELK的基本介绍
2、es的安装部署
3、es的索引管理
4、索引映射关系定义mappings
5、索引库的管理settings
6、分页解决方案
7、IK分词器
8、分片交互过程
9、使用javaAPI访问ES集群
## 1、ELK的基本介绍
ELK是一个集中式的日志处理系统,主要包含了三个框架
E:elasticsearch 分布式的搜索引擎,类似于solr
L: logstash 日志数据采集的框架 , 类似于flume
K:kibana 数据报表展示的工具 类似于echarts
## 2、es的基本概述
es是Elasticsearch的简称,一款基于lucene的全文检索的框架,天生的支持分布式,隐藏了lucene的复杂性,变得简单易用
lucene是Doug Cutting
nutch 全网爬虫的框架 爬回来的数据太多怎么办?? 一个是检索的问题 一个是存储的问题
lucene 解决检索的问题
hadoop 分布式文件存储
es类似于数据库
index索引库 ==》 types ==》 fields 字段
mysql 数据库DB ==> table 表 ==》 columns 字段
mappings:定义我们的索引库里面的字段的属性,包括分词,存储,索引
document:文档对象,我们的数据都是封装在document里面了
settings:定义了我们索引库的分片数以及索引库的副本数
集群:cluster,所有的node组织起来就变成了一个cluster
节点Node:每一台es服务器称之为一个node
## 3、ES的安装部署
1:es不能使用root用户来启动
es安装参见文档,一步步来,不要调过
2、elasticsearch-head的插件的安装,es的管理工具,任意一台机器安装都行
这个插件专门用于管理 es的集群,查看es当中的数据等等
nodejs是js的运行环境,通过nodejs的平台,可以实现js操作后台的服务
zookeeper hadoop hive flume sqoop azkaban spark solr es
大数据运维
3、kibana的安装,
kibana是一个可视化的软件,可以用这个软件来实现es索引库的增删改查
创建索引库
```
curl -XPUT http://node01:9200/blog01/?pretty
```
插入文档信息
curl是linux当中的一个命令,主要用于发送请求
```
curl -XPUT http://node01:9200/blog01/article/1?pretty -d '{"id": "1", "title": "What is lucene"}'
```
通过系统id来查询数据
```
curl -XGET http://node01:9200/blog01/article/1?pretty
```
查询数据
```
curl -XGET "http://node01:9200/blog01/article/_search?q=title:elasticsearch"
返回值
{
"took": 84,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "blog01",
"_type": "article",
"_id": "1",
"_score": 0.2876821,
"_source": {
"id": "1",
"title": " What is elasticsearch"
}
}
]
}
}
```
## 4、es当中的mappings
mappings是es当中的映射,可以提前定义好我们的字段要不要分词,要不要索引,要不要存储
mappings当中的字段类型一旦确定了,就不能更改了
name :text ==> int
通过mappings可以定义我们字段的类型,例如age int "zhangsan"
提前定义好mappings可以约束我们的数据的类型
注意:如果我们没有提前定义好我们的索引库里面字段的类型,那么就会根据我们第一次产生的类型来自动推断
es当中查询出来的数据,都是封装到一个javaBean里面去,
Long Double
60 60 60.0
66.666 66 66.666
查看索引库字段类型
```
GET /document/article/_mapping
{
"document": {
"mappings": {
"article": {
"properties": {
"author": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"titleScore": {
"type": "long"
}
}
}
}
}
}
```
我们可以在创建索引库的时候,提前定义好我们的索引库的表字段类型
```
PUT document
{
"mappings": {
"article" : {
"properties":
{
"title" : {"type": "text"} ,
"author" : {"type": "text"} ,
"titleScore" : {"type": "double"}
}
}
}
}
```
继续添加字段
```
POST /school/_mapping/logs
{
"properties": {"number" : {"type": "text"}}
}
```
## 5、es当中的settings
settings主要在es当中用于设置索引库的分片数以及副本数
## 6、es当中的分页操作
scroll深分页:通过缓存来实现我们的数据的查询,查询出来的数据,我们可以缓存到内存当中去,下次查询的时候,直接从内存当中获取
缺陷:内存可能不够用
通过scroll的方式,我们可以先查询缓存当中的数据,如果缓存当中没有数据,再去通过form+size的方式进行查询,查询出来的数据可以放到缓存
浅分页:通过form + size实现浅分页
数据量太大的时候,效率显著降低 查询100页的数据,查询出前100页的所有的数据,然后过滤掉前99页的数据
如果每页数据10条,查询第1000页,需要查询出来的数据总量是 1000 * 10 = 10000条
int pageNum = 2
int pageSize = 5
from = (2 -1)* 5
```
GET /us/_search?pretty
{
"from" : 0 , "size" : 5
}
GET /us/_search?pretty
{
"from" : 5 , "size" : 5
}
```
## 7、es当中的分词器 IK 分词器
夏天太热,能穿多少穿多少
冬天太冷,能穿多少穿多少
人要是行,干一行行一行,一行行行行行
热词的更新
小脑斧
GET _analyze?pretty
{
"analyzer": "ik_max_word",
"text": "小脑斧,老铁,老弟,你怎么肥事"
}
## 8、es当中的分片交互过程
## 9、es当中的javaAPI操作
参见代码操作
## 课程总结
1:elk的基本介绍
2:es当中的核心概念
index:索引库
types:类似于表的概念
field:字段
mappings:定义字段的属性,分词,存储,索引
setting:定义索引库副本数以及分片数
node:es服务器的节点
cluster:es服务器集群
3:es的安装部署 搞定
一定要记得不要使用root用户来安装
安装es-head插件 一定要记得用编译好的插件,不要在线安装
kibana 用于操作es集群,实现数据的增删改查
4:使用kibana 通过curl的方式实现es当中的索引的管理 增删改查 知道
5:mappings以及setting的设置 知道
6:分页解决方案 知道
scroll深分页
from + size 浅分页
7:分词器 搞定
配置远程的分词方案
8:分片交互过程 了解
9:javaAPI操作es集群 搞定