火花和码头工人:你的火花开发周期刚快10倍!

使用集装箱码头工人所带来的好处是众所周知的:他们提供一致的和孤立的环境中,使应用程序可以部署在任何地方——在本地,在开发/测试/刺激环境中,所有云计算供应商和内部——在一个可重复的方式。

软件工程世界完全采用码头工人,很多工具码头工人已经改变了我们构建和部署软件,测试的方式,CI / CD,依赖管理、版本管理、监控、安全。的受欢迎程度Kubernetes作为集装箱编配的新标准和基础设施管理遵循的受欢迎程度码头工人

在大数据Apache火花现场,大多数应用程序仍然直接运行在虚拟机没有受益于集装箱化。占主导地位的集群管理器火花,Hadoop纱,不支持码头工人,直到容器最近(Hadoop 3.1版本),即使在今天码头工人的支持仍然“实验和非完整”。

本机支持码头工人实际上是企业选择部署的主要原因之一火花Kubernetes之上而不是纱。Spark-on-Kubernetes项目收到很多来自社区的支持,直到它被宣布一般可用和生产准备2021年3月3.1 Apache的火花。

在本文中,我们将说明码头工人的好处为Apache火花通过我们的很多用户使用的端到端开发周期在NetApp现货。

码头工人的好处为Apache火花

1。建立你的依赖关系一次,到处运行

您的应用程序将运行相同的方式在你运行它,你的笔记本电脑上dev /测试,或任何您的生产环境。在你的码头工人形象,您将:

  • 包您的应用程序代码
  • 包你所有的依赖项(python: pypi、鸡蛋、conda scala / java:坛子,maven;系统依赖关系)
  • 在运行时定义环境变量来调整行为
  • 你所希望的方式定制您的操作系统
  • 如果运行在Kubernetes:你可以自由选择你的火花版本为每个单独的码头工人的形象!这与纱,你必须使用相同的全球火花版本为整个集群。

2。使火花更可靠和有成本效益的生产。

因为你可以控制你的整个环境,当你建立你的码头工人形象,这意味着您不需要任何init脚本/引导动作在运行时执行。

这些脚本有几个问题:

  • 他们不可靠——图书馆安装可以失败由于虚假的网络故障,并负责你的火花在生产中管道故障。
  • 他们缓慢——这些脚本运行时可以添加多个分钟每个火花的设置时间节点,从而增加你的成本。
  • 他们很难开发、维护和调试。

3所示。加快你的迭代周期。

NetApp以现货,我们的用户享受20 - 30的迭代周期,从他们的IDE进行代码更改的时间这一变化作为火花应用在我们的平台上运行。

这主要是由于这样的事实,码头工人缓存之前构建的层次,Kubernetes在启动/重新启动码头工人容器非常快。

火花和码头工人开发迭代周期

更新(2021年10月):看到我们的一步一步的教程如何构建一个形象,开始使用我们的boilercode模板!

在本节中,我们将向您展示如何使用火花和码头工人,循序渐进。例子截图和代码示例取自运行PySpark应用程序引发的海洋平台,但这个例子可以简单地适应其他环境。

1。建设码头工人形象

我们将开始从当地PySpark项目依赖关系,和Dockerfile将解释如何构建一个码头工人形象对于这个项目。码头工人形象是建立后,我们可以直接在本地运行,或者推到码头工人注册第一然后海洋集群上运行它。

由于码头工人,没有必要包第三方依赖和脆弱的zip文件中的自定义模块。你可以共同部署你的主要脚本及其依赖项。

在本例中,我们为我们的项目采取布局,应该感到熟悉大多数Python开发人员:一个主要的脚本,一个需求文件,自定义模块。

让我们看看Dockerfile。在这个例子中:

  1. 我们开始从基础力学图像发表的数据。这幅图像对应于一个主要的火花图像(3.1)。我们将详细讨论这个选择本文的最后。
  2. 然后我们安装我们的依赖性。在这里我们使用脉冲,但是我们也可以利用conda。
  3. 我们最后复制自己的代码和主文件。因为这是代码,我们将主要迭代,最后建议这样做,所以,当我们改变这段代码码头工人不需要从头开始重建图像。
  4. 也很容易在这个步骤设置环境变量。

2。当地的运行

然后您可以构建这个形象,并在本地运行它。这意味着火花将在本地模式下运行;在你的笔记本上作为一个单独的容器。你将无法处理大量的数据,但这是有用的,如果你只是想测试您的代码正确性(可能使用真实数据的一个小子集),或运行单元测试。

平均的笔记本电脑,这15秒。如果你要重复很多在这个阶段,要进一步优化速度;而不是重建图像,你可以挂载本地文件(在你的笔记本电脑从你的工作目录)到你的工作目录的形象。

3所示。在规模

代码看起来是正确的,我们现在想运行这个形象在规模(在一个分布式的方式)完整的数据集。我们要把图像码头工人注册表,然后提供的图像名称作为一个参数REST API调用提交这个火花应用程序为Apache引发海洋。

重要的是要有一个快速迭代周期也在这个阶段——即使你跑在本地图像——你需要验证您的管道的正确性和稳定性对整个数据集。很有可能你会需要保持迭代代码和基础设施配置。

平均的笔记本电脑,这一步需要20秒完成:10秒来构建和推动形象,10秒开始数据的应用力学——这意味着火花驱动程序开始执行我们的main.py代码。

在不到30秒,你能重复你的火花在生产数据代码并运行它!你可以不用离开您的IDE(你不需要粘贴代码一个笔记本或交互式shell)。这是一个改变对于激发开发人员,行业平均水平的10倍的加速比。

这个快速迭代周期是由于码头工人缓存前一层的图像,和数据力学平台(部署在Kubernetes)优化快速容器启动和重新启动应用程序。

如何选择你的火花基地码头工人形象吗

现货,NetApp维护公共码头工人的形象与火花,内置Java, Scala, Python, Hadoop和连接器与S3等常见的数据源,GCS, Azure数据湖,三角洲湖等等。我们定期将更新这些图像,每当一个新版本的火花或者包括依赖发表,和测试它们在不同工作负载和环境。

所以我们希望他们只会为你工作,开箱即用的,救你脱离复杂的依赖问题。找到适合你的形象:

  • 如果你是一个地方,NetApp客户,指我们文档。我们的平台图像具有更高的可用性保证,和一些专属平台改进(如Jupyter笔记本支持)。
  • 我们现在免费对我们优化的图像公共DockerHub库。你可以在本地运行火花,Kubernetes,或者在其他架构。

结论

我们已经演示了如何码头工人可以帮助您:

  • 包你的依赖关系和控制你的环境,在一个简单的方法。
  • 遍历代码从IDE通过快速运行引发局部或规模
  • 使火花更可靠和有成本效益的生产。最后,你可以告别缓慢和脆弱的引导脚本和运行时下载!

如果这听起来像是你想尝试在力学数据平台上,订一个演示与我们的团队开始审判现货NetApp -我们将帮助您采用这种Docker-based开发工作流作为一个新员工培训的第一步。

运行火花在Kubernetes在一个码头工人原生和云无关的方式有很多其他方面的益处。例如,您可以使用上面的步骤来建立一个自动化的CI / CD管道火花测试应用程序的构建和部署时提交拉请求修改您的生产管道之一。我们将介绍这个在以后的博文——敬请期待!