文章目录
- day02_ElasticSearch基础和SeaTunnel
- 一、ElasticSearch基本介绍(了解)
-
- 1、Elasticsearch应用方向
- 2、ElasticSearch特点
- 3、发展历史
- 二、安装ElasticSearch(操作)
-
- 1、安装ElasticSearch
- 2、插件安装
-
- 2.1 浏览器安装可视化插件
- 2.2 PyCharm安装Elasticsearch插件
- 三、ElasticSearch的使用(熟悉)
-
- 1、RESTful API
- 2、猎聘网职位搜索案例
- 3、ElasticSearch SQL
- 4、PySpark操作ElasticSearch数据(掌握)
-
- 4.1 PySpark读取ES数据
- 4.2 PySpark数据写入ES
- 4.3 读取和写入完整代码
- 四、SeaTunnel介绍(了解)
-
- 1、概述
- 2、SeaTunnel特点
- 3、流程
- 4、Connector介绍
- 五、SeaTunnel使用(熟悉)
-
- 1、基本概念
- 2、官方示例
- 3、MySQL数据到Hive
- 六、SeaTunnel Web使用(了解)
-
- 1、启动SeaTunnel Web
- 2、SeaTunnel Web使用
-
- 2.1 **创建数据源**
- 2.2 **创建测试数据**
- 2.3 **创建同步任务**
- 2.4 **运行任务**
- Spark集成ES.py
- 七、课后作业
-
- 1、ElasticSearch的Restful API的使用,实现数据、索引的增删改查操作
- 2、使用SeaTunnel实现将数据从Hive导出到MySQL、MySQL数据导入到ElasticSearch
day02_ElasticSearch基础和SeaTunnel
一、ElasticSearch基本介绍(了解)
Elaticsearch,简称为es, es是一个基于apache开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
1. 简单来说
Elasticsearch
是一个开源的分布式搜索引擎,专门用于快速存储、搜索和分析大量数据,就像是一个“超级智能的图书馆管理员”,能帮你从海量数据中迅速找到需要的信息。2. 具体
Elasticsearch
是基于Apache Lucene
构建的,支持全文检索、结构化搜索和数据分析。它的核心特点包括:
- 分布式架构:数据可以分布在多个节点上,支持水平扩展,处理
PB级数据
。- 实时性:数据几乎可以实时被检索和分析。
- 灵活性:支持多种数据类型,如文本、数字、地理位置等。
- 强大的查询能力:支持复杂的查询语句,包括全文搜索、模糊搜索、聚合分析等。
3. 实际生产场景
- 在电商平台中,用于实现商品的
全文搜索
和推荐功能
,帮助用户快速找到所需商品。- 在日志分析中,用于收集和检索服务器日志,帮助运维人员快速定位问题。
- 在大数据分析中,用于实时分析用户行为数据,生成
可视化报表
。4. 总之
Elasticsearch
是一个功能强大的分布式搜索引擎,适用于需要快速检索和分析海量数据的场景,是大数据领域
和搜索引擎技术
中的重要工具。
1、Elasticsearch应用方向
-
1- 信息检索
-
企业内部系统搜索
-
数据分析引擎
- Elasticsearch 聚合可以对数十亿行日志数据进行聚合分析,探索数据的趋势和规律
2、ElasticSearch特点
- 1- 海量数据存储和处理
大型分布式集群(数百台规模服务器)
处理PB级数据
小公司也可以进行单机部署
- 2- 开箱即用
简单易用, 操作非常简单
快速部署生产环境
- 3- 作为传统数据库的补充
传统关系型数据库不擅长全文检索(MySQL自带的全文索引,与ES性能差距非常大)
传统关系型数据库无法支持搜索排名、海量数据存储、分析等功能
Elasticsearch可以作为传统关系数据库的补充,提供RDBMS无法提供的功能
3、发展历史
- 2004年,发布第一个版本名为Compass的搜索引擎,创建搜索引擎的目的主要是为了搜索食谱
- 2010年,发布第二个版本更名为Elasticsearch,基于Apache Lucene开发并开源
- 2012年,创办Elasticsearch公司
- 2015年,Elasticsearch公司更名为Elastic,是专门从事与Elasticsearch相关的商业服务,并衍生了Logstash和Kibana两个项目,填补了在数据采集、数据可视化的空白。于是,ELK就诞生了
- 2015年,Elastic公司将开源项目Packetbeat整合到Elasticsearch技术栈中,并更名为Beats,它专门用于数据采集的轻量级组件,可以将网络日志、度量、审计等各种数据作为不同的源头发送到Logstash或者Elasticsearch
- ELK不再包括Elastic公司所有的开源项目,ELK开始更名为Elastic Stack,将来还有更多的软件加入其中,包括数据采集、清洗、传输、存储、检索、分析、可视化等
- 2018年,Elastic公司在纽交所挂牌上市
二、安装ElasticSearch(操作)
1、安装ElasticSearch
项目提供的服务器已经完成安装工作, 如需手动安装可参考课件安装篇, 需要注意的是ES不支持root用户安装, 必须使用普通用户
问题: 解决单节点告警问题
由于当前ES为单节点, 在构建一个新的索引库的时候, 依然会产生多个分片和副本的情况(默认), 但是只有一个节点, 多余的副本就无法放置, ES会变为告警状态(黄色)。修改副本数量为1即可
curl -XPUT http://192.168.88.166:9200/_settings?pretty -d '{ "index": { "number_of_replicas": 0 } }' -H "Content-Type: application/json"
2、插件安装
2.1 浏览器安装可视化插件
启动ElasticSearh服务
1- 切换用户
su es
2- 进入目录
cd /home/es/elasticsearch-7.10.2/bin
3- 启动
elasticsearch -d
4- 验证
jps
在地址位置: 输入 http://up01:9200 点击连接即可看到以下内容
2.2 PyCharm安装Elasticsearch插件
-
进入配置页面
-
安装插件:搜索 ElasticSearch Query。千万不要安装错
-
配置连接
三、ElasticSearch的使用(熟悉)
1、RESTful API
1. 简单来说
RESTful API
是一种基于HTTP
协议的网络接口设计风格,就像是一个“标准化的对话规则”,让客户端和服务器能够高效、清晰地交换数据。2. 具体
RESTful API
是遵循REST
(Representational State Transfer,表述性状态转移)原则设计的接口。它的核心特点包括:
- 资源导向:将数据或服务抽象为
资源
,每个资源通过唯一的URL
标识。- HTTP 方法:使用标准的
HTTP
方法(如GET
、POST
、PUT
、DELETE
)来操作资源。- 无状态性:每次请求都包含所有必要信息,服务器不会保存客户端的状态。
- 统一接口:接口设计简洁一致,易于理解和使用。
3. 实际生产场景
- 在Web 应用中,用于前后端分离架构,前端通过
RESTful API
与后端交互数据。- 在移动应用中,用于客户端与服务器之间的数据通信,如获取用户信息、提交订单等。
- 在微服务架构中,用于不同服务之间的通信,实现服务解耦和灵活扩展。
4. 总之
RESTful API
是一种简洁、高效的接口设计风格,广泛应用于现代Web
和移动开发中,是构建分布式系统和前后端分离应用的重要工具。
先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。
简单的说:RESTful是一种架构的规范与约束、原则,就是用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源的操作
如:http://localhost:9200/test/a.txt表示资源,Get或Post对资源进行操作,当采用RestFul API向ES发送数据的时候,ES返回响应的是数据格式Json,包括在请求体中发送Json格式的字符串发给服务器,所以ES的数据发送和返回都是Json数据格式的。
例如 ES的发送请求:
put /test-index/_doc/1
{
"name": "张三",
"age": 18
}
RESTful API 要求前端以一种预定义的语法格式发送请求,那么服务端就只需要定义一个统一的响应接口
2、猎聘网职位搜索案例
Elasticsearch与数据库的类比:
关系型数据库(比如Mysql) | 非关系型数据库(Elasticsearch) |
---|---|
数据库 Database | |
表 Table | 索引 Index |
数据行 Row | 文档 Document |
数据列 Column | 字段 Field |
约束 Schema | 映射 Mapping |
ES的字段数据类型:
- es的类型
- 基本数据类型
- text | keywords => string
- text是可以进行分词字符串类型
- keywords不能进行分词字符串类型
- long
- float
- date
- binary
- text | keywords => string
- 地址位置相关的类型
- geo_point、geo_shape
- 分词器
- 分词器是针对一段文本,进行词的拆分方式
- 分词类型
- standard analyse : 英文分词器,标准分词器
- IK analyse:一种中文分词器
- JieBa:另外一种分词器
- 基本数据类型
- 完整数据类型:
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping-types.html
3、ElasticSearch SQL
ES SQL特点
- 本地集成
- Elasticsearch SQL是专门为Elasticsearch构建的。每个SQL查询都根据底层存储对相关节点有效执行。
- 没有额外的要求
- 不依赖其他的硬件、进程、运行时库,Elasticsearch SQL可以直接运行在Elasticsearch集群上
- 轻量且高效
- 像SQL那样简洁、高效地完成查询
ES-SQL语法
- 目前支持单表查询
SELECT select_expr [, ...]
[ FROM table_name ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]
[ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ]
- es cli的官方指导文档:
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-syntax-show-tables.html
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
- https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-cli.html
- es sql简单操作
- es-sql不适合做表关联查询
- es-sql开源版支持的功能有限
- 官方网站:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/sql-syntax-select.html
- es只适合单表,大宽表存储,类似于hbase、mongo
上面错误的原因: ES目前不支持多表查询。
4、PySpark操作ElasticSearch数据(掌握)
集成官网链接:https://www.elastic.co/guide/en/elasticsearch/hadoop/7.10/spark.html
集成相关参数介绍:https://www.elastic.co/guide/en/elasticsearch/hadoop/7.10/configuration.html
4.1 PySpark读取ES数据
核心参数及其配置:
1- format: org.elasticsearch.spark.sql或者es
2- options
2.1- es.nodes: ES集群连接信息,例如up01:9200
2.2- es.resource: 操作的索引名称,例如my_index
2.3- es.read.field.exclude: 不读那些字段 (适用于: 不读较少字段的情况),例如'gender,job'
2.4- es.read.field.include: 只读那些字段 (适用于: 读较少字段的情况),例如'id, birthday'
2.5- es.mapping.date.rich: 在读取ES中date类型下的数据时候, 读取到Spark后, Spark会转换为timestamp类型, 但是实际需要还是日期的字符串类型, 此时将此参数设置false, 不允许其自动转换类型, 强制将date类型转换为字符串
3- load()
4.2 PySpark数据写入ES
核心参数及其配置:
1- format: org.elasticsearch.spark.sql或者es
2- mode
2.1- append: 追加,当数据已经存在,往已存在的数据后面追加内容
2.2- overwrite: 覆盖,当数据已经存在,先将旧数据全部清空,再添加新数据
2.3- ignore