摘要:在MaxCompute生态中,命令行工具究竟处于什么样的位置?它又发挥着什么样的做用?可以帮助开发者如何更好使用MaxCompute?在本文中,阿里巴巴计算平台产品专家曲宁将经过一个完整简单的小例子为你们介绍MaxCompute命令行工具odpscmd的使用以及其所具备的各类能力。
直播视频回看,戳这里!https://yq.aliyun.com/webinar/play/467
分享资料下载,戳这里!https://yq.aliyun.com/download/2946
如下内容根据演讲视频及PPT整理而成。
本文将主要按照如下五个方面进行介绍:
1. 命令行工具odpscmd在MaxCompute生态中的定位
2. 快速开始:一个完整简单的小例子
3. 客户端提供的能力框架
4. 客户端重点场景说明
5. 容易碰到的问题
1、命令行工具odpscmd在MaxCompute生态中的定位
odpscmd其实就是MaxCompute的命令行工具的名称,其在整个MaxCompute中的位置是位于最上端的。以下图所示,整个MaxCompute生态自下而上是支撑的关系,而真正暴露给用户的是一套Rest API,这套API也是最核心的接口,不管是Java仍是Python的SDK都须要调用这些核心API。而命令行工具就是对于MaxCompute开放的Rest API作了深度的包装,在客户端使得用户可使用命令的方式来提交做业,这些做业又将会经过接口提交给MaxCompute集群进行相关的管理和开发。可能你们对于MaxCompute以及DataWorks这个组合比较熟悉,这是由于使用MaxCompute以前须要在DataWorks上面进行开通。实际上,MaxCompute自身也有一些生态工具,好比odpscmd以及MaxCompute Studio等。web
2、快速开始:一个完整简单的小例子
在本部分中,将经过一个简单而完整的例子对使用odpscmd客户端进行数据处理的各个阶段进行介绍。在文中仅对于各个步骤进行简略描述,具体的实践操做详见视频分享。shell
做为MaxCompute的客户端工具,odpscmd与Hive CLI以及PSQL这样客户端工具是比较相似的,都是一个黑屏的操做管理工具。接下来为你们分享一个完整而简单的小例子,这个例子可以完整地覆盖大数据处理的各个环节,包括了环境准备、数据接入、数据处理加工以及数据消费。在你们常见的大数据场景中,业务数据每每分散在数据库以及其余的生产环境中,而按期会进行数据采集或者同步,将生产环境中的增量数据同步到数据仓库中去,这样就会涉及到数据接入。以后在数据仓库中就会周期性地作一些数据处理加工,这些加工有时候会用常见的SQL作,对于MySQL而言提供了MR这样的编程框架,而一些具备深度需求的用户则会经过UDF来实现一些比较复杂的业务逻辑,同时在数据加工的时候会须要监控做业的执行状况,因此也会有对于进度以及成功状态等的做业查看和管理的需求。做业处理完毕以后,这时候基本上完成了数据的清洗和聚合,这时候就能够提供给数据消费方使用。对于数据使用消费方而言,每每须要将加工好的可消费数据回流到业务系统来支撑在线应用,或者经过JDBC接口链接BI工具进行可视化分析,而业务分析师也每每但愿下载一些数据进行二次加工和处理。
1.下载与配置安装
对于odpscmd而言,你们能够在官方网站上找到其下载地址,经过浏览器下载到本地的是一个ZIP包,解压以后就能够看到odpscmd一些相关目录。而对于Linux用户而言,也能够经过yarn源去下载并安装相应的包。下载完成以后,须要修改odps_config.ini配置文件,以下图蓝框中所示,须要录入项目名称,填写登陆访问者所拥有的access_id和access_key等认证信息。同时,这里须要注意MaxCompute在国内的Region里面的end_point域名是一致的;而对于tunnel_endpoint而言,则是和Region密切相关的,因此对于不一样的Region而言,所填写的tunnel_endpoint是不一样的。在填写完配置文件以后就能够启动odpscmd客户端了。数据库
2.数据环境准备
对于使用odpscmd客户端的同窗而言,每每会深度地使用shell以及一些开源的工具进行配合。这里举个例子,在业务数据库中有一张平常的业务表,可能存储了平常业务点击的日志以及新增的订单数据,那么常见场景是须要将数据同步到数据仓库,这个过程须要一些数据同步工具周期性地将数据加载到数据仓库的表里面,并且每每会须要创建相应的分区表,将相应的数据放入到相应的分区里面去。这一个任务能够经过开源工具DataX完成,实现将数据同步地插入到数据仓库表里面去。而当手工配置DataX命令时,有一些像分区字段这样的参数每每是动态的,因此也须要动态地放入到DataX脚本的参数当中。编程
3.数据加工处理
当数据同步完成以后,在不少的场景中须要对一些分区表作加工处理,以下图所示的例子中是新建一张表或者insert OVERWRITE一张表,还会对于数据表中因为增量同步而引入的新的分区数据进行汇总聚合计算,并将结果生成到新表中。而看成业很是长的时候,odpscmd工具也提供了做业监控命令“Show p”,就可以检索出全量历史做业。而每一个做业都会有本身的instance_id,而对于MaxCompute而言,最基本的任务单元就是instance,每一个instance就是提交做业的实例。根据instance_id在过后还能够检索到其对应的Logview。总之,odpscmd自己就提供了完整的做业提交、做业过后查看以及对于指定做业详情的查看能力。在本次分享的例子中,使用的是Tunnel对于MaxCompute的结果数据集进行下载,并经过Excel或者其余的工具进行分析,所以执行tunnel download就可以将结果数据表下载到本地文件中。浏览器
3、客户端提供的能力框架
上述的内容实际上是但愿经过一个简单的例子将平常较为复杂的大数据处理流程和环节进行简单回溯,借此但愿向你们传达MaxCompute客户端工具可以支持平常工做的各个环节。那么,MaxCompute客户端工具究竟有什么样的功能可以支撑各个环节的须要呢?其实,odpscmd的功能包含了对于项目空间的管理,对表、视图以及操做分区的操做管理,对资源、函数的管理,对做业实例的管理,而且提供数据上传下载的数据通道,同时也提供安全与权限管理等其余的操做。接下来就为你们依次介绍。安全
项目空间相关操做
在链接项目以前首先已经建立了一个MaxCompute项目,在使用项目的时候可使用相似于Hive数据库同样“use <project_name>;”这样的命令去跨空间切换,经过这种方式可使得用户在多个项目之间进行快速切换,当使用了“use <project_name>;”以后,后续的全部命令将会直接应用到制定的项目中。性能优化
表相关操做
表相关操做的命令在odpscmd客户端工具上可以很轻松地进行操做,其包含了表的建立和删除以及对于表的修改,好比修改列名、修改分区、修改属主Owner、非分区数据的删除等。其余的操做诸如show tables也都兼容了Hive的使用习惯。在下图中为你们列出了与表相关的操做命令以及帮助文档。框架
视图及分区相关操做
对于视图和分区而言,odpscmd也能够经过view方式把一些复杂的处理逻辑进行二次封装,更容易地对外进行暴露。对于view而言,提供了建立、修改、删除以及查看的操做。对于Partition而言,你们关注的也比较多,常见的就是如何查看表的分区,经过show partition <表名>的方式就可以列出这张表里面有多少个分区,同时分区的名称是什么。同时能够借助alter <表名>的方式将某一个分区删除掉或者修改其命名。函数
资源与函数相关操做
深度用户在使用时就会发现,不少内置函数不可以知足自身逻辑需求,每每会须要使用一些UDF来进行复杂计算,也能够经过MR来作更自由的计算逻辑,这些时候用户须要上传一个自定义开发包,这些对于MaxCompute而言就是资源Resource。经过odpscmd能够上传也能够查看项目中的资源。对于函数而言,用户建立UDF的时候,就可使用create方式很容易地进行建立。工具
实例相关操做
对于实例而言,你们可能会在客户端运行不少做业,可能在某个时间想要看看做业是否已经运行完成了,可是又记不住做业的具体ID是什么,这时候就可使用show p和show instance命令来列出提交过的历史做业,而且还支持按照时间等条件进行过滤。当instance列表获取以后,对特定的任务作操做还可使用“wait”命令查看其详情。
Tunnel相关操做
有一种操做命令其实是提交给控制、管理、数据查询做业的命令,而且还有一部分是作数据的上下行,这有别于前面提到的任务提交,更多的是对于数据的吞吐量要求比较高,所以odpscmd集成了Tunnel工具,可以在命令行里面进行数据上传以及下载等。这里常常会遇到的问题就是不少开发者在本身的生产环境里面经过Tunnel作数据同步,而这时候对于断点续传的能力要求就会比较高了。
安全及权限相关操做
不少用户对于DataWorks比较熟悉,DataWorks里面有比较简单明了的用户角色受权管理的能力。而作数据库的一些同窗则更加习惯于黑屏的方式,也就是经过命令方式作安全和权限的管理。
角色相关权限管理
好比对于角色相关权限的管理,能够经过create role能够在大数据项目中建立角色,并对角色赋权,将某一个用户加入到角色当中去,或者移除相关的角色。同时也可以查看究竟有哪些角色。
用户相关权限管理
对于用户相关权限管理而言,最多见就是将一个阿里云的帐号加进项目中去,并为用户指定具体的角色,并获取对应的权限。
项目空间的数据保护
一些管理员对于项目空间的保护要求比较高,而在MaxCompute当中自然对于多租户支持方面作了不少工做。好比能够设置禁止项目数据被下载,仅容许几个授信的项目之间共享数据,这样就能够将与项目空间相关的权限保护能力都放在odpscmd中。
权限查看
同时,odpscmd也给出了权限查看相关的命令。
其余操做
odpscmd还提供一些其余经常使用的操做。你们可能常常会遇到一些性能优化的场景,好比对于一张比较大的数据表作扫描分区的切分,这样能够增长做业任务的并行度,这些优化手段的开关均可以经过命令行进行快速设置,同时也能够对于一些SQL进行成本预估,而且也能够轻松地获取帮助信息。综上所述,odpscmd是一个比较强大而且完整的客户端工具。
4、客户端重点场景说明
接下来重点分享几个客户端使用的重点场景。
场景1:经过shell脚本调用tunnel命令进行文件上下传
在这种场景下,默认会经过分隔符的方式进行上传。而当用户遇到了一些非标准化的分隔符时,经过-fd方式就可以快速适配对应的列分隔符。而不少同窗也但愿经过shell脚本的方式可以动态地进行调度,这里也会涉及到动态参数传入的问题。以下图中示例所示,能够将日期动态地传入到Tunnel命令当中去,周期性地将新增的日志文件上传或者下载到对应的目录中去。
场景2:调试odpscmd命令
在非交互式的场景下,MaxCompute命令支持-f参数,可在脚本或其它程序中直接以odps -f <文件路径>的方式支持MaxCompute命令。此外MaxCompute命令还支持-e参数,在这种方式下须要经过括号的方式将SQL命令嵌入进去。
场景3:运行数据查询/数据加工做业UDF
在odpscmd里面可以原生地支持UDF和MR,以下图所示的是UDF做业的使用流程。
在前两个环节须要在线下将写好的UDF编写好的程序打成Jar包,在命令行当中经过“add jar”的方式把其传入到指定的项目中做为一个资源。而经过createfunction命令能够命名一个自定义函数并于上传的主函数进行关联,这样就真正地创建了这样的一个函数。以后在测试或者使用的时候经过调用刚才建立的UDF进行使用。这样就是经过odpscmd实现UDF的完整建立。
场景4:运行数据查询/数据加工做业MR
对于MR做业而言,首先须要在编译环境中编写并打包MR程序,打包完成以后将其做为一个资源注册到项目之中,在odpscmd里面执行“add jar”,以后在命令行里面运行MR做业,以后就能够得到相应的结果。
5、容易碰到的问题
接下来为你们总结了几个常见的问题。首先是动态参数的传入,由于odpscmd是一种命令行的方式,那么你们经过shell调用的比较多,这时候就涉及到如何将一些动态的参数调入进去,其实能够经过shell的方式变相地将一些动态信息传递进来。还有一个常见的问题就是“手工执行odpscmd命令正常,经过shell脚本调用时报错”,此时就须要检查shell脚本下有没有设置JAVA的环境变量。
总结
本文主要经过一个简单而又完整的例子具体地描述了借助MaxCompute客户端进行数据加工处理的流程。同时,也为你们介绍了MaxCompute客户端工具所具备的功能,其不只仅可以实现建表、查数据,还可以实现不少的管理工做。此外,还给你们不少指引性的知识,但愿你们可以经过本次分享更好地了解MaxCompute客户端的使用方式。
做者:午夜漫步者