开源大数据Studio应用开发Ap

今天我分享的主题是大数据开发Studio,我们会使用ApacheDolphinScheduler和两款开源的Notebook。我将介绍如何采用开源的ApacheDolphinScheduler调度工具和ApacheZeppelin以及Jupyter两种交互式Notebook组成大数据开发Studio,提供线上开发/调试能力,避免开发环境不一致造成的难以预测问题,从而极大提升大数据作业从编写到调度的开发效率和体验。

高楚枫

GithubID:EricGao

阿里云基础平台开发工程师

毕业于上海交通大学,PurdueUniversity。现任职于阿里云EMR数据开发团队。ApacheDolphinSchedulerContributor,对提升大数据开发效率有浓厚的兴趣。

今天分享将专注于大数据开放的用户体验,包含许多的Demo环节,主要包含以下内容:

本次演讲主要包含四个部分:

大数据开发中的痛点

DS+ZeppelinJupyterNotebook

Studio的云上部署方案体验优化

Demo分享

ApacheDolphinScheduler

01大数据开发中的痛点

对于大数据开发工程师而言,在开发过程中其实也存在许多痛点。我们不希望花太多时间在环境的配置上,我们所理想的环境是运维团队将环境和平台搭好后,大数据工程师可以直接用编辑器或Notebook在上进行大数据作业,如Spark、Shell之类的内容。当下很多大数据工程师很喜欢用本地IDE做一些配置和调试,这就会发生开发环境与线上环境不一致的情况,导致开发效率低下。此外,如果正式到线上进行调度时出现一些bug,会给生产带来不小的损失。

为了能够解决如上开发环境不一致、作业配置复杂零碎、开发效率低、代码迭代速度慢和线上调度时出现难以预测的问题等,我们想出了相应的解决方案。用两个或者多个大数据组件去拼接成大数据开发Studio,调度方面,我们使用的是ApacheDolphinScheduler,提供一个强大的调度功能和可视化的界面。然后在notebook这块我们选用的是ApacheZeppelin或者Jupyter,如果大数据较多的作业,在ApacheZeppelin中开发;如果AI或Python较多,则可以使用Jupyter进行开发。

我们比起商业,提供的方案更倾向于开源,属于轻量级,基本上是由原生的开源内容,进行简单的配置就可以组装起来了。并且这个大数据开发的Studio,具有松耦合的属性,主要通过任务插件的方式去整合DolphinScheduler和Notebook两部分。

?

DS任务插件

链接DS和Notebook的桥梁

?

02DS+ZeppelinJupyterNotebook

01

Zeppelin简介

接下来我将简要介绍一下Zeppelin和Jupyter。Zeppelin是一款这种大数据开发的Notebook,能够提供很好的交互式开发体验,可以在线上做一些的debug操作,并且很快能得到反馈。而且Zeppelin有丰富的引擎支持功能,包括比如ApacheFlink,流式的作业等。在Zeppelin里面跑交互式Flink作业的时候,可以看到动态的数据的变化。此外,我也将详细介绍DSZeppelinTaskPlugin,它有什么样的功能,大概是如何实现的,又能为我们提供怎样的方便。

上图左边就是Zeppelin的界面,其最小的执行单位是Paragraph,形成一个个cell,每个cell都可以进行交互式调试,在跑时都会有相应输出。同时这个Zeppelin还会提供强大的BI功能,即大数据开发完之后呢,可以去利用BI功能生成各种类型的这种图表。

02

Zeppelin架构

我们可以看到在前端的话,会有一个Notebook,将请求发送到ZeppelinServer,ZeppelinServer与Interpreter之间会进行双向交互。Zeppelin的Interpreter也同为插件化架构可以轻松进行扩展。

丰富的引擎支持

DS

Zeppelin有丰富的引擎支持,可以支持Spark、JDBC(PostgreSQL,MYSQL,MariaDB,Hive)、Flink、Python、Shell、HDFS、Hbase等。如果您本身就是Zeppelin的用户,那只要去开发各自的Zeppelin作业,然后用DolphinSchedulerZeppelin插件一键调度即可,大大减少开发成本。

03

DSZeppelin任务插件

这个界面就是DSZeppelin的任务插件,我们进入到创建工作流的这个界面中,可以去拖取Zeppelin的插件,我们需要填入的内容其实也很简单,分别是ZeppelinNoteID和ZeppelinParagraphID。目前最新版本的可以不填入ParagraphID,调度的范围也就是整个Note。然后下面parameters对接的是Zeppelin的Dynamicform的功能,它可以去传入一些这个动态的参数。可以和DS内置的一些时间参数去进行整合。

04

JypyterNotebook简介

对JypyterNotebook熟悉的人可能比Zeppelin要多一些,因为它有非常丰富的生态和庞大的用户群体,主要面向AI工程师、数据科学家,还有一些做数据分析的人。可能很多人都用过这个工具,右侧的截图是jupyter-lab,另外也有jupyternotebook等。

因为Jupyter的生态非常的丰富和庞大,我们做的东西可以说在生态上打通了这两个开源项目,起到了一个相互引流的作用。我还会介绍一下DSJupyterTaskPlugin的一些实现方式(papermill)、配置、Parameterization、分布式环境中依赖管理等。

05

Jupyter架构Papermill

我们在DSJupyterTaskPlugin中使用Papermill去执行JypyterNoteBook。

在架构上,前端的话也是一个Notebook,和Zeppelin比较相似,后端的话是一个NotebookServer,它会去取这些NotebookFile,然后放到Kernel里去做执行,最后把这个结果返回给用户。

Papermill本身是一个单独的一个工具,它并不需要去依JupyterNotebookServer,即便你的这个集群上没有JupyterNotebookServer,都可以通过Papermill去执行。同时Papermill也可以进行自由扩展。

06

DSJupyter任务插件

如图你需要填的就是Kernel环境,然后你的NotebookInputPath和OutputPath,就如刚才说的那样,如果这个Note在本地的话,填入一个本地路径即可。如果你的Note是在S3上,就去填它在对应的对象存储里的位置即可。

然后我们的Jupyter任务插件是支持参数化的,可以在Notebook里面给Cell去设置传入参数,就可以实现批量调度作业,根据你传入的参数不同,它会编译不一样的这个Template,从而定时批量地生成多个报表等。

07

分布式环境下的Python依赖管理

为了解决用户分布式环境下,依赖环境的管理,DSJupyter插件提供给用户多种选择。

方法1:手动/shelltask安装conda环境,编辑作业时切换

方法2:资源中心-(condapack)预先打包环境上传至资源中心,编辑作业时切换

方法3:资源中心-预先上传requirements.txt至资源中心,编辑作业时切换,临时构建

可视化的python依赖管理

DS

如上图即为管理python依赖的方式,你可以选择这个tar包,也可以选择requirements.txt文件,然后会根据你选的后缀,去判断你是选择的是哪种依赖管理的方式,然后自动去进行一些处理。你只要专注于任务即可,不需要去花时间在环境的管理上。

03云上部署方案后续优化

01

Studio云上部署方案

因为Studio会有很多组件,包括DolphinScheduler和两款Notebook,在登录认证的时候我们可以进行统一的鉴权认证,就是可以去对接LDAP,如果想实现singlesignon可以考虑KNOXSSO。

如果你在云上进行部署,你会遇到多集群切换的问题,DolphinScheduler本身带有环境管理,但在云上多多少少还是要需要一些二次开发,需要把那个目标机器上的环境自动的同步过来,包括一些架包需要自己实现。你也可以通过Zeppelin去对接多集群。

元数据的存储的话,你可以去存储到本地的MySQL或者PostgreSQL,或者一些其他的方案,比方说一些分布式的云上数据库等。

资源中心对接对象存储,DolphinScheduler本身即使支持HDFS,另外还支持一些如S3、阿里云oss之类的对象存储,这样可以保证你的所有资源都可以在云上对象存储中统一管理,不会出现类似集群释放后你的资源就就消失的情况。

Log也可以存储在对象存储中,但这个feature目前社区还在讨论中,没有实现将接口抽象出来,去对接云上的对象存储(比如s3或oss),当前需要这个功能只能自己二次开发了。

云上的监控和告警,目前可以使用Prometheus和Grafana的方案,这两个组件都是开源的,并且一脉相承,DS社区目前也在进行metrics的开发工作,第一期已经收尾(中英文档均已补全),欢迎大家体验:


转载请注明:http://www.aierlanlan.com/rzdk/305.html