Skip to content

Conversation

@lipppppp
Copy link

@lipppppp lipppppp commented Jan 3, 2021

No description provided.

@lipppppp
Copy link
Author

lipppppp commented Jan 3, 2021

添加track逻辑后可避免untrack为null的异常检查,并且在ec与unec过程中切换HA,添加track逻辑可避免提交重复任务。

@lipppppp
Copy link
Author

lipppppp commented Jan 3, 2021

待解决问题:
小文件合并过程中切换HA会导致提交重复的合并任务,偶发文件lease及热度丢失问题。原因为进行reload过程后,start相关服务会触发rule进行检查,提交新的cmdlet,而新的cmdlet操作的文件与之前不同,经过preSubmitCmdlet方法的筛选,所以cmdletdescriptor不同不会被track拦截到。并且在onSubmit过程因操作的文件已经过筛选,所以也不会检查出错,直到onSchedule过程出错。

@lipppppp
Copy link
Author

lipppppp commented Jan 4, 2021

正常场景下执行unec操作时,最终状态更新较慢。虽然热度没有丢失但是SQL报错,报错为更新了不存在的accessCount表,推测为 PR#2203问题。
image
image

@PHILO-HE
Copy link
Owner

PHILO-HE commented Jan 4, 2021

这个patch基本可以,确实之前遗漏了对recovered action的跟踪. 之前提及的多次重启仍然重复执行的问题,可能是一个regress issue,源自cmdlet没有被设定为完成状态.

新的cmdlet操作的文件与之前不同
这句是什么意思?

另外,SSM的设计思路是,允许出现失败的任务,只要是可以解释的,如重复提交的任务,这在某些情况下是可以接受的,除非说重复提交的任务产生了温度丢失等后果.之前设计的加上tracker来尽力减少重复提交的任务,主要是为了减少不必要的系统压力.

@lipppppp
Copy link
Author

lipppppp commented Jan 4, 2021

例如一个小文件合并任务合并200个文件,操作的文件对象从1到200。当合并过程中出现了HA切换,假如已合并到了第30个文件。HA切换后,之前中断的任务将继续执行,但这时规则会提交一个新的合并任务,这个任务的操作文件是从31到200,从而造成了冲突。

@lipppppp
Copy link
Author

lipppppp commented Jan 4, 2021

SSM的设计思路没有问题,之前设计的tracker机制主要是为了防止在cmdlet执行过程中提交重复的cmdlet。而以小文件合并规则为例,在RuleExecutor#submitCmdlets方法中会获取可操作的文件,获取过程在SmallFilePlugin#preSubmitCmdlet方法中利用FileState筛选文件。但当HA出现切换后,虽然tracker机制添加了重新执行的cmdlet,但是新提交的cmdlet的操作文件已与上一个cmdlet不同,所以无法拦截。在SmallFileScheduler#onSubmit阶段也没有检查出错,在SmallFileScheduler#getCompactScheduleResult阶段会出现报错,但是ScheduleResult.FAIL状态没有得到处理。并且,会出现HDFS lease被占用问题。最终虽然完成了所有文件的合并,但造成了部分文件热度丢失及空的container文件,因此如果能够在HA切换后避免提交重复的合并任务,应该可以解决该问题。

@lipppppp
Copy link
Author

lipppppp commented Jan 4, 2021

image
image
image

@PHILO-HE
Copy link
Owner

PHILO-HE commented Jan 4, 2021

I will export and apply this patch to my branch with few code changed. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants