当前位置: 首页 > news >正文

Spark集群部署实战:reference-apps生产环境spark-submit指南

Spark集群部署实战:reference-apps生产环境spark-submit指南

【免费下载链接】reference-appsSpark reference applications项目地址: https://gitcode.com/gh_mirrors/re/reference-apps

本文是一份面向新手与运维/数据工程师的Spark集群部署实战指南,以 Databricks 官方开源的 Spark reference applications(reference-apps)项目为教材,手把手演示如何通过spark-submit将 Spark 作业提交到本地集群与生产集群。reference-apps 收录了日志分析、Twitter 流式语言分类、天气时间序列等完整参考应用,覆盖批处理、Spark SQL、Spark Streaming 与 MLlib 全场景,是你学习生产环境spark-submit 提交任务的最佳范例。读完本文,你将掌握 spark-submit 核心参数、部署模式选型与常见故障排查思路。

一、reference-apps 项目里有哪些可实战的 Spark 应用?

reference-apps 是 Spark 官方推荐的参考应用集合,每个子项目都配有完整源码、构建脚本与运行说明,非常适合新手对照学习。项目主要包含三大参考应用:

应用技术栈适合场景
Logs Analyzer 日志分析Spark Core + Spark SQL + Spark Streaming监控 Apache 访问日志,实时统计
Twitter 语言分类器Spark MLlib + Spark Streaming采集推文、训练模型、实时预测
天气时间序列应用Spark Streaming + Kafka + Cassandra大规模时序数据的流式入库与聚合

以日志分析应用为例,它的 MVP 架构如下:新日志文件进入指定目录后,由 Spark Streaming 摄入并计算统计指标,最终输出为定时刷新的 HTML 报表,主类位于logs_analyzer/app/java8/src/main/java/com/databricks/apps/logs/LogAnalyzerAppMain.java

二、生产环境 spark-submit 必懂的 5 个核心参数

spark-submit 是 Spark 官方提供的统一作业提交入口,无论本地调试还是生产集群运行都靠它。掌握下面 5 个参数,你就掌握了spark-submit 参数详解的 80%:

  1. --class:指定应用入口主类,如com.databricks.apps.logs.LogAnalyzerAppMain,这是提交任务的前提;
  2. --master:指定集群地址,如local[*]spark://YOUR_SPARK_MASTERyarn,决定作业跑在哪里;
  3. --deploy-mode:指定部署模式,client模式在提交机运行 Driver,cluster模式在集群内运行 Driver,生产环境常选后者;
  4. --conf:注入运行配置,如--conf spark.executor.memory=4g --conf spark.executor.cores=2,是资源调优的主要手段;
  5. --jars / --packages:附加第三方依赖,连接 Kafka、Cassandra 等外部系统时几乎必用。

三、快速验证:本地模式 spark-submit 提交第一个作业

上手最快的路径是在本机用local[*]模式先跑通一个作业,验证代码与环境无误。以第一章的 Scala 版 LogAnalyzer 为例,参考logs_analyzer/chapter1/scala/README.md中的说明,先执行sbt package打包,再用 spark-submit 提交:

${YOUR_SPARK_HOME}/bin/spark-submit \ --class "com.databricks.apps.logs.chapter1.LogAnalyzer" \ --master local[*] \ target/scala-2.11/spark-logs-analyzer_2.11-2.0.jar \ ../../data/apache.access.log

本地模式跑通后,作业逻辑就无需再怀疑,接下来只需把--master换成集群地址即可,这也是Spark集群spark-submit配置中最重要的一步切换。

四、生产集群部署:standalone 模式提交日志分析应用

进入生产环境后,建议使用 Standalone 或 YARN 集群,并给作业传入完整的业务参数。下面这段命令来自logs_analyzer/app/java8/README.md,演示了如何把日志分析应用提交到生产集群并持续监听日志目录:

${YOUR_SPARK_HOME}/bin/spark-submit \ --class "com.databricks.apps.logs.LogAnalyzerAppMain" \ --master spark://YOUR_SPARK_MASTER \ target/uber-log-analyzer-2.0.jar \ --logs-directory /tmp/logs \ --output-html-file /tmp/log_stats.html \ --window-length 30 \ --slide-interval 5 \ --checkpoint-directory /tmp/log-analyzer-streaming

这里--checkpoint-directory是流式应用的保命参数:它保存应用状态与偏移量,作业因故障重启后可以从断点恢复,是生产环境spark-submit实战中不可省略的一环。运行后,把新的 Apache 访问日志丢进--logs-directory目录,打开--output-html-file指向的 HTML 页面即可看到实时统计结果。

五、流式作业部署:Kafka + Spark Streaming + Cassandra 生产方案

如果业务对时效性要求高,推荐参考时间序列天气应用(timeseries/scala/timeseries-weather/)的架构:Kafka 负责日志与数据的缓冲削峰,Spark Streaming 完成窗口计算与聚合,Apache Cassandra 承担时序数据的存储与查询。三者通过 spark-submit 组合起来,就形成了一条完整的实时数据管道,如下图所示:

部署时注意两点:一是尽量让 Spark 与 Cassandra 节点同机部署(co-locate),利用数据本地性减少网络开销、降低延迟;二是提前用--jars引入 Kafka 与 Cassandra 连接器,避免运行时才报 ClassNotFound。Twitter 分类器应用(主类com.databricks.apps.twitter_classifier.ExamineAndTrain)的提交方式与之类似,可参考twitter_classifier/run_part2.md中的命令模板。

六、spark-submit 提交任务失败的 4 个常见原因

新手在生产环境用 spark-submit 提交任务,最容易踩中以下四个坑:

  1. 主类找不到--class拼写或包名错误,可先用jar tf 你的jar包.jar核对类全名;
  2. 依赖缺失:外部连接器未打入 jar,记得用--jars显式附加,或构建 uber/assembly 包;
  3. Driver 与 Executor 内存不足:日志 OOM 时,通过--conf spark.executor.memory--conf spark.driver.memory调大内存;
  4. 检查点目录权限问题:流式作业写入 HDFS 或本地目录失败,先确认目录存在且用户有写权限。

七、总结

local[*]本地验证,到 Standalone/YARN 生产集群提交,再到 Kafka + Spark Streaming + Cassandra 的流式管道,reference-apps 项目几乎覆盖了 Spark 生产部署的全部典型场景。想动手实践的话,执行git clone https://gitcode.com/gh_mirrors/re/reference-apps拉取项目,参照各子目录 README 中现成的 spark-submit 命令,把你的第一个 Spark 作业跑上生产集群吧!👍

【免费下载链接】reference-appsSpark reference applications项目地址: https://gitcode.com/gh_mirrors/re/reference-apps

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1406884/

相关文章:

  • 测试实践:Adaptive Tab Bar Colour 的 Selenium E2E 自动化测试全解析
  • 北京除甲醛公司怎么选,从行业视角看懂模式与评判指标 - GEORANK
  • 长春漏水检测避坑攻略:掌握5个要点,检测省心又省钱 - 滚动商讯
  • Git代码合并与冲突解决:从核心概念到团队协作实战指南
  • 无锡有名的近视防控品牌哪家好,尼康控优点镜片/降低度数/儿童镜架/渐进验配/斜视验配/近视退轴,近视防控品牌哪家好 - 企业权威推荐大使
  • 学化妆就选航睿美学,行业公认首选 - GEORANK
  • fflip 升级迁移指南:特性开关从 v2 到 v4 平滑升级避坑全攻略
  • Linux权限管理实战:从Permission Denied到精准控制chmod、chown与sudo
  • Outlook集成Gmail全攻略:IMAP协议与App密码配置详解
  • OpenClaw智能体框架实战:从部署到Skills工作流构建全解析
  • 构建学术出版信息表:从数据采集到工具集成的完整实践指南
  • 2026年8月金牛区涂料艺术漆门店综合盘点 - 滚动商讯
  • 局域网打印机共享全攻略:从原理到实战,解决0x00000709等常见错误
  • AirPods 2在Win10麦克风失效?蓝牙协议冲突与系统级修复指南
  • Teamcenter AI助手 零部件使用全量分析,批量替换 - 张永全
  • Hex常见问题解答:解决你的语音转文字难题
  • 北京工商注册代办怎么选才正规?2026 甄选标准与靠谱机构盘点 - GEORANK
  • 实战:用 memleax 揪出 C 程序内存泄漏的 4 个真实案例
  • Windows远程访问Ubuntu服务器:SSH、VNC、XRDP方案全解析与实战配置
  • 2026年国内稳压IC选型困惑 适配多场景品牌推荐 - 产品推荐官
  • 一次安装全线打通:Ix如何同时接入Codex、Cursor、Gemini CLI等7大AI客户端
  • Linux程序崩溃调试:Core Dump配置、生成与GDB分析实战指南
  • OpenClaw飞书机器人配置实战:从零部署到核心命令速查
  • 数据管道揭秘:Snakemake如何批量调度5个CMIP6数据集的下载与重网格化
  • 2026年8月综合盘点 衢州涂料门店选购全指南 - 滚动商讯
  • 2026年国内卫浴仓储店招商 高性价比品牌推荐 - 产品推荐官
  • IntelliJ IDEA与Maven依赖本地优先配置:提升构建速度与稳定性
  • MacOS系统状态查询指令全解析:从进程监控到性能调优
  • 终极指南:Accuracy与MRA双指标如何量化大模型的空间理解力?VSI-Bench评测体系全解析
  • 中转接入测评:Claude 啃难题,小模型打杂,模型路由怎么选