将Airflow worker和webserver / scheduler用作在EC2的Kubernetes Engine上运行的Docker映像
我们有一个任务,其中getUserAsSingle()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess(user -> ui.showUser(user))
.flatMap(user ->
getUserFavoritesAsSingle(user)
.subscribeOn(Schedulers.io())
)
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess(userFavs -> ui.showUserFavorites(userFavs))
.flatMap(userFavs ->
updateLoginCounter(userFavs.userId)
.subscribeOn(Schedulers.io())
)
.observeOn(AndroidSchedulers.mainThread())
subscribe(newCounter -> ui.showLoginCount(newCounter),
error -> ui.showError(error));
占用大量资源,每15分钟运行一次。
将这些错误作为电子邮件发送给气流工作人员
KubernetesPodOperator
有什么想法吗?
答案 0 :(得分:4)
所以,迟到总比没有好
这是由于KubernetesPodOperator
中的已知错误。
为了避免这种行为,您必须将运算符get_logs
参数设置为False
。默认值为True
。
在这里详细 https://issues.apache.org/jira/browse/AIRFLOW-3534 https://issues.apache.org/jira/browse/AIRFLOW-5571
答案 1 :(得分:0)
好吧,这意味着thge程序逻辑没有获得它期望从某个套接字接收的数据。这可能意味着任何事情,从间歇性的网络问题到数据根本无法及时到达以及未编程等待逻辑的数据。如果任务自动重试,您甚至不必担心间歇性问题。
如果您想进一步诊断,则需要收集一些诊断信息。问题总是通过相同的情况来诊断:
第一个可以通过堆栈跟踪和/或在代码库中搜索相关逻辑来标识。第二个-调试或调试打印。第三步通常是通过在产生错误值的逻辑步骤中,以较早设置的断点重新运行程序来完成的。在您的情况下,只能通过等待问题再次发生来非常缓慢地执行此操作,因此您不得不从代码库中进行有根据的猜测。