
在2020年的火花+人工智能峰会,力学数据,现在现货,NetApp的一部分,一个会话最佳实践和陷阱的运行Apache火花Kubernetes(美丽)。
在这篇文章中我们想扩大表示和和你谈谈:
- Kubernetes是什么?
- 为什么Kubernetes上运行火花呢?
- 开始使用Kubernetes火花
- 优化性能和成本
- 监控Kubernetes火花应用程序
- (2021年3月更新)火花Kubernetes现在投入使用
如果你已经熟悉k8和为什么Kubernetes火花可能适合你,完全可以跳过第一个连续两个部分,文章的肉!
什么是Kubernetes(美丽)?
Kubernetes(也称为Kube或k8)是一个开源容器编排系统原本在谷歌,2014年开源和维护的原生云计算的基础。Kubernetes用于自动化部署、扩展和集装箱的管理应用程序,最常见的码头工人的容器中。
它提供了许多特性稳定的关键,安全、性能和可伸缩性,如:
- 水平可伸缩性
- 自动电&回滚
- 负载平衡
- 秘密和配置管理
- …还有更多
Kubernetes已成为标准的基础设施管理在传统软件开发的世界。但是Kubernetes并不受欢迎的大数据场景经常坚持旧的技术Hadoop纱。直到Spark-on-Kubernetes加入游戏!
为什么引发Kubernetes呢?
当支持本地运行火花在Kubernetes增加了在Apache 2.3火花,许多公司决定切换到它。这个受欢迎的主要原因包括:
- 本机集装箱化和码头工人支持。
- 火花运行应用程序的能力,彼此完全隔离(如不同的火花版本),享受一个共享的基础设施的成本效率。
- 统一整个科技基础设施在一个云不可知论者工具(如果你已经在使用Kubernetes non-Spark工作负载)。
除此之外,没有设置处罚上运行Kubernetes相比纱(如图所示基准3.0),引发了许多额外的改进Spark-on-Kubernetes喜欢支持动态分配。自火花3.1(2021年3月),火花在Kubernetes被正式宣布为投入使用和生产就绪!
阅读我们的以前的文章Kubernetes利弊的火花有关该主题的详细信息和比较的主要选择。
开始使用Kubernetes火花
架构:当你提交一个火花Kubernetes应用
你提交一个火花的应用程序通过直接对话Kubernetes(精确到Kubernetes API服务器在主节点上)然后安排pod(简单地说,一个容器)引发的司机。一旦引发司机,它将与Kubernetes直接沟通,请求引发执行人,还将计划在豆荚每个执行者(pod)。如果启用了动态分配的数量火花执行人动态发展基于负载,否则它是一个静态的数字。

如何提交申请:spark-submit vs spark-operator吗
这是一个高级选择你需要做的。有两种方式提交火花Kubernetes应用程序:
- 使用spark-submit方法与火花捆绑在一起。在引发进一步的操作程序将需要直接与Kubernetes pod对象交互
- 使用spark-operator。这个项目被GCP发达(开源),但它无处不在。它需要在集群上运行(单一)舱,但会引发应用程序自定义Kubernetes资源雷竞技rabet官网可以定义、配置和描述像其他Kubernetes对象。它增加了其他细节如支持安装ConfigMaps和卷直接从您的火花应用配置。

我们建议使用spark-operator更易于使用!
安装检查表
以下步骤将取决于你当前的基础设施和云提供商(或内部设置)。但在高层,这是主要的事情你需要设置与火花开始Kubernetes完全由你自己:
- 创建一个Kubernetes集群
- 定义你想要的节点池根据您的工作负载需求
- 加强根据您的网络安全需求(我们建议使Kubernetes集群私人)
- 为你创建一个码头工人注册火花码头工人的图片,开始构建您自己的图片
更新(2021年4月):我们有公开发布我们的图像优化码头工人火花。
更新(2021年10月):看到我们的一步一步的教程如何构建一个形象,开始使用我们的boilercode模板! - 安装Spark-operator
- 安装Kubernetes集群自动定量
- 设置的集合火花司机持久性存储日志和引发事件日志
- 安装火花历史服务器(执掌图表),或者使用我们的开源工具高兴的是(博客,github)
- 设置节点的集合和火花度量(CPU、内存、I / O、磁盘)
如你所见,这是很多工作,很多开源项目转移到内部保持如果你这样做。
这就是为什么我们建立管理平台(火花力学数据),使火花Kubernetes尽可能简单和容易。我们的平台负责这个设置,提供额外的集成(例如Jupyter、气流、ide)以及强大的优化上,让你的火花云应用程序的速度,并且降低成本。
优化性能和成本
使用ssd或大型磁盘尽可能得到最好的洗牌Spark-on-Kubernetes的性能
打乱的昂贵的所有数据交换步骤往往出现火花。他们可以占据了整个火花的大部分工作,因此优化火花洗牌性能很重要。我们已经覆盖在我们这个主题纱vs Kubernetes性能基准文章(读“Kubernetes如何优化与火花洗牌”)我们在这里给我们的高级技巧:
- 尽量使用当地的SSD硬盘
- 当他们无法获得,增加磁盘的大小来提高带宽
优化你的火花pod大小,以避免浪费产能
让我们通过一个例子。假设:
- Kubernetes节点有4个cpu
- 你想装一个火花每Kubernetes节点执行人吊舱
然后你将提交你的火花和配置应用程序spark.executor.cores = 4对吧?错了。火花应用会卡住,因为执行人不能适合你的节点。你应该占管理费用中描述下面的图。
典型的节点可分配代表节点容量的95%。保留的资雷竞技rabet官网源DaemonSets取决于你的设置,但是请注意,DaemonSets在日志和收集度量标准是受欢迎的,网络,和安全。假设这让你90%的可用节点容量引发执行人,所以3.6的cpu。
这意味着你可以提交一个火花应用程序的配置spark.executor.cores = 3。但这只保留3 cpu和一些能力会被浪费。因此在这种情况下,我们建议以下配置:
spark.executor.cores = 4
spark.kubernetes.executor.request.cores = 3600
这意味着你的火花执行人将请求完全3.6可用的cpu,并引发将安排4并行任务执行人。
先进的提示:
设置spark.executor.cores更大的(通常是2 x或3 x)比spark.kubernetes.executor.request.cores叫做超额认购,可以产生一个巨大的性能提升工作负载,CPU使用率很低。
在这个例子中,我们已经向您展示了如何大小火花执行人豆荚所以他们紧密地融入你的节点(1舱/节点)。一般公司也选择使用更大的节点每个节点并适合多个豆荚。在这种情况下,你还应该注意你的火花CPU和内存请求,以确保节点执行人的装箱是有效的。这是一个提供的动态优化力学数据平台。
使app-level动态分配和集群级别自动定量
这是一个绝对必备的如果你在云中运行和想让你的数据基础设施反应效率和成本。有两个级别的动态扩展:
- App-level动态分配。这是每个应用程序请求引发火花的能力执行器在运行时(当有未决任务)和删除它们(当他们空闲)。动态分配是可用的火花以来Kubernetes 3.0通过设置以下配置:spark.dynamicAllocation.enabled = true
spark.dynamicAllocation.shuffleTracking.enabled = true
- 集群级别自动定量。这意味着Kubernetes集群可以从云提供商请求更多的节点时,需要更多的产能安排豆荚,反之亦然成为闲置时删除节点。

在一起,这两个设置会使你的整个动态数据基础设施规模引发应用时可以受益于新的资源和规模回去当这些资源闲置。雷竞技rabet官网在实践中,开始一个火花pod只需要几秒钟当集群中的能力。如果一个新节点必须首先获得从云提供商,您通常需要等待1 - 2分钟(取决于云提供商、地区和类型的实例)。
如果你想保证应用程序总是在几秒钟内开始,您可以通过调度超大Kubernetes集群所谓“暂停豆荚”。这些都是低优先级的豆荚基本上什么也不做。当一个火花应用需要空间来运行,Kubernetes将删除这些低优先级的豆荚,然后安排他们(导致集群规模的背景)。

使用云节点来减少成本
点(也称为抢占式)节点通常成本大约75%不到点播机,以换取更低的可用性(当你问点节点并不能保证你会得到它们)和不可预测的干扰(这些节点可以随时消失)。
火花工作负载工作很好只要你确保现场节点只有火花执行人放在现货而引发司机一个随需应变的机器上运行。事实上火花可以恢复从失去一个执行人(一个新的遗嘱执行人将被放置在一个随需应变的节点和重新运行计算)而不是失去司机。
使现场节点Kubernetes您应该创建多个节点池(一些按需和现货),然后使用node-selectors和节点关联性让司机一个随需应变的节点和执行人最好现场节点。
监控Kubernetes火花应用程序
使用Kubernetes仪表板监视吊舱资源使用情况
的Kubernetes仪表板是一个开源Kubernetes通用网络监控界面。它会给你的可见性的应用程序集群上运行的基本度量来解决他们的表现像内存使用量,CPU利用率、I / O,磁盘等。

这个项目的主要问题是它是繁琐的调和这些指标与实际工作/火花阶段,和大部分的这些指标丢失当火花程序完成。坚持这些指标是有点难度但可能使用例子普罗米修斯(带有一个内置的火花以来servlet 3.0)InfluxDB。
如何访问UI的火花吗
火花UI是必要的监控工具内置的火花。这是一个不同的方式来访问它是否应用是住:
- 当应用程序运行时,火花UI的火花司机直接在端口4040上。来访问它,你应该左前通过运行下面的命令:
美元kubectl左前< driver-pod-name > 4040:4040 < / driver-pod-name >
然后你可以打开火花UIhttp://localhost: 4040 / - 应用程序完成时,您可以通过运行引发历史重演火花UI服务器和配置它阅读火花从持久存储事件日志。你应该首先使用该配置spark.eventLog.dir写这些事件日志的存储后端你的选择。你应该遵循这一点文档从舵安装火花历史服务器图和点存储后端。
火花UI的主要问题是,很难找到你正在寻找的信息,和它缺乏系统指标(CPU、内存使用IO)从之前的工具。
出于这个原因,我们正在开发数据力学高兴的是,一个新的和改进的火花和可视化UI的新指标。该产品将是免费的,部分开源,工作上任何火花的平台。我们针对2021年初发布。阅读更多关于它。
更新:
- 截至2020年11月,我们已经发布了一个免费的,托管,跨平台的火花历史服务器。这是一个更简单的选择比火花历史服务器托管自己!
- 截至2021年4月,这个免费的监控工具高兴的是还显示了CPU和内存指标上的火花工作&阶段。看看我们博客&github页面更多信息。
火花在Kubernetes现在一般可用(火花3.1更新)
2021年3月以来,Apache 3.1版本火花,火花在Kubernetes被正式宣布为生产就绪,通常可用。
最激动人心的功能是火花的能力预测执行人现货杀死(通过听提前终止通知云提供商提供)和洗牌文件和缓存的数据迁移的执行者要死了一个执行人将生存。这一特性称为[火花- 20624]更好的处理节点关闭。见下面的GIF。看看我们博客报道引发3.1版本深入研究这个。

出于这个原因,我们正在开发数据力学高兴的是,一个新的和改进的火花和可视化UI的新指标。该产品将是免费的,部分开源,工作上任何火花的平台。我们针对2021年初发布。阅读更多关于它。
更新:
- 截至2020年11月,我们已经发布了一个免费的,托管,跨平台的火花历史服务器。这是一个更简单的选择比火花历史服务器托管自己!
- 截至2021年4月,这个免费的监控工具高兴的是还显示了CPU和内存指标上的火花工作&阶段。看看我们博客&github页面更多信息。
火花在Kubernetes现在一般可用(火花3.1更新)
2021年3月以来,Apache 3.1版本火花,火花在Kubernetes被正式宣布为生产就绪,通常可用。
最激动人心的功能是火花的能力预测执行人现货杀死(通过听提前终止通知云提供商提供)和洗牌文件和缓存的数据迁移的执行者要死了一个执行人将生存。这一特性称为[火花- 20624]更好的处理节点关闭。见下面的GIF。看看我们博客报道引发3.1版本深入研究这个。

第二个主要改进是能够挂载NFS共享卷Kubernetes (network-backed存储你所有的火花可以共享的应用程序和预填充的数据),并且能够动态地提供PersistentVolumeClaims(而不是静态),这是特别有用如果你想运行引发应用程序启用了动态分配。
结论
我们希望本文能给你有用的见解Spark-on-Kubernetes以及如何取得成功。如果你想开始使用Spark-on-Kubernetes好走的路,预订一个时间和我们在一起在力学数据,我们的团队会更乐意帮助你兑现你的用例。如果你想更好地理解我们的平台比较Spark-on-Kubernetes开源,看看这篇文章。