Apache spark 增加spark.executor.cores是否会加快洗牌速度
假设我们固定spark作业的内核总数和总内存大小,并且输入数据中有大量分区。比较这两种配置:Apache spark 增加spark.executor.cores是否会加快洗牌速度,apache-spark,Apache Spark,假设我们固定spark作业的内核总数和总内存大小,并且输入数据中有大量分区。比较这两种配置: 100个执行器、10G内存和每个执行器一个内核 20个执行器、50G内存和每个执行器5个内核 我的问题是: 有时我发现节点\本地任务从网络而不是内存/磁盘获取输入,这是否意味着同一台机器上的两个执行进程之间的通信 如果1为真,第二个会更快吗?因为洗牌可以更“本地处理” 如果只有地图任务,那么第二个任务是否与第一个任务一样快 我可以说,#executor和#executor cores之间的主要权衡是
- 100个执行器、10G内存和每个执行器一个内核
- 20个执行器、50G内存和每个执行器5个内核
#executor
和#executor cores
之间的主要权衡是IO吗谢谢你。有时我发现节点\本地任务从网络而不是内存/磁盘获取输入,这是否意味着同一台机器上的两个执行进程之间的通信? 节点\本地任务可能从同一节点中的其他执行器获取输入,或者需要从HDFS、缓存等系统检索输入。是的,节点\本地任务意味着同一节点中两个执行器进程之间的通信。 RACK_LOCAL表示数据位于另一个节点中,因此需要在执行之前传输数据 Q2.如果1为真,第二个会更快吗?因为洗牌可以更“本地处理”
- 100个执行器、10G内存和每个执行器一个内核
- 20个执行器、50G内存和每个执行器5个内核 1是正确的,但决定哪个选项更快取决于几个因素(执行器的数量与执行器核心的数量)
Q4.我能说#executor和#executor核心之间的主要权衡是IO吗?
对此不确定,但建议尽可能多的执行器作为数据节点,并尽可能多地从集群中获取核心。Q4。我可以说,执行器和执行器核心之间的主要权衡是IO吗? 主要的权衡是内存管理和IO。如果使用简单映射和reduces运行一些简单的多级DAG,您将在spark history中看到,4个节点(每个节点有2个核)并行处理的任务数与1个节点(每个节点有8个核)并行处理的任务数相同。在阶段开始时,每个初始任务加载都会发生反序列化 最大的区别在于内存开销的减少。在具有大量ram的现代服务器中,这并不是什么大问题 由于线程调度程序中的性能下降曲线,您很难发现有人推荐一个执行器使用5个以上的内核 启动集群/执行器大小调整的经验法则如下: (上限(主机物理内核总数*1.15)-2)/executor.cores=每台主机的执行器数量 从executor.cores=2开始是一个很好的安全赌注
每个执行器的内存更多地取决于您的DAG和摄取量。不太可能。洗牌受网络IO的限制磁盘IO(写入随机文件)。第二部分将不受影响。您可能会看到更大执行器的一些其他好处(更好的广播,更低的总内存使用率)。