文档章节

深入阿里云大数据IDE–MaxCompute Studio

大大梁
 大大梁
发布于 2017/05/10 17:09
字数 4353
阅读 2
收藏 0
点赞 0
评论 0

本文根据演讲视频整理而成。

本次将与大家深入地分享阿里云数加平台的大数据开发套件——MaxCompute Studio。其实对于开发者而言,在大数据开发、数据处理以及管理作业时经常会使用到IDE,而在阿里巴巴内部也有上万名大数据开发者,他们也会使用数加平台,也就是阿里巴巴统一的计算引擎——MaxCompute,在MaxCompute之上其实存在一个统一的数据仓库,这个数据仓库中包含了阿里巴巴全部的数据,各个事业部都可以利用数加平台进行大数据应用的开发。而MaxCompute Studio就是针对于MaxCompute的大数据开发套件。

我们为什么需要Data IDE

e722eb9099fca0d55ada97e0addf4c5688193695

如同编写Java或者其他语言的程序一样,开发者一开始可能会使用文本编辑工具来编写程序,但是随着需要处理的任务变得越来越复杂,就可能会需要使用IDE。同样在数据发展到足够复杂的时候,需要处理的数据也变得非常多,这些数据往往需要用不同的模式进行处理,所以在进行数据处理时往往需要这样的IDE去帮助开发者完成工作。在整个数据平台里可能会存在数据的采集和传输过程,但是对于开发者而言,在真正在线上进行数据处理的时候,可能需要一些使用工具把数据漏到开发环境中,然后在本地进行做工作来验证数据处理逻辑,这样就可以实现在真正的计算环境和数据仓库中进行验证。除此之外,当作业出现问题的时候也需要有足够好的工具进行分析和管理。这些其实都是对于开发者而言需要面对的问题,所以阿里云也希望通过统一的开发工具或者IDE环境来解决上述的问题。

大数据开发套件:MaxCompute Studio
本次分享将为大家介绍目前阿里云在大数据开发中使用的一种工具——MaxCompute Studio,这个工具是面向MaxCompute计算引擎开发的数据处理开发工具,但是目前还不能够覆盖像实时处理以及ADS这些其他的计算引擎,现在只支持离线计算这部分,但是之后或许能够推广到更大的范畴中。

fc7174b981c32978da923dbcaf889aa18e9c3d55


今天的分享将主要围绕以下三个方面为大家介绍大数据开发套件MaxCompute Studio的几个特点以及其背后的实现技术。

99c925839148a96f73b13369bb3190ae2fd4ecdc

  1. 智能编辑器,本质上而言MaxCompute Studio是一个IDE,如同在编写C++或者Java程序时需要用到IDE一样,编写离线数据处理中常用的SQL以及Hive也需要一个智能编辑器,MaxCompute Studio是基于MaxCompute 2.0新一代引擎的编译器,可以提供上下文相关的代码补全、实时错误提示以及本地编译。
  2. 调试器,当代码出现问题时,开发者可以通过MaxCompute Studio进行远程的调试和处理。MaxCompute Studio可以建立IDE与远程计算集群的安全调试通道,并提供一键触发调试在集群中失败的任务的功能。
  3. 作业分析,MaxCompute Studio除了可以帮助开发者进行调试外,还可以进行相关的问题分析,也可以为开发者提供一些相关视图和分析工具,可视化地展现数据作业的执行计划,通过快速回放、关键路径分析等帮助用户定位性能问题。

 

智能编辑器-SQL

7bcd3bddcbd7e955448cc3708ad7ea5fe6d1c45c

首先谈一下智能编辑器,因为对于离线数据处理而言,主要面对的是SQL开发,很多数据分析师以及数据处理或者应用的开发者都会涉及到写SQL程序,而且在MaxCompute平台上可能还会支持使用Java或者Python写一些数据的处理逻辑,这时候IDE可能会更加适合这样的场景。因为可能需要写SQL、Python、Java等,而其实这些都可能通过传统的IDE提供很多非常成熟的功能,比如IDE往往会对于Java程序开发的一些模板和语法提供支持,但是对于SQL而言,就需要通过统一的数据仓库和数据引擎结合起来对于已有的开发环境进行扩展,MaxCompute Studio的扩展是在目前比较流行的IntelliJ开发平台进行的。之所以选择IntelliJ是因为其有比较完备的支持扩展的机制,可以在这个IDE上面扩展出MaxCompute引擎所支持的语法特性。可以看到MaxCompute Studio可以支持SQL的语法以及语法的高亮,还可以实现代码补全等功能。开发者可能对于SQL的语法并不熟悉,而MaxCompute Studio则可以给出关键词提示。更重要的是在MaxCompute Studio中可以集成元数据,这样就可以在编写SQL语句时可以自动帮助开发者对于表格、字段以及函数进行提示。另外一点就是对于大型作业而言,往往提交到服务器之后执行了几个小时发现一个语句出错造成了整个作业的失败,而这些数据也都白跑了,并且这个错误往往是一个非常简单的类似于数据类型不匹配的错误,其实在本地可以通过IDE提示发现这个表不存在或者该列类型与所需类型不匹配的问题,开发者可以立即发现错误并随时进行修改。综合起来,在MaxCompute Studio中写SQL以及在SQL里面嵌入Java或者Python的逻辑代码以后仍然可以在统一的IDE中进行编译,这部分的编译是与在服务器端的语法检查、类型检查以及更加复杂的一些逻辑判断一致的,而这些工作也都可以在本地进行,并且发现问题可以直接跳转到相应的地方进行修改,这样就可以大大减少数据的提交次数。其实有时对于一些数据计算而言,可能是需要付费的,这样就节约了成本,而在比如在像阿里这样公司中,虽然提供了统一的资源供大家使用,但是总是在平台上运行错误的代码可能就会造成资源的极大浪费,如果能够在本地进行检查就可以大大降低资源的消耗并且提高效率。

智能编辑器背后的编译器支持

99cc47acb3a816b8a85b8d23c33725ce6365befc

接下来分享一下做智能编辑器这件事情的背景以及其背后所使用的技术。选择在本地实现IDE其实有一个非常大的技术优势,就是本地其实具有比较强大的计算资源。而IDE对于SQL代码在本地其实是进行了预编译的,这样就将源代码转化成了语法分析树,在语法分析树之上可以抽象出逻辑的处理单元AST。之后就可以根据抽象语法树进行语法的判断,可以通过语法分析树进行类型检查。而又因为在建立了树型结构之后就可以方便地对于树进行多次遍历,所以可以通过类型检查发现语法中的错误。

所以目前就是在本地的后台就做了这样的几件事情:首先通过语法分析器和词法分析器生成了语法分析树,然后通过上下文无关文法也就是在MaxCompute中对于SQL定义的语法和扩展可以很方便地在IDE里面提供语言的新特性,比如在SQL里面要增加if-else或者loop这样语法其实只需要去更新上下文无关文法就可以了,这样就可以生成出所需要的后台表示,然后再进行相应的处理。

1c4def4f35c0103c88359b9caed612ae5c0154b7

对于具体问题而言,比如要实现刚才提到的语法高亮就需要考虑这样的几个层次,最简单的就是目前任何一个SQL都可以支持的关键词的词法高亮,但是在MaxCompute Studio中会更进一步。其实实现关键词的语法高亮很简单,只需要断出Token就可以了,但是还需要实现基于Parse Tree的语法高亮,再往后就需要实现基于AST的类型检查的语法高亮,比如图中的if是一个函数,其参数需要字符串的类型,那么此时就需要后台的抽象语法树进行判断是不是这个类型并标注相应的颜色。

7631a1a452b4a3de12d314b90ce79c9615cb4e53

在此基础之上,MaxCompute Studio还实现了很多更好用的特性,比如开发者写出关键词之后IDE就能提示和补全,而且实际上这个功能还可以做的更加智能,可以根据语法文件构建有限状态自动机并根据用户输入的上下文提供智能提示。因为IDE的后台存在语法树所以就可能判断出用户所输入的上下文是什么,而这并不任何一个编辑器都能做到的,只有真正懂文法的编辑器才能够做到。

ca713f36948dbfb98fcf26a1689030eae815c79d

刚才也提到了要对元数据进行处理,而在阿里巴巴会有一个整体的元数据仓库去管理全部的元数据。如下图所示一个项目中会有数千个project,每个project里面都会有自己的table和scheme。在本地其实可以通过缓存知道你所关心的project的元数据是什么样的,这样就可以根据元数据为编辑器提供智能化支持。

dc3adb8f9c8c8fa945740a00f47f0fe42fc43e3e

当然这里往往就会存在元数据更新的问题,比如开发者下载了一个本地的备份,而其他的同学更新、创建或者删除了一个表,那么已经下载的元数据如何进行更新呢?其实MaxCompute Studio也提供了几个机制进行更新,当开发者自己意识到自己的数据不是很新了,那么就可以进行手工地更新元数据,但是这样也无法保证本地的元数据是完全正确的,当进行编辑的时候IDE会进行语法检查,会去检查表格存不存在以及列的类型是否匹配,当出现问题的时候,IDE会自动地去服务器端将期望的元数据进行更新,可能错误开始时提示表格不存在,但是当拿到元数据之后这个错误可能就没有了。其实这样的错误在开发其他程序时也会用到,比方在开发Java程序时会引用第三方的库,而第三方库可能本身并没有下载,所以会出现某个类找不到的问题,但是当配置了Maven等库管理之后就可以自动地去做更新,这样就由原来有错变成没错了。

MaxCompute调试器

d9cb854663183192c8d4f1926c00b0132c53ae58

接下来分享在MaxCompute Studio中可以实现的调试器。当出现了任务失败的情况下,可以在IDE中看到失败的任务,然后进行DeBug,这时候在后台其实会在真正的计算集群上面重启了错误的节点,并对于出现错误的节点进行断点监听,然后在IDE中发起DeBug的会话,并通过IDE端口进行与服务器端的连接,并在服务器端重新运行出现错误的代码片,在这个地方利用IDE本身的调试器检查代码的逻辑并进行单步跟踪。其实在真正进行本地开发时会发现这是一个非常重要的问题,就是在本地运行时无错误,但是在服务器端运行数据时出现了错误,这时候开发者往往会非常头疼,因为可能是环境的问题或者是出现了脏数据等造成的影响,而通过IDE就可以很方便地对于问题进行定位。

对于调试器的方案设计可能就有以下的几种了。其实可以下载VM到本地,将计算节点复制一份就可以反复运行任务,或者在本地模拟一个计算环境,但是这些都不是非常完美的解决方案,都有缺点存在。可能需要下载非常庞大的环境,比如像阿里的计算节点往往有非常庞大的运行环境,所以不会很容易就下载下来。而本地运行可以做非常简单的计算环境,但是往往却和服务器端不完全一样,也无法完全复现这个问题,所以选用了Remote Attach,当出现问题的时候可以与服务器端进行Attach。

3f71e91c1352f35cd416b991270c523a2fc746be

要实现上述的功能其实可以将IDE与服务器端的DeBug连接,因为计算节点要想启动一个进程可能需要拉起的服务,所以可以与服务器端进行通信进行连接。但是要想真正地去部署时往往会出现很大的问题,因为本地和服务器端网络往往不是联通的,并且还存在安全认证的问题。为了解决安全认证连接的问题,可以现在服务器端进行安全的认证,然后通过中间的Proxy对于请求进行连接。

79628c5bac2ef2e3f056183e58a609f95e391b30

所以这样就解决了在分布式中如何在上万台机器的集群中重启UDF的JVM的环境,因为可能有数据处理的中间文件,如何将这些保存起来,以及如何支持多个用户DeBug的Proxy的扩展也是实现上的难点问题。

b6c6c6e9aeda6ad4a76206c1871c937eddd92e0c

同样在IDE里面因为有元数据,所以可以与服务器端进行连接,可以看表格或者函数的详细信息,这样在开发时就可以轻松地获取所拥有的数据信息,如果没有数据还可以集成阿里MaxCompute数据导入工具对于数据进行导入。还有一种情况就是作业提交完成之后可以展示一个脚本中多条语句的详细执行计划,这样就可以帮助开发者了解脚本中的语句在服务器端究竟执行了几步,每步都可以看到执行的过程,每一步的输入是什么、输出是什么,可以发现究竟哪一步出现了数据倾斜。并且执行完成的作业都可以被列出来,这样就可以看到作业的执行状态以及详细信息。在作业的详细信息中可以看到该作业完整的执行计划以及作业的回放,回放就是无论作业执行成功还是失败都可以以短暂的时间重新回放一遍,这样就可以帮助开发者发现作业中哪一个是瓶颈。而MaxCompute Studio在未来也会在作业分析部分提供更加丰富的功能,比如检测数据作业的关键路径或者对于历史作业的对比,以此来快速地定位问题。

f1f6dbb23d8f3bbe73d98747e3aaab5012885190

回顾今天所分享的内容,实际上阿里巴巴在统一的数据平台之上就会存在非常集中的数据开发需求,要想满足这样的需求就需要完善的工具来支持,这其实非常符合数加理念:在数据强大引擎之上需要能够真正发挥作用的工具。MaxCompute Studio就是面向大数据开发者的工具,它能够覆盖大数据开发中的开发、测试调试以及作业管理整个闭环。在编辑器上可以浏览元数据,并给出智能的语法提示,当出现问题时可以像开发Java程序为开发者从线上下载样例数据来提交SQL验证逻辑,当作业出现问题可以使用可视化的方式观察执行计划,并通过快速回放去定位问题,这样就使得在统一的数据平台上进行快速开发成为可能,同时因为存在集成的开发环境就可以在上面方便地扩展数据的应用,可以在数加平台上实现自己的数据调度和数据监测功能,还可以通过IDE对于开源资产进行管理或者迁移。

 

原文链接

本文转载自:

共有 人打赏支持
大大梁
粉丝 0
博文 225
码字总数 0
作品 0
阿里云MaxCompute被Forrester评为全球云端数据仓库领导者

参考消息网3月19日报道 日前,全球权威调研机构佛瑞斯特研究公司(Forrester)发布《2018年一季度云端数据仓库》报告。报告对大数据服务商的主要功能、区域表现、细分市场和典型客户等进行了...

隐林 ⋅ 04/04 ⋅ 0

MaxCompute携手ofo小黄车与阿里妈妈—邀你共赴大数据计算北京高端峰会

MaxCompute携手ofo小黄车、阿里妈妈和多点在线 邀您共赴北京大数据计算高端峰会 现在报名>>> 这里有阿里巴巴内部使用和沉淀近10年,支持阿里集团99%的数据存储和95%的计算的历年双11销售奇迹...

Mr_zebra ⋅ 05/21 ⋅ 0

【转载】大数据workshop:《云数据·大计算:海量日志数据分析与应用》

实验背景介绍 了解更多2017云栖大会·深圳峰会 TechInsight & Workshop. 本手册为云栖大会Workshop之《云计算·大数据:海量日志数据分析与应用》场的前提准备条件所需。主要为保障各位学员在...

frenchfry516 ⋅ 2017/12/04 ⋅ 0

代码快速“检”“修”不是梦,阿里云MaxCompute Studio 2.9.0 新版本发布

近日,阿里云大数据计算服务 MaxCompute动作频频,在美国东部1(弗吉尼亚)节点开服售卖,用户可在国际站、中文站、日本站购买美东节点资源,在控制台按需求开通project。 除此之外,对于使用...

晋恒 ⋅ 05/31 ⋅ 0

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127)

概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方...

隐林 ⋅ 2017/05/05 ⋅ 0

干货满满的大数据技术沙龙来了

豪华讲师阵容,大牛云集,云栖线下沙龙大数据专场即将开启,为你揭秘大数据与人工智能技术的最佳实践,2月24日邀您到现场,与大牛面对面。https://yq.aliyun.com/promotion/154 大数据和人工...

阿里云官方博客 ⋅ 2017/02/23 ⋅ 1

阿里云MaxCompute印度开服,加速大数据产业升级

摘要: 2018年1月18日,阿里云大数据计算服务MaxCompute将在印度正式开服。通过MaxCompute强大的计算能力,阿里云将加速印度大数据产业的全面升级。 点此查看原文:http://click.aliyun.com...

阿里云云栖社区 ⋅ 01/22 ⋅ 0

阿里云全球首批 MVP 杨绣专访 - 技术要坚持刨根问底

自我介绍 我现在在人人车负责数据架构方面的工作,搭建数据采集、抓取、存储、计算、BI可视化等系统。 之前在百度网页搜索部,是一名架构工程师(主要在抓取业务),技术方向是高并发分布式服务...

花肉酱 ⋅ 2017/06/26 ⋅ 0

MaxCompute印尼开服,成为阿里云第十二个大数据服务节点

摘要: 人口超2.5亿的印度尼西亚,政府、通讯公司和银行等机构拥有繁杂的数据沉淀,他们正在加快应用大数据开发框架。MaxCompute势必加速这一进程,唤醒沉淀数据,最大化挖掘数据价值。 点此...

阿里云云栖社区 ⋅ 02/07 ⋅ 0

MaxCompute助力ofo实现精细化运营:日订单超3200万、整体运行效率提升76%

摘要: ofo小黄车大数据BI系统负责人龙利民为大家分享了ofo的上云体验,重点分享了MaxCompute的应用实践,最后对阿里云提出了自己的建议需求。 关于ofo小黄车 共享经济不仅与技术相关,它还关...

阿里云云栖社区 ⋅ 03/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vim编辑模式、命令模式

编辑模式 vim要从一般模式进入编辑模式只要按字母 i 、I、a、A、o、O键就可以了 要从编辑模式回到一般模式按键盘上的Esc键即可。 按键 作用 i 在当前字符前插入 I 在光标所在行的行首插入 o ...

黄昏残影 ⋅ 22分钟前 ⋅ 0

OSChina 周五乱弹 —— 如果有一天不当程序员了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享off的单曲《我唱情歌给你听》 《我唱情歌给你听》- off 手机党少年们想听歌,请使劲儿戳(这里) @小小编辑 :#如果不做程序...

小小编辑 ⋅ 29分钟前 ⋅ 4

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部