3. Spark 环境搭建:安装部署、配置、Shell 与 Web UI
在催收触达场景中,Spark 环境是数据清洗、特征加工与模型推理的计算底座。本章将围绕 Spark 的安装部署、核心配置、交互式 Shell 验证以及 Web UI 监控展开,确保你能够快速搭建一个可用于生产级催收数据处理的集群环境。
3.1 Spark 安装部署模式
Spark 支持多种部署模式,催收业务通常采用 YARN 模式 或 Standalone 模式。以下为三种主流模式的对比:
| 部署模式 | 适用场景 | 资源管理 | 催收推荐度 |
|---|---|---|---|
| Local 模式 | 开发测试、小数据量验证 | 单机多线程 | ★★☆☆☆ |
| Standalone 模式 | 独立集群、中小规模 | Spark 自带 Master/Worker | ★★★☆☆ |
| YARN 模式 | 生产环境、与 Hadoop 混部 | YARN ResourceManager | ★★★★★ |
催收建议: 如果公司已有 Hadoop 集群,优先选择 YARN 模式,便于与 Hive、HBase 等数据源共享资源;若为独立催收平台,Standalone 模式部署更轻量。
3.2 安装部署步骤(以 Standalone 模式为例)
以下步骤基于 Spark 3.4.x 版本,适用于 Linux 环境(CentOS 7 / Ubuntu 20.04)。
- 前置条件: 安装 JDK 1.8+,配置
JAVA_HOME环境变量。 - 下载解压: 从官网下载预编译包,解压至
/opt/spark。 - 配置环境变量: 在
/etc/profile或~/.bashrc中添加:
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
- 配置 slaves 文件: 编辑
$SPARK_HOME/conf/slaves,添加 Worker 节点主机名:
node01
node02
node03
- 启动集群: 在主节点执行:
start-all.sh
- 验证进程: 使用
jps命令检查 Master 和 Worker 进程是否正常启动。
关键检查点: 确保所有节点之间 SSH 免密登录已配置,否则 Worker 无法注册到 Master。
3.3 Spark 核心配置参数
催收数据处理通常涉及大量短任务(如每日催收名单生成)和少量长任务(如模型训练)。以下配置项直接影响任务执行效率:
| 配置项 | 默认值 | 催收场景推荐值 | 说明 |
|---|---|---|---|
spark.executor.memory |
1g | 4g-8g | 每个 Executor 可用内存,催收特征工程常需加载字典 |
spark.executor.cores |
1 | 2-4 | 并行度控制,避免过多线程导致 IO 争抢 |
spark.sql.shuffle.partitions |
200 | 50-100 | 催收表数据量通常为百万级,减少分区可降低调度开销 |
spark.serializer |
JavaSerializer | KryoSerializer | 减少网络传输开销,提升 Shuffle 性能 |
注意: 催收场景中
spark.sql.shuffle.partitions 不宜过大,否则会产生大量小文件,影响 HDFS 读取效率。建议根据每日催收数据量动态调整。
3.4 Spark Shell 使用
Spark Shell 是验证环境配置和快速原型开发的利器。以下为催收场景的典型使用示例:
# 启动 Spark Shell,指定资源
spark-shell --master spark://node01:7077 \
--executor-memory 4g \
--executor-cores 2
# 在 Shell 中执行催收数据读取
val df = spark.read.option("header","true")
.csv("hdfs:///data/collection/customer_20250301.csv")
df.printSchema()
df.select("customer_id","overdue_days","phone").show(5)
# 注册临时视图,方便 SQL 查询
df.createOrReplaceTempView("collection_today")
spark.sql("""
SELECT overdue_level, COUNT(*) AS cnt
FROM collection_today
GROUP BY overdue_level
""").show()
Shell 调试技巧: 使用
:history 查看历史命令,:paste 模式可粘贴多行代码。催收业务中常用 spark.sql 直接执行 Hive 风格查询,减少 Scala 代码量。
3.5 Spark Web UI 介绍
Spark Web UI 是监控作业运行状态的核心工具。默认端口为 4040,在 Standalone 模式下可通过 http://master-node:8080 访问集群概览。
以下为 Web UI 的关键页面及其在催收场景中的用途:
| 页面名称 | 访问路径 | 催收场景用途 |
|---|---|---|
| Jobs | /jobs | 查看催收任务整体执行进度,识别卡顿的 Action 操作 |
| Stages | /stages | 分析 Shuffle 阶段数据倾斜,如 overdue_days 分组聚合不均 |
| Storage | /storage | 检查缓存的数据集,如催收字典表是否成功持久化 |
| Executors | /executors | 监控各节点内存/GC 情况,发现 OOM 风险 |
| SQL | /SQL | 查看 Spark SQL 物理计划,优化催收查询语句 |
实战经验: 当催收任务运行缓慢时,优先查看 Stages 页面中的 Shuffle Read 和 Shuffle Write 指标。若某个 Stage 的 Shuffle Read 数据量远大于其他 Stage,说明存在数据倾斜,需考虑加盐或调整分区键。
3.6 环境验证清单
完成安装后,建议按以下清单逐项验证,确保催收任务可正常提交:
- 进程检查:
jps确认 Master、Worker 进程存在。 - Web UI 可达: 浏览器访问
http://master:8080,查看 Alive Workers 数量。 - Spark Shell 交互: 执行
spark-shell并运行sc.parallelize(1 to 100).sum验证计算。 - HDFS 连通性: 在 Shell 中读取 HDFS 文件,确认无权限或路径错误。
- SQL 执行: 创建临时视图并执行 GROUP BY 查询,验证 Shuffle 正常。
常见问题: 若 Web UI 无法显示 Executor 日志,检查
spark.eventLog.enabled 是否设置为 true,并配置 spark.eventLog.dir 指向 HDFS 路径。