MPIP 是新Feature提案。全称 MLSQL Project Improvement Proposals 。当然这个是学习Spark 的 SPIP,作为一个较为稳定成熟的项目,后续增加较大的功能特性会比较慎重,所以需要通过Improvement Proposals的方式来进行规范化,以后也方便回顾。
在MLSQL 1.3.0 开发版中,我们根据实际场景需求,提出了三个MPIPs:
其中,1,3已经完成了部分功能,并且合并进了TRY分支。大家可以通过比如名字MPIP-1031找到对应功能分支,看看开发的过程。
MLSQL社区开发的一位同学打趣的说,在批,流,机器学习三大块,MLSQL已经覆盖批常规99%的功能了,但其实还远远没达到。 Spark有一个很酷的功能,就是cache,允许你把计算结果分布式缓存起来,但存在需要手动释放的问题。MLSQL认为要解决这个问题,需要将缓存的生命周期进行划分:
默认缓存的生命周期是script。随着业务复杂度提高,一个脚本其实会比较复杂,在脚本中我们存在反复使用原始表或者中间表临时表的情况,这个时候我们可以通过cache实现原始表被缓存,中间表只需计算一次,然后脚本一旦执行完毕,就会自动释放。使用方式也极度简单:
select 1 as a as table1;
!cache table1 script;
select * from table1 as output;
session级别暂时还没有实现。applicaton级别则是和MLSQL Engine的生命周期保持一致。需要手动释放:
!uncache table1;
表缓存功能极大的方便了用户使用cache。对于内存无法放下的数据,系统会自动将多出来的部分缓存到磁盘。
内置定时任务是完善MLSQL Stack的一个重要环节。为用户提供一个更完整的服务。我们依然让这个工作MLSQL Style, 使用方式简单,比如:
!crontab */5 * * * * self;
---you script content
select * from hive1 as hiveTable2;
save......
我们也期待未来能够加上脚本依赖的支持。
当你在实际的生产环境使用MLSQL Stack之后,大量的MLSQL Engine会因为各种场景被部署: 有共分析师,业务探索使用的,有供作为API使用的,有做ETL引擎使用的,有做流使用的,有做机器学习平台使用的,这对服务提供方带来了大量的资源压力。比如业务探索类的,典型的上班时间资源需求大,下班时间基本上没怎么有人用,ETL则是反之,API也有一定方位。而且业务探索类的其实对响应有一定的实时需求,比如一个复杂的脚本使用者期待10s内返回,如果使用Spark 的DRA反复的资源释放和申请,可能临时申请资源的时间就已经超过10s,更不用提计算了。 这个时候我们更希望的是通过统计分析,自己制定一个资源调整策略,从而节省系统资源,减轻压力。MLSQL 为此提出这个MPIP,管理员只要通过简单的两个三个命令就可以添加或者删除CPU/内存资源。
!resource add 10c;
!resource remove 10c;
!resource set 40c;
第一个表示给当前正在运行的MLSQL Engine添加10个核,第二个表示减少10核,第三个则表示将当前的MLSQL Engine的资源设置为40核。
那么内存呢?内存会根据启动时配置的CPU和内存的比例,进行相应的增加或者删减。比如我们启动时,CPU和内存为1:4,那么我们添加10c,相应的,系统会自动增加40G的内存。
有了这个功能后,我们完全可以开发一个资源控制策略,对于探索类应用,每天上班时,自动增加资源,下班时剔除资源,用户也可以主动向管理员临时申请更多资源,实现真正的弹性,整个过程无需重启。
MLSQL 会越来越多的考虑用户场景来提供更多功能。