1.ods层改进

为了ods层更好的最大利用并行度,我将左图改成了右图方式
1.假设并行度都是3,左在执行完一层后需要等待本层最久的任务执行完毕才可以进入下层,而在等待的过程中,其实就不在是并行度3而变成了1,白白浪费了两个并行度,而且还需要控制好单层的时间,将执行时间相近的任务放在一行,避免等待过久
2.但要知道在实际中,每个任务都有可能突发情况,今天时间长明天时间短,所以这很难控制,而就算控制再好也会浪费一定时间等待,现oozie采用的就是这种方式

故改成右图不等待方式,这样可以在并行度为3且相同时间内节省出时间碎片用来跑更多的任务
而且还可以随便调整任务位置,这样我们就可以将同一个avatar的放在一起,容易维护

2.dwd层改进:
关于dwd层工作流是按avatar分开合适还是放在一个工作流里合适这个问题:
这是原本的规划,每个库分工作流的目的是为了容易管理辨别

经过分析不分avatar而在一个工作流里加上每个avatar开始的标志比较合适

原因有3:
1.也满足了每个库一个工作流的清晰度划分,且看起来更加舒适,可以不用打开工作流就清楚的知道其中包含几个任务
2.每次修改内存核数等,都需要1下线、2修改、3上线、4上线定时等各种操作,N个工作流,就需要重复N次134操作,容易出错,而一个工作流只需1次操作即可
3.由于ds不支持跨工作流的节点复制,每次创建新工作流都需要重新填写很多的配置信息,而放在同一个工作流复制任务方便
问题:
但是这样依赖满足后开始执行dwd任务,在结合改造的ods层规划,可能会导致一个新问题,那就是ods假设并行了10个任务,那么他们结束后立马开始dwd层,可能会导致任务并行度超过内存上限,因此我们还需要给dwd层任务定时,要与ods开始时间尽量稍微错开一点,后面各层也还是如此,保证任务不要全挤在一个时间点,真挤在一起少部分是可以接受的,因为首先其他各层任务少,执行快有些占用内存也少,可以快速释放出占用内存给其他任务,另外任务也还都是有自己的等待时长的,并不是还没等一会呢就挂掉了