编辑2: 我更改了执行程序内存的数量,发现执行程序的数量受分配的内存量的限制。 spark.executor.memory是分配给每个执行程序的内存量,而不是所有执行程序可用的内存总量。所以现在我有11个执行者产卵。现在的问题仍然是每个执行者只使用一个核心。
我在EMR集群上运行Spark,由于某种原因,我似乎无法获得工作来利用完整的系统资源。我使用Spark maximizeResourceAllocation True启动了集群,但我已将配置编辑为:
public class ElemType
{
public string MyProperty { get; set; }
}
static void Main(string[] args) {
Expression<Func<string[], Func<ElemType, bool>>> exp = (arr) => (ElemType et) => arr.Contains(et.MyProperty);
var compiled = exp.Compile();
var func = compiled(new[] { "aaa", "bbb" });
var query = new List<ElemType> {
new ElemType { MyProperty = "aaa" },
new ElemType { MyProperty = "bbb" },
new ElemType { MyProperty = "cccc" }
};
var result = query.Where("MyProperty", new[] { "aaa", "bbb" });
}
集群有四个工作节点,8个核心x 2个线程,每个16GB RAM:
我根据this帖子选择了火花设置。
根据我的理解,这应该启动11个执行器,每个执行器3个(我可能误解了应用程序主机运行的位置),每个执行器可以访问5个核心。
但是,当我通过spark-submit提交作业时,我会看到以下内容:
我在这里缺少一些东西吗?即使我没有正确理解配置参数,我也不明白为什么会这样。
编辑: 我尝试过提交我的工作有很多不同的选择,但我也有同样的行为。 spark-submit --deploy-mode client --master yarn [*] --num-executors 11 --executor-cores 5 --verbose parse_ad_logs.py
我根据链接的可能欺骗问题包括了纱线[*] - 尽管我可以找到很多相关信息。