问题
工作失败的ExecutorLostFailure错误消息。
ExecutorLostFailure(执行人< 1 >退出正在运行的任务之一所致)原因:遗嘱执行人心跳超时后< 148564 >
导致
的ExecutorLostFailure错误信息意味着一个执行人的Apache火花集群已经丢失。这是一个通用的错误消息,可以有一个以上的根源。在本文中,我们将看看如何解决问题根源时由于执行人忙碌。
这可能发生,如果负载过高,遗嘱执行人不能发送心跳信号,司机在一个预定义的阈值。如果发生这种情况,司机认为执行程序丢失。
你如何确定高CPU负载是遗嘱执行人迷失的原因?
确认执行人很忙,你应该检查Ganglia指标和检查CPU负载。
如果CPU的负载是高:
- 你有太多的小文件
- 你的工作可能会推出很多API调用/请求
- 你没有一个最佳的分区策略
- 你没有计算密集的集群
解决方案
这是你需要做的基于不同的原因失败。
有太多的小文件吗?
紧凑的小文件更大的文件。三角洲湖支持优化(AWS|Azure|GCP)用于压缩文件。自动优化砖(AWS|Azure|GCP)自动压缩小文件中写道。
如果你不使用三角洲湖,你应该计划来创建更大的文件写入数据表之前。这可以通过应用重新分配()在写文件的位置。
有太多的API请求吗?
试图减少API调用的数量由你的工作。这同时适用于外部API服务和任何砖REST API调用。这样做的方法之一是通过实现源数据所以它包含一个小数量的分区,然后进行必要的API调用。
也是好的,确定你有大量的API请求的原因。例如,如果根本原因是太多的小文件,你应该尽可能多的小文件压缩为大文件。几大文件建议在许多小文件。
有太多的分区吗?
一个常见的错误是跨越式的数据源。不是最佳的实例与多个成千上万的分区。理想情况下,您应该有一个小数量的分区可用内核可以并行处理的集群。
确保你的分区有尽可能少的水平。例如,而不是使用一个分区结构年= /月= = / /天日期,你可以减少到一个水平。例如,日期= yyyy-MM-dd。
避免分区数据基于列基数高,像id列。而不是选择一个列中常用的查询,但基数较低。
是Ganglia的CPU负载指标高吗?
- 如果你有高CPU负载。
- 如果集群利用率超过80%。
- 如果你注意到神经节中的某些节点指标是红色的。
这意味着你没有使用正确的类型的集群工作负载。
确保你选择的集群有足够的CPU核和可用内存。你也可以尝试使用计算优化工人而不是默认的类型存储优化工人为您的集群类型。