Track reload cmdlets#1
Conversation
|
添加track逻辑后可避免untrack为null的异常检查,并且在ec与unec过程中切换HA,添加track逻辑可避免提交重复任务。 |
|
待解决问题: |
|
这个patch基本可以,确实之前遗漏了对recovered action的跟踪. 之前提及的多次重启仍然重复执行的问题,可能是一个regress issue,源自cmdlet没有被设定为完成状态.
另外,SSM的设计思路是,允许出现失败的任务,只要是可以解释的,如重复提交的任务,这在某些情况下是可以接受的,除非说重复提交的任务产生了温度丢失等后果.之前设计的加上tracker来尽力减少重复提交的任务,主要是为了减少不必要的系统压力. |
|
例如一个小文件合并任务合并200个文件,操作的文件对象从1到200。当合并过程中出现了HA切换,假如已合并到了第30个文件。HA切换后,之前中断的任务将继续执行,但这时规则会提交一个新的合并任务,这个任务的操作文件是从31到200,从而造成了冲突。 |
|
SSM的设计思路没有问题,之前设计的tracker机制主要是为了防止在cmdlet执行过程中提交重复的cmdlet。而以小文件合并规则为例,在RuleExecutor#submitCmdlets方法中会获取可操作的文件,获取过程在SmallFilePlugin#preSubmitCmdlet方法中利用FileState筛选文件。但当HA出现切换后,虽然tracker机制添加了重新执行的cmdlet,但是新提交的cmdlet的操作文件已与上一个cmdlet不同,所以无法拦截。在SmallFileScheduler#onSubmit阶段也没有检查出错,在SmallFileScheduler#getCompactScheduleResult阶段会出现报错,但是ScheduleResult.FAIL状态没有得到处理。并且,会出现HDFS lease被占用问题。最终虽然完成了所有文件的合并,但造成了部分文件热度丢失及空的container文件,因此如果能够在HA切换后避免提交重复的合并任务,应该可以解决该问题。 |
|
I will export and apply this patch to my branch with few code changed. Thanks! |





No description provided.