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

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
154 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
6月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
283 79
|
6月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
602 33
|
6月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
341 19
|
6月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
9月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
6月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
199 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
8月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
7月前
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。

热门文章

最新文章

推荐镜像

更多