Spark 应用开发过程

第一步:数据探索

使用 spark-shell 或者笔记型应用(如:Apache Zeppelin)进行数据探索,编写核心的组件或算法代码。

第二步:编码

新建工程,将编写的核心组件或算法代码移到工程中。工程结构按以下三大模块进行组织:

  • Source 数据输入
  • Process 数据处理
  • Sink 数据输出

第三步:测试用例

选择 JUnit/ScalaTest 测试工具,编写单元测试。使用单机可处理的(代码自动生成数据或生产环境抽样数据)数据,在 local 模式下运行。

可以参考之前的博客:Spark 单元测试

针对不同的模块,测试的侧重点也稍有不同:

  • Source 验证数据质量
  • Process 验证处理逻辑
  • Sink 验证数据结构

第四步:优化

将工程打包提交到集群中运行,在 Spark UI 中查看应用运行指标,对应用进行优化。

Spark 调优即需要对网络、OS、JVM、Hadoop 和 Spark 有非常深入的了解,也需要对调优有非常丰富的经验,这里不便于展开了。

第五步:部署上线

部署到 Apache Oozie(或 AzkabanAirFlow),应用正式上线。

第六步:监控

应用上线之后,需要对应用持续进行监控。必要的时候,甚至需要修改代码或配置,重新优化、部署上线。

监控的项目有:

  • 集群,YARN 集群、HDFS 集群等,使用的服务有:GangliaPrometheus
  • 操作系统,使用的 shell 命令有:dstat、iostat 和 iotop;
  • JVM,使用的 JVM 工具有:jstack、jmap、jstat、jconsole;
  • Spark 应用,使用的服务有:SHS、Dr.Elephant