Netflix上的Jupyter Notebook

最近,Jupyter Notebook已在数据科学专家中变得非常流行,已成为快速原型设计和数据分析的事实上的标准。 在Netflix,我们试图通过重新思考Notebook的功能,可以使用的人以及他们可以做什么来进一步扩展其功能的界限。 我们付出了很多努力将我们的愿景变成现实。


在本文中,我们想告诉您为什么我们认为Jupyter笔记本如此吸引人,并一直激励着我们。 此外,我们描述了基础架构的组成部分,并回顾了在Netflix中使用Jupyter Notebook的新方法。



译者注:小心, 很多文字,很少图片


如果您没有太多时间,建议您立即转到“ 用例”部分。


为什么要这样?


数据是Netflix的力量。 它们渗入我们的思想,影响我们的决定 ,并挑战我们的假设 。 他们负责实验和以前所未有的规模 出现一个新的 实验 。 数据使我们能够发现意想不到的含义,为全球 1.3亿用户提供令人难以置信的个性化体验


使所有这些成为现实是一项巨大的成就,需要令人印象深刻的工程和基础架构支持。 每天,流(流摄取管道)中接收的事件超过1万亿个,该事件经过处理并记录在100PB云存储中。 每天,我们的用户都会对这些数据执行超过150,000个任务,涵盖从报告到机器学习以及推荐算法的所有内容。


为了支持如此大规模的使用场景,我们构建了业界最佳的解决方案之一,它是一个灵活,功能强大且必要时还可以使用的复杂数据处理平台(Netflix Data Platform)。 我们还开发了其他工具和服务,例如Genie (任务执行服务)和Metacat (元存储)。 这些工具降低了复杂性,从而有可能支持整个公司范围内的更多用户。



用户的多样性令人印象深刻,但您必须为此付费:Netflix数据平台及其工具和服务的生态系统必须扩展以支持其他使用方案,语言,访问方案等。 为了更好地理解该问题,我们考虑三个常见职位:分析师工程师,数据工程师和数据科学家。



不同职位对语言和工具的偏好差异

通常,每个职位都喜欢使用自己的一套工具和语言。 例如,数据工程师可以使用IntelliJ中的Scala创建一个包含数万亿个事件流的新数据集合。 分析师可以使用SQL和Tableau在新的全局流质量报告中使用它们。 该报告可以交给数据科学家,后者将使用R和RStudio构建新的流压缩模型。 乍一看,这些过程看起来是零散的,尽管是互补的,但是如果您更深入地看,这些过程中的每一个都有几个重叠的任务:

数据探索 -在项目的早期阶段进行; 可能包括样本数据概述,用于统计分析和数据可视化的查询

数据准备 -一项重复性任务,可能包括清理,标准化,转换,反规范化和汇总数据; 通常是项目中最耗时的部分

数据验证 -定期发生的任务; 可能包括抽样数据调查,统计分析,汇总分析和数据可视化; 通常发生在数据探索,数据准备,开发,部署前和部署后的一部分

生产化 -在项目后期进行; 可能包括代码部署,样本添加,模型训练,数据验证和计划工作流程


为了扩展用户的功能,我们希望使这些任务尽可能简单。
为了扩展我们平台的功能,我们希望减少需要支持的工具数量。 但是如何? 没有任何一个工具可以涵盖所有这些任务。 此外,一项任务通常需要使用多种工具。 但是,如果我们脱离接触,所有工具和语言都会出现一个共同的模式:执行代码,检查数据,显示结果。


碰巧的是,为此专门开发了一个开源项目: Jupyter项目


Jupyter笔记本




Neract中的Jupyter笔记本显示VegaAltair


Jupyter项目于2014年启动,其目标是创建一套一致的开源工具,用于研究,可重复的工作流程和数据分析。 这些工具已受到业界的高度评价,如今Jupyter已成为任何数据科学家工具包不可或缺的一部分。 为了了解他的影响力程度,我们注意到Jupyter被授予2017 ACM软件系统奖 ,这是他与Java,Unix和the_Web共同享有的声誉。


要了解为什么Jupyter Notebook对我们如此有吸引力,请考虑其主要功能:

  • 用于分析和执行代码的消息协议,与语言无关
  • 文件格式,具有编辑,描述,显示和执行代码,输出和降价注释的能力
  • Web界面,用于交互式编写,代码执行和结果可视化

Jupyter协议为标准消息传递API提供了内核,这些内核充当计算模块并提供了可组合的体系结构,从而共享了代码(UI)的存储位置和执行位置(内核)。 因此,笔记本电脑将接口和核心分开,可以在保持运行时配置灵活性的同时以多种语言工作。 如果存在可以使用Jupyter协议交换消息的语言,Notebook可以通过向该内核发送和接收消息来执行代码。


除所有内容外,文件格式还支持所有这些功能,该文件格式允许您将代码本身及其执行结果存储在一个位置。 这意味着您可以稍后查看执行结果,而不必重新启动代码本身。 笔记本还可以存储有关上下文及其内部实际发生情况的详细描述。 这使其成为传达业务上下文,修正假设,对代码进行注释,描述结论等的理想格式。


用例


在许多方案中,最流行的用例是:数据访问,笔记本模板和计划笔记本。

资料存取


Jupyter Notebook最初出现在Netflix上是为了支持数据科学工作流程。 随着它们在数据科学专家中的使用不断增长,我们看到了扩展工具功能的潜力。 我们意识到,我们可以使用Jupyter Notebook的多功能性和体系结构,并扩展其数据共享功能。 在2017年第三季度,我们认真地开始致力于将Notebook作为一种工具,供一小部分专家使用,使其成为Netflix数据平台的一流代表。


从用户的角度来看,笔记本电脑提供了一个方便的界面,用于交互式命令执行,输出研究和数据可视化-都在一个云开发环境中进行。 我们还支持Python库,该库结合了对平台API的访问。 这意味着用户可以通过Notebook以编程方式访问几乎整个Netflix平台。 得益于灵活性,强大功能和易用性的完美结合,该公司的各类平台用户使用量均急剧增加。


如今,笔记本电脑是Netflix中最受欢迎的数据工具。


笔记本模板


随着对该平台内Jupyter Notebooks的支持的扩展,我们开始引入新功能以使用它来满足新的使用场景。 从这里来了参数化的笔记本电脑。 参数化的笔记本电脑确切地代表了它们的名字:笔记本电脑,允许您在代码中设置参数并在运行时接收输入。 这为用户提供了一种将笔记本定义为可重用模板的良好机制。


我们的用户发现了许多使用这种模式的方法。 我们列出了一些最常用的:

  • 数据科学家 :使用不同的系数进行实验并总结结果
  • 数据工程师 :作为部署过程的一部分,执行数据质量审核的集合。
  • 数据分析师 :共享准备好的查询和可视化,以便利益相关者可以探索比Tableau允许更深入的数据
  • 软件工程师 :发送脚本结果以解决崩溃问题

计划笔记本(计划程序)


使用Notebook的原始方法之一是创建用于调度工作流的合并层。


由于每台笔记本电脑都可以在任意内核上运行,因此我们可以支持任何用户定义的运行时环境。 而且由于笔记本描述了一个线性执行流程,该流程分为多个单元,因此我们可以将故障与特定单元相关联。 这允许用户以更具叙述性的形式描述执行和可视化,可以在以后的启动时准确地捕获它们。


这种范例使您可以使用笔记本电脑进行交互工作,并平稳地切换到计划程序的多次执行和使用。 事实证明,这对用户非常方便。 许多用户仅在笔记本中创建整个工作流,然后将它们复制到单独的文件中并在适当的时间运行它们。 通过将笔记本作为顺序的过程描述,我们可以轻松地安排它们像其他任何工作流程一样运行。


我们可以计划通过笔记本执行其他类型的工作。 从调度程序执行Spark或Presto作业时,会将源代码插入到新创建的笔记本中并执行。 该笔记本将成为一个历史存储库,其中包含源代码,参数,配置,执行日志,错误消息等。 故障排除时,这是进行调查的快速起点,因为所有相关信息都在内部,并且笔记本电脑可以运行以进行交互式调试。


笔记本基础设施


在Netflix规模上支持上述方案需要广泛的支持基础架构。 简要介绍将在以下各节中讨论的几个项目:


nteract是用于Jupyter笔记本电脑的基于React的新一代UI。 它提供了一个简单直观的界面,并为经典的Jupyter UI提供了一些增强功能,例如嵌入式单元格工具栏,拖放单元格和内置资源管理器。


Papermill库,用于Jupyter笔记本的参数化,执行和分析。 借助它,您可以传播带有各种参数的多个笔记本并同时执行它们。 Papermill还允许您收集和汇总整个笔记本集合的指标。


Commuter是一种轻便的,可垂直扩展的服务,用于查看和共享笔记本。 它为内容提供了与Jupyter兼容的API版本,并使其易于读取本地存储在Amazon S3上的笔记本。 还提供用于浏览和共享文件的资源管理器。


Titus是一个容器管理平台,可提供可扩展且可靠的容器启动以及与Amazon AWS的云原生集成。 Titus是在Netflix上开发的,用于战斗中以支持Netflix流,推荐和内容系统。


可以在Netflix上的“ 计划笔记本”中找到对该体系结构的更详细描述。 出于本文的目的,我们将自己限于系统的三个基本组件:存储,执行和接口。




Netflix上的笔记本基础架构

贮藏


Netflix数据平台使用Amazon S3和EFS云存储,笔记本将其视为虚拟文件系统。 这意味着每个用户都有一个EFS主目录,其中包含笔记本的个人工作区。 在此空间中,我们存储用户创建或加载的所有笔记本。 当用户以交互方式启动笔记本电脑时,这也是进行读写的地方。 我们将[workspace + filename]组合用于命名空间,即 /efs/users/kylek/notebooks/MySparkJob.ipynb用于查看,共享和在执行调度程序中使用。 这样的协议可以防止冲突,并有助于识别用户和EFS中的笔记本电脑位置。


工作空间的路径使您可以忽略用户云存储的复杂性。 例如,仅笔记本文件的名称显示在目录中,即 MySparkJob.ipynb。 可以通过终端使用相同的文件:〜/ notebooks / MySparkJob.ipynb。



笔记本电脑存储与 访问


当用户设置启动笔记本的任务时,调度程序将用户的笔记本从EFS复制到S3上的共享目录。 S3中的笔记本成为调度程序或源笔记本的真实来源。 每次调度程序(调度程序)启动笔记本时,它都会从源中创建一个新的笔记本。 这个新笔记本实际上是启动的,并成为特定执行的不变记录,其中包含每个单元的可执行代码,输出和日志。 我们称它为输出(output)笔记本。


共创是Netflix的一项基本功能。 因此,用户开始交换指向笔记本的URL链接就不足为奇了。 随着这种做法的发展,我们面临着由多个用户同时访问同一笔记本引起的意外重写问题。 我们的用户想要一种以只读模式共享其活动笔记本的方法。 这导致了通勤者的诞生 。 在后台,通勤者显示Jupyter API以列出目录列表中的/文件和/ api /内容,以查看文件的内容并访问文件元数据。 这意味着用户可以查看笔记本而不会对战斗任务或实时运行的笔记本造成任何影响。


计算


管理计算资源是处理数据中最困难的部分之一。 在Netflix中尤其如此,我们在AWS中使用了高度可扩展的容器架构。 数据平台上的所有作业都在容器中执行,包括查询,管道和笔记本。 自然,我们希望尽可能地从这种复杂性中抽象出来。


用户启动笔记本服务器时,将提供一个容器。 我们为适用于约87.3%执行模式的容器资源提供了合理的默认值。 如果这还不够,用户可以使用简单的界面请求更多资源。



用户可以根据需要选择尽可能多的计算+内存


我们还提供带有完成的容器映像的统一运行时。 该映像具有共享库和一组预定义的默认内核。 并非图像中的所有内容都是静态的-我们的内核为我们的平台使用了最新的Spark版本和最新的集群配置。 这减少了新笔记本电脑的混乱和调整时间,通常使我们处于单一运行时环境中。


后台 ,我们使用Docker容器管理服务Titus管理业务流程和环境。 我们还为此服务创建了包装器,以管理特定的用户服务器配置和映像。 该映像还包括用户安全组和角色,以及用于在包含的库中进行标识的通用环境变量。 这意味着我们的用户可以在基础架构上花费更少的时间,而在数据上花费更多的时间。


介面


之前,我们描述了我们的愿景,即笔记本应该是处理数据的最有效和最佳工具。 但这提出了一个有趣的挑战:一个界面如何支持所有用户? 我们不知道确切的答案,但是我们有一些想法。


我们知道需要简单。 这意味着具有简约风格的直观UI,并且还需要周到的UX,使复杂的事情容易实现。 这种理念非常适合在Jupyter笔记本的React前端上编写的nteract的目标。 它强调可组合性是设计的基本原则,使其成为我们愿景的理想组成部分。


用户最常抱怨的是,所有语言(尤其是非Python语言)缺乏本机可视化。 Nteract的Data Explorer是一个很好的例子,它通过提供一种独立于语言的方式来快速浏览数据,从而使复杂的事情变得容易。


您可以在MyBinder上查看此示例的实际数据浏览器。 (加载可能需要几分钟)



使用nteract的数据浏览器可视化世界幸福报告数据集


我们还引入了对参数化的内置支持,从而简化了启动笔记本的计划并创建可重复使用的模板。



对Nteract中的参数化笔记本的本地支持


Jupyter notebook , . , notebook. 12 , . , , , . , , Spark DataFrames, Scala. .


Open Source Projects


Netflix . , , . Netflix Data Platform Netflix OSS . “Not Invented Here”. Spark , Jupyter pandas .


, , Jupyter Project, . , nteract notebook UI Netflix. , . , Jupyter Notebook, , , . nteract.


, Netflix, . , , , , . , Papermill, .




What's Next ( )


, – (Netflixers) . Notebook Netflix. , . , .


! . , notebook. notebook Netflix, . :

I: Notebook Innovation ( )

II: Scheduling Notebooks



:

Scheduling workflows , — .

Source: https://habr.com/ru/post/zh-CN439272/


All Articles