我正在使用一些AWS胶水来执行一些ETL操作。我的程序将计算出的数据帧写入S3。当查看指标时,我发现并不是我的所有执行程序都在使用中,实际上只有一个在使用中。 如何确保所有分配的执行人都忙? 谢谢。 我不在程序中仅使用原生的sparkcontext
答案 0 :(得分:0)
不使用胶水上下文可能是使用一个执行程序的原因之一。
https://docs.aws.amazon.com/glue/latest/dg/monitor-profile-debug-straggler.html
特别阅读内存配置文件部分:
在前两个阶段之后,只有执行者3处于活动状态 消耗内存来处理数据。剩下的执行者是 只是闲着,或者在完成后不久就被放弃了 前两个阶段。
答案 1 :(得分:0)
我发现我的工作没有使用所有的执行程序,尽管有很多数据要处理。问题出在我的 SparkContext 上的设置中。我正在使用 // editACommand.B_Ids is cmd object with the ids of the B collection that need to bechanged.
var AEntity = DbContext.As.Include<Bs>.AsQuerable();
var resultBRemove = AEnitity.Bs.Where(p =>
editACommand.B_Ids != null &&
editACommand.B_Ids.All(p2 => p2 != p.Id)).ToList();
var resultBAdd = editACommand.SB_Ids.Where(p =>
AEnitity.Bs.Count > 0 &&
AEnitity.Bs.All(p2 => p2.Id != p)).ToList();
foreach (var resultBRemoveItem in resultBRemove )
{
AEnitity.Bs.Remove(resultBRemoveItem );
}
foreach (var resultBAddItem in resultBAdd )
{
var item = DBContext.AEnitity.SingleOrDefault(i => i.Id == resultBAddItem );
if (item != null)
{
AEnitity.Bs.Add(item);
}
}
DbContext.SaveChanges();
,我相信它使作业仅在一个执行程序(驱动程序)上运行。如果这对您的问题或其他面临相同问题的人有帮助。