
【.com快译】Empathy公司平台工程技术负责人Ramiro Alvarez Fernandez对于如何在Kubernetes上使用Spark以摆脱对云计算提供商的运行依赖,以及在Kubernetes上运行Apache Spark进行了介绍,运行并分享了这一过程的运行挑战、架构和解决方案等详细信息。运行
对于Empathy公司来说,生产中运行的运行所有代码都必须与云计算无关。Empathy公司通过使用Spark解决方案克服了之前对云计算提供商提供的运行解决方案的依赖:例如,EMR(AWS场景)、运行Dataproc(GCP场景)和HDInsight(Azure场景)。运行
这些云计算提供商的运行不同解决方案提供了一种在云上部署Spark的简单方法。但是运行,当企业在扩大规模时会面临一些限制,运行从而需要解决以下这些问题:
如何编排作业?运行 如何分配Spark作业? 如何安排夜间工作? 工作代码配置在哪里? 如何传播更改? 可以重复使用作业定义吗?模板是什么? 能否通过代码引用作业? 可以从本地主机测试吗?这些是在实施Spark作业时面临的常见问题。使用Kubernetes解决这些问题可以节省工作人员的运行时间和精力,并提供更好的运行体验。
在Kubernetes上运行Apache Spark可以提供以下好处:
可扩展性:新解决方案应可扩展以满足任何需求。 可靠性:新解决方案应该监控计算节点,并在出现故障时自动终止和替换实例。 可迁移性:新解决方案应该可以部署在任何云计算解决方案中,避免对特定云计算提供商的云服务器提供商依赖。总体而言,这种方法可以节省考虑与不同云计算服务提供商协调、分发和调度Spark作业的时间。 成本效益:企业不需要采用云计算提供商的服务,因此可以节省这些成本。 监控:新解决方案应该包括特别监测。 Kubernetes生态系统:与其他工作负载一样使用通用生态系统,并提供持续部署、RBAC、专用节点池、自动缩放等。其好处与Empathy公司针对Kubernetes上运行的Apache Flink的解决方案相同。
Apache Spark是用于大数据处理的统一分析引擎,特别适用于分布式处理。Spark用于机器学习,是目前最大的技术趋势之一。
Spark Submit可用于将Spark应用程序直接提交到Kubernetes集群。其流程如下:
(1)Spark Submit从客户端发送到主节点中的Kubernetes API服务器。
(2)Kubernetes将调度一个新的Spark Driver pod。
(3)Spark Driver pod将与Kubernetes通信以请求Spark executor pod。
(4)新的香港云服务器executor pod将由Kubernetes调度。
(5)一旦新的executor pod开始运行,Kubernetes会通知Spark Driver pod新的Spark executor pod已经准备就绪。
(6)Spark Driver pod将在新的Spark executor pod上调度任务。

Spark提交流程图
可以使用SparkSubmit(普通方式)或使用Spark Operator来安排Spark应用程序。
Spark Submit是用于提交Spark应用程序并在Spark集群上启动应用程序的脚本。其具有的一些出色的功能包括:
Kubernetes版本:不依赖于Kubernetes版本。 Native Spark:它包含在Spark映像中。 非声明性设置:需要计划如何编排作业。 定义所需的K8s资源:挂载配置映射、卷、设置反关联、节点选择器等。 不需要CRD:不需要Kubernetes自定义资源。Spark Operator项目由谷歌公司开发,现在是一个开源项目。它使用Kubernetes自定义资源来指定、运行和显示Spark应用程序的状态。其具有的一些出色的功能包括:
声明性:应用程序规范和通过自定义资源管理应用程序。 计划重启:可配置的重启策略。亿华云 Kubernetes资源自动定义:支持挂载configmaps和volumes,设置pod关联性等。 依赖项注入:直接注入依赖项。 指标:支持收集应用程序级指标和驱动程序/执行程序指标并将其导出到Prometheus。 开源社区:每个人都可以做出贡献。
Spark Submit vs Spark Operator的主要命令
上图显示了Spark Submit与Spark Operator的主要命令。
Empathy公司的解决方案更喜欢采用Spark Operator,因为它允许比Spark Submit更快的迭代,在Spark Submit中,必须为每个用例创建自定义Kubernetes清单。
为了解决挑战部分提出的问题,ArgoCD和Argo Workflows可以提供帮助,同时还有CNCF项目的支持。例如,可以从Kubernete调度最喜欢的Spark应用程序工作负载,以创建Argo Workflows并定义顺序作业。
流程图如下:
在git上定义更改。 ArgoCD将git更改同步到Kubernetes集群(例如,创建一个Argo工作流模板)。 Argo Workflows模板允许为多个Spark作业自定义输入和重用配置,并基于Argo Workflows创建夜间作业。
解决方案流程图
ArgoCD是Kubernetes的GitOps持续交付工具。其主要好处是:
GitOps:使用git存储库作为定义所需应用程序状态的真实来源。 声明式设置:git上的一切。 可追溯性和自动化:应用程序部署可以跟踪分支、标签等的更新。应用程序部署将根据特定的目标环境实现自动化。 WebUI:用于检查部署的工作负载的外观良好的用户界面。 Kubernetes体现了Kustomize、Helm、ksonnet、jsonnet等。可以进行选择。更详细的信息可以在其官方文档中找到。
Argo Workflows是Kubernetes的工作流解决方案。主要好处是:
作业编排:这允许按顺序编排作业或创建自定义DAG。 调度工作流:Cron native.。 Spark应用程序:在任何Kubernetes集群上轻松编排Spark应用程序。 工作流模板:针对不同用例重复使用模板。输入可以参数化。 WebUI:用于检查工作流程进度的出色视觉用户界面。更详细的信息可以在其官方文档中找到。
一旦Prometheus掌握了这些指标,就需要一些Grafana仪表板进行监测。Apache Spark的自定义Grafana仪表板基于以下社区仪表板:
ArgoCD仪表板 Argo Workflow仪表板 Apache Spark操作员仪表板 Apache Spark应用程序仪表板Empathy公司选择Spark Operator、ArgoCD和Argo Workflows在Kubernetes上创建Spark应用程序工作流解决方案,并使用GitOps传播更改。本文所展示的设置已经在生产环境中使用了大约一个月的时间,并且反馈很好。每个用户都对工作流程感到满意,而拥有一个适用于任何云提供商的单一工作流程,可以摆脱了单个云计算提供商的锁定。
如果亲自进行测试,需要按照这些实际操作示例并享受从本地主机部署一些Spark应用程序的乐趣,以及本指南中描述的所有设置:Hands-on Empathy Repo。
虽然还有很长的路要走,但会有更多的收获。希望这一创新能帮助企业变得更加与云无关。
原文标题:Running Apache Spark on Kubernetes,作者:Ramiro Alvarez Fernandez
【译稿,合作站点转载请注明原文译者和出处为.com】