关闭微信号码
微信号:
微信二维码图片
微信扫以上二维码 或 手工输入以上微信号加我
一定要告诉我【从大洲助孕看到的】否则拒绝
信息详情
  当前位置:首页 -> 温州代妈 -> 开源大数据 Studio 应用温州卵子库开发: Apache
开源大数据 Studio 应用温州卵子库开发: Apache
【应聘提醒】 凡是以任何理由向求职者收取服装费、培训费、押金等各种费用的信息均有欺诈嫌疑,请保持警惕!建议多家咨询对比,寻找有通过身份证+执照验证的招聘信息。
会员级别: (到期时间:终身)
置顶情况: 未置顶
公司名称:
认证情况:

未上传身份证+营业执照

未通过身份证+营业执照认证

应聘电话: 打电话给我时,请一定说明在  温州代妈  看到的,谢谢!
联系微信:
  • 只要会打字,动动鼠标、传点图,就能在1分钟内拥有自己独立的代妈站(PC+手机版)点击右侧立即入驻 →
点击注册图片

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

  高楚枫

  Github ID:EricGao888

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

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

  “

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

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

  01 大数据开发中的痛点

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

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

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

  ?

  DS任务插件

  链接DS和Notebook的桥梁

  ?

  01

  Zeppelin简介

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

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

  02

  Zeppelin 架构

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

  丰富的引擎支持

  DS

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

  03

  DS Zeppelin 任务插件

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

  04

  Jypyter Notebook简介

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

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

  05

  Jupyter架构&Papermill

  我们在DS Jupyter Task Plugin中使用Papermill去执行Jypyter NoteBook。

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

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

  06

  DS Jupyter任务插件

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

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

  07

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

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

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

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

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

  可视化的python依赖管理

  DS

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

  03 云上部署方案&后续优化

  01

  Studio云上部署方案

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

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

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

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

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

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

  当然除了自己的搭建云上部署外,也可以考虑直接使用云厂商的解决方案,比如说AWS或者阿里云的EMR Studio等产品。

  02

  云上部署方案推荐架构

  将Studio单独部署在一个集群上,里面放上DolphinScheduler和Zeppelin,其中还是需要一些二次开发去打通Studio和VPC下的具体集群。对于Studio中的log可以直接打到对象存储中,metadata存在MySQL数据库中或者其他云上数据库;监控告警则可以使用Prometheus搭配Grafana的方案。

  这个是Zeppelin对接多集群的二次开发,如图你可以在该位置进行集群切换。

  03

  后续优化

  其实这种方案后续还是会有很多可以优化的点的,因为Notebook本身其实并不是为生产中大规模调度去设计的,所以我们可以在Notebook这一侧去加一些稳定性的机制,让它更适合被调度。比如最简单的一点,在UI上面加一个锁,或者加一个按钮去判断这个Note是否处在被调度的状态,如果出于调度中就在UI上将他锁住,这样用户的话就无法更改被调度的Notebook了。目前在社区正在改进Zeppelin插件,调度时会复制出一份拷贝Note去执行,避免因为Notebook侧的修改影响调度,造成不一致的问题。

  另外一方面尽量的去减少Notebook的链路,或者在这个调度模式下有专门的作业提交链路,从而减少由于链路过长而导致的一些不可预知的问题。

  在DS这一侧,我们可以做很多UI 的优化,比如说用户把这个notebook的ID或者paragraph ID填入入之后,生成一个链接可以直接跳转到对应的notebook页面,这样无论调度过程中出现什么问题,可以较容易地在两个UI之间进行切换,

  04 Demo分享

  首先我们看一下这个一个简单的Zeppelin的实例,这是一个ETL的作业,像这第一个Paragraph,它就是一个markdown,我们去运行它。就可以简单地编译出来。第一个cell我们可以生成一些数据。

  然后我们把生成的数据漏到Hive表里,可以看到运行是非常快的,方便我们debug。

  接下来我们可以将生成的csv格式转换成为parquet格式。这一步可能不太稳定,因为这是我临时搭的环境。

  轮询完成后就可以在这里查询到我们转换的数据。这就模拟了我们ETL的开发过程,当我们通过这个交互式的Notebook,很方便的把这个作业开发出来之后,怎么样在DolphinScheduler 里进行调度呢?

  我们来到DS 这一侧,创建了一个demo的项目。工作流定义——创建工作流。

  此处我们将Zeppelin拖动过来。节点名称随意,我们有许多项目可以选择,在Zeppelin这一侧只要拿到ID 即可。在网页url最后一段可获得。

  然后在Zeppelin和DS侧都可以到任务运行的进度。

  这个是Jupyter LAB,我们把它起来之后,可以看到一个Notebook界面。

  在这个note中,我们从远端服务器(并获取一些天气相关的数据,然后做一些简单的处理,最后得出关于一座城市天气的预测,画出温度、降水趋势变化图,最后的话会生成一个总结性的weather forecast report。

  在这边的话,我们可以定义一些参数,就比如说我同时要生成多个城市天气预报,我们就可以在从这里传入参数,在DS侧去调度它的时候,可以同时定义多个Jupyter Task,然后从DS侧传入不同的参数,这样它就可以同时批量生成不同城市的天气预报。

  然后每个cell都是打tag的,如这个cell打了一个parameters的参数,打了之后的话,我们就可以通过papermill往里面做参数传递了。

  这就是我们生成的一个HTML格式的文件,其实从刚才demo过程中出现的问题和解决过程中,大家也能看到这个Jypyter Task Plugin优势在于,即便你这个本机的jupyter-lab挂掉了,依然不会影响我们的调度,因为Papermill执行note时并不依赖于jupyter lab。

  感谢大家的聆听,我今天的分享就到这里。

  参与贡献

  随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

  参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

  贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

  社区汇总了以下适合新手的问题列表:

  非新手问题列表:

  如何参与贡献链接:

  来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

  参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

  ?达人专栏 | 还不会用 Apache Dolphinscheduler?大佬用时一个月写出的最全专业教程【四】

  ?当 Apache DolphinScheduler 遇上 MLOps,机器学习模型部署到生产环境更快、更安全

  ?日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?

  我知道你在看哟



联系我时,请说是在大洲助孕看到的,谢谢!
相关温州代妈信息