1.为什么需要大数据开发平台?
-
效率低下。
-
脚本或代码没有版本控制,开发人员想回滚到以前的版本很不方便。
-
若开发人员疏忽,添加新的需求后未经过调试,将可能会影响生成的数据,进而影响线上业务。
-
任务缺乏权限控制,可登陆gateway的任何人都可修改、运行脚本。
-
对于脚本中依赖的表,只能预估它每天产生的时间,一旦它产出延迟,将影响数据的产出。
-
任务失败无任何报警,只能依靠人工发现。
-
任务失败重新恢复后无法自动通知依赖下游重新生成。
-
任务失败要逐层向上游查找最源头的任务失败原因,排查异常繁琐。
-
一旦gateway机器故障,所有的任务都将灰飞烟灭,毫无疑问这将是一场灾难。
为此,开发一个大数据开发平台,提高大数据开发的效率,为线上每天调度的任务保驾护航已迫在眉睫。
2.大数据开发平台应该具备的功能特性?
-
引入版本控制,方便开发人员回滚到之前版本,快速恢复线上调度的任务。
-
规范大数据开发、测试、上线的流程。
-
权限控制,任务的所有人、管理员才可以操作任务。
-
依赖调度,所有依赖的任务执行成功,自动触发自身执行。
-
任务执行失败,发送执行失败消息给任务所有人,人工介入。
-
手动恢复任务,恢复成功后,自动通知下游的任务重新执行。
-
任务依赖图谱,成功失败用不同颜色区分,失败源头一目了然。
-
任务信息存储在数据库,Mars机器采用分布式系统架构,即使单台机器故障也不会影响使用。
-
输入输出检测,判断输入表是否准备好,检测输出表数据是否完整。
-
合理使用Hadoop资源。用户只能使用所属团队指定的hadoop队列。
3.分布式系统架构
-
谁是master,谁是worker
应用启动时,机器通过抢占的方式争当master,通过在数据库中插入一条记录的方式标识当前谁是master,master每隔一定时间去更新数据库,通过维护一个更新时间间接告知worker它还活着,worker同样每隔一定时间去查询数据库,倘若master的更新时间超过一定时间间隔,worker则认为master故障,第一个发现的worker将当仁不让的成为新的master。
-
master、worker容灾模式
master与worker之间使用基于protobuf的netty进行通信,master会每隔一段时间去检测与worker的连接,若发现worker故障,master将断开与worker的连接,把分配到该故障worker上的任务重新分配到其他worker上去执行;若master故障,worker将使用抢占的方式争当新的master,新的mater将中止所有正在运行的Job,重新分配。