219 lines
5.4 KiB
Markdown
219 lines
5.4 KiB
Markdown
# Spark 数据处理定时调度器
|
||
|
||
## 概述
|
||
|
||
该定时调度器功能为农业股票数据处理器提供了自动化的数据处理能力,能够每30分钟自动执行一次完整的数据处理流程。
|
||
|
||
## 功能特性
|
||
|
||
- ✅ **自动定时执行**: 每30分钟自动运行一次Spark数据处理任务
|
||
- ✅ **实时监控**: 提供调度器状态查询功能
|
||
- ✅ **手动触发**: 支持手动触发任务执行
|
||
- ✅ **异常处理**: 完善的错误处理和日志记录
|
||
- ✅ **资源管理**: 自动管理Spark会话的创建和销毁
|
||
- ✅ **交互式控制**: 支持运行时命令交互
|
||
|
||
## 快速开始
|
||
### spark-submit
|
||
``` shell
|
||
spark-submit \
|
||
--class com.agricultural.spark.StockDataProcessor \
|
||
--master local[*] \
|
||
--driver-java-options "-Denvironment=prod" \
|
||
target/spark-data-processor-1.0.0.jar \
|
||
scheduler
|
||
```
|
||
|
||
### 1. 启动定时调度器
|
||
|
||
#### Linux/Mac 系统
|
||
```bash
|
||
# 进入spark-processor目录
|
||
cd spark-processor
|
||
|
||
# 启动定时调度器
|
||
./start-scheduler.sh
|
||
```
|
||
|
||
#### Windows 系统
|
||
```batch
|
||
# 进入spark-processor目录
|
||
cd spark-processor
|
||
|
||
# 启动定时调度器
|
||
start-scheduler.bat
|
||
```
|
||
|
||
### 2. 使用命令行参数启动
|
||
```bash
|
||
# 编译项目
|
||
mvn clean package -DskipTests
|
||
|
||
# 直接运行调度器模式
|
||
java -jar target/spark-data-processor-1.0.0.jar scheduler
|
||
```
|
||
|
||
|
||
## 交互式命令
|
||
|
||
启动调度器后,可以使用以下命令进行交互:
|
||
|
||
| 命令 | 说明 |
|
||
|------|------|
|
||
| `status` | 查看调度器当前状态 |
|
||
| `trigger` | 手动触发一次数据处理任务 |
|
||
| `help` | 显示所有可用命令 |
|
||
| `stop` | 停止调度器并退出程序 |
|
||
|
||
## 运行模式
|
||
|
||
### 调度器模式
|
||
```bash
|
||
java -jar target/spark-data-processor-1.0.0.jar scheduler
|
||
```
|
||
- 每30分钟自动执行一次数据处理
|
||
- 支持交互式命令控制
|
||
- 适用于生产环境长期运行
|
||
|
||
### 批处理模式
|
||
```bash
|
||
java -jar target/spark-data-processor-1.0.0.jar batch
|
||
# 或
|
||
java -jar target/spark-data-processor-1.0.0.jar
|
||
```
|
||
- 执行一次完整的数据处理流程后退出
|
||
- 适用于手动执行或脚本调用
|
||
|
||
## 配置说明
|
||
|
||
### 调度时间间隔修改
|
||
|
||
如需修改执行间隔时间,可以在 `SparkJobScheduler.java` 中修改:
|
||
|
||
```java
|
||
// 创建触发器 - 修改执行间隔
|
||
Trigger trigger = TriggerBuilder.newTrigger()
|
||
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
|
||
.withIntervalInMinutes(30) // 修改这里的分钟数
|
||
.repeatForever())
|
||
.build();
|
||
```
|
||
|
||
### JVM 参数配置
|
||
|
||
在启动脚本中可以调整JVM参数:
|
||
|
||
```bash
|
||
# Linux/Mac (start-scheduler.sh)
|
||
JVM_OPTS="-Xmx4g -Xms2g -XX:+UseG1GC"
|
||
|
||
# Windows (start-scheduler.bat)
|
||
set JVM_OPTS=-Xmx4g -Xms2g -XX:+UseG1GC
|
||
```
|
||
|
||
## 日志管理
|
||
|
||
### 日志文件位置
|
||
- 应用日志: `logs/agricultural-stock-platform.log`
|
||
- Spark处理日志: 包含在应用日志中
|
||
|
||
### 日志级别
|
||
- INFO: 正常运行信息
|
||
- WARN: 警告信息(如数据库连接异常)
|
||
- ERROR: 错误信息
|
||
|
||
## 监控和故障排除
|
||
|
||
### 1. 检查调度器状态
|
||
```
|
||
status
|
||
```
|
||
|
||
### 2. 查看日志文件
|
||
```bash
|
||
# 实时查看日志
|
||
tail -f logs/agricultural-stock-platform.log
|
||
|
||
# 搜索错误日志
|
||
grep ERROR logs/agricultural-stock-platform.log
|
||
```
|
||
|
||
### 3. 常见问题
|
||
|
||
#### 问题1: 内存不足
|
||
**症状**: OutOfMemoryError 异常
|
||
**解决**: 增加JVM堆内存大小
|
||
```bash
|
||
JVM_OPTS="-Xmx8g -Xms4g" # 增加内存
|
||
```
|
||
|
||
#### 问题2: 数据库连接失败
|
||
**症状**: 无法连接到MySQL数据库
|
||
**解决**: 检查数据库配置和网络连接
|
||
```
|
||
# 检查配置文件
|
||
src/main/resources/application-prod.conf
|
||
```
|
||
|
||
#### 问题3: Spark任务执行失败
|
||
**症状**: Spark处理过程中出现异常
|
||
**解决**:
|
||
1. 检查数据源连接
|
||
2. 验证数据格式
|
||
3. 检查磁盘空间
|
||
|
||
## 性能优化
|
||
|
||
### 1. Spark配置优化
|
||
```java
|
||
// 在SparkConfig中调整参数
|
||
spark.sql.adaptive.enabled=true
|
||
spark.sql.adaptive.coalescePartitions.enabled=true
|
||
```
|
||
|
||
### 2. 资源配置
|
||
- 根据数据量调整执行器内存
|
||
- 合理设置并行度
|
||
- 优化分区策略
|
||
|
||
### 3. 调度频率
|
||
- 根据数据更新频率调整执行间隔
|
||
- 避免任务重叠执行
|
||
|
||
## 部署建议
|
||
|
||
### 生产环境
|
||
1. 使用系统服务管理调度器
|
||
2. 配置日志轮转
|
||
3. 设置监控报警
|
||
4. 定期备份配置文件
|
||
|
||
### 开发环境
|
||
1. 使用较小的内存配置
|
||
2. 增加日志详细程度
|
||
3. 缩短执行间隔进行测试
|
||
|
||
## 技术架构
|
||
|
||
```
|
||
定时调度器架构:
|
||
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
|
||
│ Quartz │ │ Spark │ │ MySQL │
|
||
│ Scheduler │───▶│ Processor │───▶│ Database │
|
||
│ │ │ │ │ │
|
||
└─────────────────┘ └──────────────┘ └─────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────┐ ┌──────────────┐
|
||
│ 用户交互接口 │ │ 日志系统 │
|
||
│ (命令行) │ │ │
|
||
└─────────────────┘ └──────────────┘
|
||
```
|
||
|
||
## 版本更新记录
|
||
|
||
### v1.0.0
|
||
- 初始版本
|
||
- 支持每30分钟定时执行
|
||
- 提供基本的交互式命令
|
||
- 集成Quartz调度框架 |