Hadoop大数据平台实战(05):深入Spark Cluster集群模式YARN vs Mesos vs Standalone vs K8s

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Hadoop大数据平台实战(05):Spark Cluster集群模式YARN, Mesos,Standalone和K8s深入对比。监控,调度,监控,安全机制,特性对比,哪个才是最好的Spark集群管理工具。

Spark可以以分布式集群架构模式运行,如果我们不熟Spark Cluster,这个时候需要集群管理器帮助我们管理Spark 集群。 集群管理器根据需要为所有工作节点提供资源,操作所有节点。负责管理和协调集群节点的程序一般叫做:Cluster Manager,集群管理器。
目前搭建Spark 集群,可以的选择包括Standalone,YARN,Mesos,K8s,这么多工具,在部署Spark集群时很难选择,哪些是最好的Apache Spark集群管理器?
接下来我们会详细介绍了每个集群管理器的功能,并详细介绍调度原理,HA(高可用性),安全性和监控机制。
Apache Spark是一个高性能分布式大数据处理引擎,可以以分布式集群模式运行。 Spark应用程序作为集群上的独立进程集运行,所有这些都由中央协调器协调。这个中央协调器可以连接4个不同的集群管理器:Spark的Standalone,Apache Mesos和YARN(Yet Another Resource Negotiator),还有最新的K8s。

image


在群集上以分布式模式运行Spark应用程序时,Spark使用主/从体系结构,中央协调器(coordinator也称为驱动程序)是应用程序中的主进程,运行创建SparkContext对象的代码。此Driver驱动程序进程负责将用户应用程序转换为称为Task任务的较小执行单元。然后,这些任务由执行程序执行,执行程序是运行各个任务的工作进程。如下图所示:

image


在群集中,有一个Master和任意数量的Worker。驱动程序可以在独立进程中运行,也可以在集群的工作程序中运行,从集群管理器请求执行程序。然后,它会在从集群管理器获取的执行程序上调度组成应用程序的任务。集群管理器负责在构成集群的主机上调度和分配资源。
Spark与底层集群管理器无关,可以独立运行,也可以结合集群管理器。集群管理器都有控制部署资源使用和其他功能的选项,并且都带有监控工具。
那么如何确定哪个是最好的集群管理器?要回答这个问题,我们将从介绍开始,然后详细对比每个集群管理器的扩展功能,节点管理,高可用性(HA),安全性和监控。
1、Spark集群管理器类型
Spark目前支持多个集群管理器,比较著名的,成熟的管理器方案是下面4个:

1)Standalone - Spark自带的简单集群管理器,可以轻松设置集群。
2)Apache Mesos - 一个通用的集群管理器,也可以运行Hadoop MapReduce和服务应用程序。
3)Hadoop YARN - Hadoop 2中新增的资源管理器。
4)Kubernetes - K8s,谷歌开源的容器管理工具,是个开源系统,用于自动化容器化应用程序的部署,扩展和管理。
也有第三方开源第三方项目扩展(Spark项目官方不支持),使用添Nomad作为集群管理器的尝试项目。

2、Spark集群调度原理

image


Spark应用程序作为集群上的独立进程集运行,由主程序中的SparkContext对象(称为驱动程序)协调。

Spar分布式集群模式运行,Java等开发的大数据程序使用SparkContext对象连接到几种集群管理器(Standalone,Mesos或YARN),管理器负责调度分配资源。 连接后,Spark会在集群中的节点上获取executors执行程序,这些executors执行程序是为应用程序运行计算和存储数据的进程。 接下来,它将我们编写的Java大叔应用程序代码(传递给SparkContext的JAR或Python文件定义)发送给executors执行程序。 最后,SparkContext定义Job概念,并且将Job分解的大数据计算任务tasks发送给executors执行程序,一个集群多个节点,一个节点至少有一个executors,一个executors可以有多个Task。

3、Spark 4个集群管理
Spark现在支持4种集群管理器:Spark的Standalone,Apache Mesos和YARN(Yet Another Resource Negotiator),K8s。
1)Spark Standalone集群管理器是一个简单的集群管理器,可作为Spark发行版的一部分。它具有主服务器的HA,对工作人员故障具有弹性,具有管理每个应用程序资源的功能,并且可以与现有Hadoop部署一起运行并访问HDFS(Hadoop分布式文件系统)数据。该分发包括脚本,以便在Amazon EC2上本地或在云中轻松部署。它可以在Linux,Windows或Mac OSX上运行。

2)Apache Mesos是开源分布式资源管理框架,支持Master主服务器和Slave从服务器的HA,可以管理分布式应用程序的资源,并且支持Docker容器。。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。它可以运行Spark作业,Hadoop MapReduce或任何其他服务应用程序。它有适用于Java,Python和C ++的API。它可以在Linux或Mac OSX上运行。

3)Hadoop YARN,作业调度和集群资源管理分布式计算框架,具有Master和Slave高可用HA特性,支持非安全模式Docker容器,Linux和Windows容器executors安全模式,和可插拔调度。可以在Linux和Windows系统上运行。

4)Kubernetes(K8s)是一个谷歌开源资源管理系统,用于Dockers自动化容器化应用程序的部署,扩展和管理。 它将构成应用程序的容器分组为逻辑单元,以便于管理和发现。 Kubernetes拥有15年在Google运行生产工作负载的经验,并结合了社区中的最佳创意和实践。

4、Spark集群安全性
Spark的安全性同样非常重要,主要是身份验证和数据加密问题。怎么保持大数据的安全,和如何保证执行者的权限正确。几种不同的集群模式,支持的授权和安全体系也存在差异,有些借助第三方安全框架如Kerberos来实现集群安全。
4.1)Spark独立模式支持通过所有集群管理器的共享密钥进行身份验证。独立管理器要求用户使用共享密钥配置每个Spark节点。可以使用SSL为通信协议加密数据。数据块传输支持SASL加密。其他选项也可用于加密数据。可以通过访问控制列表ACL控制对Web UI中的Spark应用程序的访问。

4.2)Mesos也可以为与Spark集群提供身份验证。这包括向Master主服务器注册的Slave从服务器,提交给集群的框架(即应用程序),以及使用HTTP等端点的运算器。可以使集群中的每一个实体都能够使用身份验证。 Mesos的默认验证模块Cyrus SASL,可以替换为自定义安全模块。ACL访问控制列表用于授权访问Mesos中的服务。默认情况下,Mesos中模块之间的通信未加密。我们可以启用SSL / TLS来加密此通信。 Mesos WebUI也支持HTTPS安全协议。

4.3)Hadoop YARN的安全机制依赖于第三方标准,具有身份验证,服务级别授权SLA,Web控制台身份验证和数据机密性的安全性。 Hadoop身份验证使用Kerberos验证,Kerberos对每个用户和服务进行了身份验证。SLA服务级别授权可确保使用Hadoop服务的客户端有权限使用它们。可以通过访问控制列表ACL精确控制对Hadoop服务的访问。此外,客户端和服务之间的数据通信可以使用SSL加密,使用HTTPS在Web控制台和客户端之间传输数据。这种方式也是互联网常见的数据加密方式

4.4)Kubernetes可以调度Apache Spark资源,并且为Spark提供一个安全可靠的运行隔离环境,大数据在多用户之间传输和存储的安全性非常重要,Kubernetes Secrets可用于为Spark应用程序提供访问安全服务的凭据。Kubernetes和Spark可以利用Kerberos这样的认证体系,进行HDFS和Spark的Job执行的权限控制和授权,这是Spark on K8s试解决的问题。Spark中的安全性默认为OFF。 很容易受到默认攻击。 在运行Spark之前,生产环境建议启用安全。

 集群安全比较复杂,默认我们使用第一种方式,相对简单,容易配置实现。
 

5、Spark集群高可用
分布式系统另外一个重要的问题就是高可用HA,分布式系统协调复杂,安全性重要,但是如果某个节点宕机出错,可能会影响整个集群的运行,Spark集群的管理器也需要解决HA高可用问题。
5.1)Spark独立集群管理器支持HA,支持使用ZooKeeper仲裁模式,可以把备用主服务器自动恢复主服务器。 它还支持使用文件系统进行手动恢复。 无论是否启用了Master恢复,Spark群集都对Worker失败具有弹性。
5.2)Apache Mesos集群管理器,同样使用Apache ZooKeeper自动恢复Master主服务器。 能够恢复Master。 在故障转移的情况下,当前正在执行的任务将继续执行。
5.3)Apache Hadoop YARN支持使用命令行实用程序进行手动恢复,并支持通过ResourceManager中嵌入的基于Zookeeper的ActiveStandbyElector进行自动恢复。 因此,与Mesos和Spark独立集群管理器不同,不需要运行单独的ZooKeeper故障转移控制器。 ZooKeeper仅用于记录ResourceManagers的状态。
5.4)Spark可以在Kubernetes管理的集群上运行。 此功能使用已添加到Spark的本机Kubernetes调度程序。Kubernetes调度程序目前是实验性的。 在未来的版本中,可能会出现围绕配置,容器映像和入口点的行为变化。

image


6、Spark集群监控
分布式集群监控,默认Spark提供了监控工具,Web网页方式。但是其他的集群管理器应该也提供了自己的监控面板,比如Mesos和K8s。

6.1)每个Apache Spark应用程序都有一个Web UI来监视应用程序。 Web UI显示有关在应用程序,执行程序和存储使用中运行的任务的信息。此外,Spark的独立集群管理器具有Web UI,可以查看集群和作业统计信息以及每个作业的详细日志输出。如果应用程序在其生命周期内记录了事件,则Spark Web UI将在应用程序存在后自动重建应用程序的UI。如果Spark在Mesos或YARN上运行,则可以在应用程序通过Spark的历史记录服务器退出后重建UI。Spark每个驱动程序都有一个Web UI,通常在端口4040上,显示有关运行任务,执行程序和存储使用情况的信息。 只需在Web浏览器中访问http:// :4040即可访问此UI。 监控指南还介绍了其他监控选项。
6.2)Apache Mesos为通过URL访问的主节点和从节点提供了许多指标。这些指标包括,例如,分配的CPU的百分比和数量,使用的总内存,可用内存的百分比,总磁盘空间,分配的磁盘空间,选定的主站,主站的正常运行时间,从站注册,连接的从站等。此外,支持每个容器网络监视和隔离。
6.3)Hadoop YARN具有ResourceManager和NodeManager的Web UI。 ResourceManager UI为集群提供度量,而NodeManager为每个节点以及节点上运行的应用程序和容器提供信息。
6.4)Kubernetes提供了2个主要的监控模块cAdvisor和Heapster 。监控agent, 在每个Kubernetes Node上都会运行cAdvisor 。cadvisor 会收集本机以及容器的监控数据(例如CPU、 memory、filesystem 、network statistics)。Heapster收集所有Kubernetes Node信息,然后汇总数据,然后可以导到第三方工具(如Influxdb)。Heapster 可以以Pod的方式运行在Kubernetes平台里,也可以单独运行以standalone的方式。
7、结论
Apache Spark与底层集群管理器无关,因此选择使用哪个管理器取决于您的目标。在上面的部分中,我们讨论了Spark的独立集群管理器,Apache Mesos、Hadoop YARN、K8s的几个方面,包括:调度、HA高可用性、安全、监控。
所有4个集群管理器都提供各种调度功能,但Mesos提供了最好的粒度控制选择。
所有4个集群管理器都提供高可用性,但Spark独立、Hadoop YARN和K8s不需要运行单独的ZooKeeper故障转移控制器。
所有Spark集群管理器都提供安全保障。 Apache Mesos支持可插拔架构作为其安全模块,使用Cyrus SASL的默认模块。Spark独立集群管理器使用共享密钥,Hadoop YARN使用Kerberos,K8s。这3个都使用SSL进行数据加密。

对比来看,默认的Apache Standalone Cluster Manager最简单,是最容易配置的,如果集群不需要复杂的VM虚拟化设置,不需要安装K8S,自带的集群管理器已经并提供了一套相当完整的功能。因此,如果搭建Spark大数据集群,这是最快的方式。其次可以推荐使用Mesos一起搭建。

参考资料:
https://spark.apache.org/docs/latest/running-on-kubernetes.html#cluster-mode
https://spark.apache.org/docs/latest/cluster-overview.html
https://banzaicloud.com/blog/spark-job-resilience/
阿里巴巴Java群超过4800人
进群方式:钉钉扫码入群
image
阿里巴巴MongoDB群
image

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
157 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
137 2
|
2月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
98 1
|
11天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
8天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
44 12
|
13天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
29 2
|
25天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
79 1
|
3月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
3月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。