使得所有的超级Apache火花毫不费力

0
使得所有的超级Apache火花毫不费力

Apache火花是一件基本的超级大数据的基础设施,我们业务的许多重要方面。我们目前每天运行超过十万火花应用程序,在多个不同的计算环境。火花的多功能性,它允许我们无处不在,我们需要构建应用程序和运行它们,使这种规模成为可能。

然而,我们日益增长的基础设施意味着这些环境是不断变化的,使它越来越困难为新的和现有的用户给应用程序访问数据来源可靠,计算资源和支持工具。同时,随着用户数量的增长,变得更具挑战性的团队沟通这些环境变化用户数据,对于我们理解如何使用火花。

我们建立了这个超级火花计算服务(usc)来帮助管理运行的火花在这种规模的复杂性。这Spark-as-a-service解决方案利用Apache李维在Apache软件基金会,目前正在孵化,为应用程序提供必要的配置,然后安排他们在我们的火花基础设施使用基于规则的方法。

南加州大学现在处理引发电力业务任务的应用程序如骑手和司机价格计算,需求预测,和餐厅的建议,以及重要的幕后等任务ETL操作和数据的探索。南加州大学其他有用的特性引入我们的火花的基础设施,包括可观测性、性能调优和迁移自动化。

使用Apache引发大规模的问题

火花性能一般尺度与增加资源来支持大量并发应用程序。然而,我们发现火花使用以超级增长,用户遇到越来越多的问题:

  • 数据源多样性:火花的应用程序访问多个数据源,如HDFS, Apache蜂巢,Apache Cassandra, MySQL。每个数据源的配置集群和随时间变化之间的不同:暂时或永久的服务的发展由于服务维护或故障。引发用户需要保持他们的配置更新,否则他们的应用程序可能突然停止工作。
  • 多个计算集群:超级计算平台提供支持火花应用程序跨多个类型的集群,在本地数据中心和云。适当的应用程序位置需要用户理解能力分配和数据复制在这些不同的集群。
  • 多个火花版本:引发的一些版本错误,不与特定的服务工作,或者还没有被测试在我们的计算平台。帮助用户解决问题有许多不同版本的火花可以迅速成为一个支持的负担。火花是废弃的旧版本,这可能会有风险和耗时的遗留应用程序升级工作完全在他们当前的版本更新版本的火花。
  • 依赖问题:随着应用程序数量的增加,所需的语言库的数量也会部署到执行人。这就不可避免地导致冲突或升级版本,打破现有的应用程序。

这些问题的累积效应是运行一个火花应用程序需要大量的经常变化的知识,哪个平台团队负责沟通。我们需要确保新用户很容易开始,而且,现有应用程序所有者保持通知所有服务的变化,影响它们。未能及时这样做可能会导致业务中断,严重影响。

这种沟通协调和执行应用程序更改在超级的规模变得笨拙。所以南加州大学地址通过充当中央协调员所有火花应用程序。南加州大学维护的所有环境设置一组有限的火花版本。用户提交他们的火花应用南加州大学,然后启动它代表他们的当前设置。这种方法使得我们更容易协调大规模的变化,而我们的用户可以花更少的时间在维护和更多的时间在解决其他问题。

火花开发工作流程

我们设计了南加州大学,以解决上述问题。解释前南加州大学建筑,然而,我们提出我们的典型火花工作流从原型到生产,在超级展示南加州大学解锁开发效率。

数据探索和迭代原型

典型的火花在超级始于探索开发工作流数据集,它展示的机会。这是一个高度迭代和实验过程中需要一个友好的,交互界面。我们的选择是接口Jupyter笔记本

用户可以创建一个Scala或Python火花笔记本数据科学工作台(DSW)下手,超级的管理一体化的工具箱的交互分析和机器学习

一起看看Jupyter笔记本屏幕
图1:南加州大学使技术团队在超级容易与火花笔记本原型。

在DSW,下手火花笔记本代码完全访问相同的数据和资源作为火花通过开源的应用程序Sparkmagic工具集。这意味着,用户可以快速的获取他们的火花代码,然后轻松转换成生产批处理应用程序。

一个原型转化为一个批处理应用程序

大多数火花应用程序如期在超级运行批处理ETL作业。方法将原型转换为一个批处理应用程序依赖于它的复杂性。如果应用程序很小或短暂的,很容易安排现有的笔记本从内部代码直接DSW使用Jupyter下手nbconvert转换工具。

数据科学工作台屏幕显示表的使用
图2:用户可以为每个运行时间表火花笔记本和检查结果。

对于较大的应用程序中,这可能比工作在一个集成开发环境(IDE)。所以用户可以在IDE开发他们的代码,然后运行它作为一个交互式会话,可以从DSW笔记本下手。这种类型的环境给了他们的即时反馈是至关重要的测试,调试,提高他们对代码的理解。

生产

我们的运行生产火花应用程序的标准方法是安排在一个数据管道风笛手(我们的工作流管理系统,建立在Apache气流)。通过这个过程,应用程序变得丰富的工作流的一部分,随着时间的推移,和基于任务的触发规则。一旦触发条件满足,Piper提交应用程序代表所有者的火花。

监控和调试应用程序

仪表板屏幕显示火花应用信息
图3:乳房内部的数据管理网站显示的信息引发的应用程序。

用户实时监控他们的应用程序使用一个内部数据管理网站,它提供了信息,包括应用程序的当前状态(运行/成功/失败),资源使用和成本估算。如果应用程序失败,这个网站提供了一个根源的分析可能的原因。还有一个链接到火花历史服务器,用户可以通过查看驱动程序和执行程序调试他们的应用程序日志详细。

在超级集群

我们在不同的地理区域维护计算基础设施。每个地区都有自己的份重要的存储服务,比如HDFS,有许多计算集群。共享存储服务在一个地区的所有集群。

服务器和数据来源图
图4:在Uber,每个我们的基础设施的地理区域拥有自己的存储服务和多个mutually-isolated计算集群。

集群有两种主要类型,由资源管理器:

因为共享存储在一个地区,一个计算集群上运行的应用程序应该运行在同一地区内所有其他计算集群。然而,资源管理器功能的差异意味着某些应用程序不会自动工作在所有计算集群类型。与南加州大学我们的目标之一,使火花在我们整个工作无缝大规模、分布式数据基础设施通过抽象这些差异。

南加州大学建筑

我们的开发流程不可能在超级复杂的计算基础设施没有额外的南加州大学提供系统支持。

南加州大学包括两个主要的服务:南加州大学网关Apache李维。南加州大学使用,用户或服务提交一个HTTP请求描述应用程序网关,它明智地决定,以及如何运行它,然后将修改后的请求转发到Apache李维。Apache李维构建一个火花发射命令,注入提供集群范围内的配置,并提交集群代表原始用户。

数据源服务器和网关图
图5:南加州大学网关可以选择运行一个应用程序在任何火花在任何地区集群,将请求转发到该集群的Apache李维部署。

南加州大学网关通过基于规则的决策修改应用程序启动请求接收,并跟踪结果,Apache李维报告。例子决策包括:

  • 特定的集群上运行
  • 火花版本用于给定的应用程序
  • 计算资源分配给应用程序

执行这些决策是基于过去的数据,和正在进行的数据收集可以让我们越来越明智的决定。如果一个应用程序失败,网关自动重播,最后成功的配置(或者,如果它是新的,与原来的请求)。

Apache李维提交每个应用程序集群和监控其状态来完成。我们运行多个Apache李维在超级每地区部署,每个紧密耦合到一个特定的计算集群。因此,每个部署包括地区和提供集群范围内的配置,它注入到它收到的请求。我们还用权威的火花列表配置构建,这意味着我们支持任何火花版本,一个应用程序总是最新的补丁版本运行。

我们已经做了一些修改Apache李维内部,使它更适合超级和南加州大学。这些变化包括。

  • 支持多节点高可用性,通过存储在MySQL和卡夫卡发布事件。
  • 支持选择这火花版本应用程序应该开始。
  • 资源管理器的抽象,使我们能够发射引发Peloton除了纱线上的应用程序。
  • 身份验证方案的抽象。
  • 自动标记更新长时间运行的应用程序。

我们想要接触到Apache李维社区和探索如何促进这些变化。

南加州大学网关提供了休息界面功能与Apache李维的相同,这意味着任何工具,目前与Apache李维(如通信。Sparkmagic)也与南加州大学兼容。

南加州大学示例工作流

为了更好地理解南加州大学是如何工作的,让我们考虑一个端到端的发射火花的例子应用程序。

用户希望火花2.4上运行Python应用程序可能发布以下JSON规范到南加州大学端点:

{

“名称”:“MonthlyReport”,

“文件”:“hdfs: / / / user /试用者,/ monthly_report.py”,

“参数”:[" -city-id”、“729”、“月”、“2019/01”),

:“sparkEnv SPARK_21”,

“队列”:“example-queue”,

“driverMemory”:“8 g”,

“executorMemory”:“8 g”,

“executorCores”: 2

“numExecutors”: 100

}

地区:娜西

集群:01纱01

这个请求只包含特定于应用程序的配置设置;它不包含任何提供集群范围内的设置。这是因为南加州大学将这些配置,允许集群运营商和应用程序所有者相互独立地做出改变。脱钩提供集群范围内设置扮演了一个重要的部分在解决上面所讨论的沟通协调问题。

基于历史数据,南加州大学网关知道这个应用程序兼容新版本的火花,它实际上需要多少内存。也决定应该在Peloton集群运行这个应用程序在不同的区域在同一地区,根据集群利用率指标和应用程序的数据沿袭。由此产生的要求,修改的网关,看起来像这样:

{

“名称”:“MonthlyReport”,

“文件”:“hdfs: / / / user /试用者,/ monthly_report.py”,

“参数”:[" -city-id”、“729”、“月”、“2019/01”),

:“sparkEnv SPARK_24”,

“队列”:“example-queue”,

“driverMemory”:“8 g”,

“executorMemory”:“4073”,

“executorCores”: 2

“numExecutors”: 100

}

地区:娜西

集群:02 PELOTON 05

Apache李维然后构建一个spark-submit请求包含所有选项选择Peloton集群在该区域,包括HDFS配置,火花历史服务器地址,支持库像我们标准的分析器。它适用于这些机械,根据收到的参数和自己的配置;没有决策。然后,它使用spark-submit命令选择版本的火花来启动应用程序。网关民调Apache李维,直到执行完成,然后通知用户结果。

下面的图6显示了这个应用程序的路径摘要启动请求了:

南加州大学网关、Apache李维和资源管理器图
图6:客户的火花应用程序启动请求的路径是通过南加州大学。

此体系结构的优点

我们一直在南加州大学一年多了,积极的结果。南加州大学架构优势提供了从一个更简单的,更标准化的应用程序的提交过程,深入理解如何使用我们的计算平台。

抽象服务配置

南加州大学的引入,前处理配置多样化数据源是一个主要的可维护性问题。南加州大学提供的抽象可以消除这个问题。例如,当连接到HDFS,用户不再需要知道HDFS namenode的地址。我们也可以根据需要改变这些配置促进维护或服务失败所带来的影响降到最低,无需任何更改的用户。

可观察性

在南加州大学之前,我们已经知道我们的用户是谁,他们如何使用火花,或者是他们面临的问题。南加州大学,现在让我们来跟踪每个应用程序在我们的计算平台,它可以帮助我们建立一个数据集合,导致有价值的见解。一些好处我们已经获得的这些信息包括:

  • 看到当应用程序失败,这样我们可以迅速行动:如果这是一个基础设施的问题,我们可以更新Apache李维绕过问题服务的配置。如果这是一个应用程序的问题,我们可以接触影响团队的帮助。例如,我们注意到去年一定份额的应用程序显示一个高失败率。当我们调查,我们发现,这种失败影响了一代的促销电子邮件;一个问题可能服用了一段时间发现。
  • 随着时间的推移认识失败的趋势:当我们收集历史数据,我们可以为用户提供越来越丰富的根源分析。在某些情况下,比如内存不足错误,我们可以修改参数并自动重新提交。
  • 更好地理解火花在超级用法:我们现在构建数据团队最火花产生应用程序以及他们所使用的版本当我们需要引入破坏变化,我们有一个好主意的潜在影响,可以与重用户紧密合作,减少破坏。

仪表和性能调优

处理的应用程序提交,我们能够注入仪器发射。具体来说,我们启动应用程序超级的JVM分析器他们如何使用,这给了我们信息的资源请求。然后我们可以自动调优配置为未来提交为了节省资源利用率而不影响性能。结果,平均应用程序提交到南加州大学现在有它的内存配置调优相比下降了约35%的用户请求。

迁移自动化

我们预计火花应用程序幂等(或标记为非幂等性),这使我们能够实时实验与应用程序。为此,我们推出应用程序更改配置。如果应用程序仍能工作,那么实验是成功的,在未来我们可以继续使用这个配置。如果没有,我们品牌与原配置最小化中断应用程序。

这种实验方法使我们能够测试新特性和迁移的应用程序运行新版本与旧版本的火花。我们也采取了这种方法在迁移应用程序从经典纱我们新的Peloton集群的集群。

互动的笔记本

正如上面所讨论的,我们目前的工作流程允许用户运行交互式笔记本在相同的计算基础设施作为批处理作业。这是可能的因为Sparkmagic运行DSW笔记本和与南加州大学下手,然后代理沟通在Apache李维交互式会话。

启动应用程序通过服务

HTTP接口来南加州大学很容易为其他服务超级直接启动火花应用程序。因此,使用火花现在经过南加州大学的其他服务。最引人注目的服务是超级的风笛手,占大多数的火花的应用程序。打开南加州大学这些服务会导致一个标准化的火花经验为我们的用户,访问所有的上述好处。

特定于应用程序的容器

Peloton集群使应用程序在特定运行,用户创建的容器,包含应用程序需要确切的语言库。南加州大学从这个功能,用户可以利用图书馆,可以相信环境在未来将保持稳定。

我们现在保持我们自己的多个容器,以及它们之间可以选择基于应用程序属性如火花版本或提交团队。如果我们需要升级任何容器,我们将逐步推出新版本,解决我们遇到的任何问题而不影响开发人员的生产力。

前进

南加州大学超级的火花社区提供了许多优点,最重要的是会议操作在我们的大规模的需求。其工作流程让用户可以很容易地将应用程序从实验到生产,而不必担心数据源配置,选择集群,或者花时间升级。

在南加州大学,我们可以支持一组火花版本,集装箱化让我们的用户部署任何他们需要的依赖关系。南加州大学的工具确保应用程序顺利进行和有效地使用资源。建筑让我们不断改善用户体验没有任何停机时间。

在南加州大学导致改善应用程序的可伸缩性和可定制性,我们致力于简化使用火花甚至是超级团队。在未来,我们希望部署新功能和特性,将使更高效的资源利用率和增强性能

我们有兴趣与全球火花社区分享这项工作。请与我们联系如果你想合作!如果工作在分布式计算和数据挑战吸引你,考虑申请角色在我们的团队!

确认

我们要感谢我们的团队成员Felix张,Karthik Natarajan, Jagmeet辛格,Kevin Wang博杨,南珠,杰西卡·陈,陈Kai江,秦和玛雅克邦萨尔。

中国龙水照片InspiredImages / Pixabay

评论