大数据平台不仅需要稳定地运行生产任务,还需要提供数据开发的能力。因此,不少大数据平台都会为每个任务区分开发模式与线上模式,可以通过提交上线的方式,将开发模式任务提交到线上,让其用于线上数据生产工作。
开发模式与线上模式其实可以看成两个代码相似,但完全独立的任务,为了便于后续描述,将其分别称为开发模式任务与线上模式任务。
开发模式任务
线上模式任务
开发模式下的任务可以进行编辑、运行、调试。当任务开发完毕后,通过提交上线功能,将开发模式的任务提交到线上,也即使用开发模式的任务代码覆盖原本的线上模式任务代码。线上模式下的任务是用于生产的,因此该模式下的任务不可以编辑、调试,但可以配置调度、依赖、报警。
问题背景
开发模式任务与线上模式任务代码虽然相似,但却是完全独立的,修改开发模式任务,并不会影响到线上模式任务。这在一定程度上避免了“开发阶段影响线上”的问题,但在实际的开发过程中,用户在调试某个开发任务时,由于数据与线上任务是同一份(引用了同一个 table 或者同一份 hdfs 数据),因此极易影响到线上的产出数据,造成线上数据被污染情况。
例如,某线上模式任务的代码如下:
由于业务需求的改变,需要将 ods_student 的数据按照年龄进行过滤(仅需要小于 18 岁的学生数据),则 SQL 被改写成: