当前位置: 首页 > 科技观察

如何在Kubernetes上运行ApacheSpark

时间:2023-03-14 14:20:50 科技观察

【.com快译】Empathy平台工程技术负责人RamiroAlvarezFernandez讲述如何在Kubernetes上使用Spark摆脱对云计算供应商的依赖,在Kubernetes上运行ApacheSparkKubernetes给出了介绍,并分享了这个过程的挑战、架构和解决方案的细节。挑战对于Empathy,在生产环境中运行的所有代码都必须与云无关。Empathy通过使用Spark解决方案克服了之前对云计算提供商提供的解决方案的依赖:例如EMR(AWS场景)、Dataproc(GCP场景)和HDInsight(Azure场景)。来自这些云计算提供商的不同解决方案提供了一种在云上部署Spark的简单方法。然而,当你扩大规模时,你会面临一些限制,你需要解决这些问题:你如何安排工作?您如何分配Spark作业?你如何安排夜间工作?职位代码在哪里配置?你如何传播变化??什么是模板?可以通过代码引用作业吗?可以从本地主机测试吗?这些是实施Spark作业时面临的常见问题。使用Kubernetes来解决这些问题可以节省工作人员的时间和精力,并提供更好的体验。在Kubernetes上运行ApacheSpark可以提供以下好处:可扩展性:新解决方案应该可扩展以满足任何需求。可靠性:新的解决方案应该监控计算节点,并在发生故障时自动终止和替换实例。可移植性:新解决方案应该可以部署在任何云计算解决方案中,避免依赖特定的云计算提供商。总的来说,这种方法节省了考虑与不同云计算服务提供商协调、分发和调度Spark作业的时间。成本效益:企业不需要使用云计算提供商的服务,从而节省了这些成本。监控:新的解决方案应该包括临时监控。Kubernetes生态系统:使用与其他工作负载相同的通用生态系统,并提供持续部署、RBAC、专用节点池、自动缩放等。好处和Empathy的ApacheFlink运行在Kubernetes上的方案是一样的。运行在Kubernetes上的ApacheSparkApacheSpark是大数据处理,尤其是分布式处理的统一分析引擎。用于机器学习的Spark是目前最大的技术趋势之一。ApacheSpark架构SparkSubmit可用于将Spark应用程序直接提交到Kubernetes集群。流程如下:(1)SparkSubmit从客户端发送到master节点中的KubernetesAPIserver。(2)Kubernetes会调度一个新的SparkDriverpod。(3)SparkDriverpod会和Kubernetes通信,请求Sparkexecutorpod。(4)新的executorpod会被Kubernetes调度。(5)一旦新的executorpod开始运行,Kubernetes通知SparkDriverpod新的Sparkexecutorpod准备就绪。(6)SparkDriverpod会在新的Sparkexecutorpod上调度任务。Spark提交流程图可用于使用SparkSubmit(正常方式)或使用SparkOperator来安排Spark应用程序。SparkSubmitSparkSubmit是用于提交Spark应用程序并在Spark集群上启动应用程序的脚本。它的一些重要功能包括:Kubernetes版本:不依赖于Kubernetes版本。NativeSpark:它包含在Spark镜像中。非声明式设置:需要计划如何编排作业。定义所需的K8s资源:挂载配置映射、卷、设置反亲和性、节点选择器等。不需要CRD:不需要Kubernetes自定义资源。SparkOperatorSparkOperator项目由谷歌开发,现在是一个开源项目。它使用Kubernetes自定义资源来指定、运行和显示Spark应用程序的状态。它具有的一些很酷的功能包括:声明式:通过自定义资源进行应用程序规范和应用程序管理。计划重启:可配置的重启策略。自动定义Kubernetes资源:支持挂载configmaps和volumes,设置podaffinity等。DependencyInjection:直接注入依赖。Metrics:支持收集应用级指标和驱动/执行器指标,并导出到Prometheus。开源社区:每个人都可以做出贡献。SparkSubmitvsSparkOperator的主要命令上图展示了SparkSubmit和SparkOperator的主要命令。Empathy的解决方案更喜欢使用SparkOperator,因为它允许比SparkSubmit更快的迭代,其中必须为每个用例创建自定义Kubernetes清单。解决方案的细节要解决挑战部分提出的问题,ArgoCD和ArgoWorkflows可以提供帮助,以及CNCF项目的支持。例如,可以从Kubernetes调度最喜欢的Spark应用程序工作负载以创建Argo工作流并定义顺序作业。流程图如下:Definechangesongit。ArgoCD将git更改同步到Kubernetes集群(例如创建Argo工作流模板)。ArgoWorkflows模板允许为多个Spark作业自定义输入和重用配置,并基于ArgoWorkflows创建夜间作业。解决方案流程图ArgoCDAArgoCD是一个用于Kubernetes的GitOps持续交付工具。它的主要好处是:GitOps:使用git存储库作为定义所需应用程序状态的真实来源。声明式设置:git上的所有内容。可追溯和自动化:应用部署可以跟踪分支、标签等更新,应用部署会根据具体的目标环境实现自动化。WebUI:一个漂亮的用户界面,用于检查已部署的工作负载。Kubernetes有Kustomize、Helm、ksonnet、jsonnet等,可以任选其一。更多详细信息可以在其官方文档中找到。ArgoWorkflowsArgoWorkflows是Kubernetes的工作流解决方案。主要好处是:作业编排:这允许按顺序编排作业或创建自定义DAG。调度工作流:Cronnative..Spark应用程序:在任何Kubernetes集群上轻松编排Spark应用程序。工作流模板:为不同的用例重复使用模板。输入可以参数化。WebUI:用于检查工作流程进度的出色可视化用户界面。更多详细信息可以在其官方文档中找到。监控一旦Prometheus有了指标,就需要一些Grafana仪表板进行监控。ApacheSpark的自定义Grafana仪表板基于以下社区仪表板:ArgoCD仪表板Argo工作流仪表板ApacheSpark操作器仪表板ApacheSpark应用程序仪表板EpilogueEmpathy选择SparkOperator、ArgoCD和ArgoWorkflows在Kubernetes上创建Spark应用程序程序工作流解决方案并传播更改使用GitOps。本文中显示的设置已经投入生产大约一个月,反馈很好。每个用户都对工作流感到满意,并且拥有一个可与任何云提供商一起工作的工作流可以让您摆脱被锁定在单个云提供商的束缚。如果您自己进行测试,请遵循这些实践示例并享受从本地主机部署一些Spark应用程序的乐趣,并使用本指南中描述的所有设置:Hands-onEmpathyRepo。虽然还有很长的路要走,但未来还会有更多。希望这项创新将帮助企业变得更加与云无关。原标题:RunningApacheSparkonKubernetes,作者:RamiroAlvarezFernandez