火花调谐工作



我在调整Yarn集群上执行的Spark作业时遇到问题。我有一种感觉,我没有得到集群的大部分,此外,我的工作也失败了(执行者总是被删除)。

我有以下设置:

  • 4台机器
  • 每台机器都有10GB的RAM
  • 每台机器有8个核心
  • 8GB的RAM分配给纱线作业
  • 为纱线作业分配了14个(共16个)虚拟芯

我已经使用不同的设置运行了我的spark作业(实际上连接到jupyter笔记本电脑),例如

pyspark --master yarn --num-executors 7 --executor-cores 4 --executor-memory 3G
pyspark --master yarn --num-executors 7 --executor-cores 7 --executor-memory 2G
pyspark --master yarn --num-executors 11 --executor-cores 4 --executor-memory 1G

我尝试过不同的组合,但似乎都不起作用,因为我的遗嘱执行人被摧毁了。此外,我在某个地方读到,将spark.yarn.executor.memoryOverhead增加到600MB是一个很好的方法,可以避免执行人员松散(我也这样做了),但这似乎没有帮助。我应该如何设置我的工作?

此外,当我查看ResourceManager UI时,它说我的工作vcores使用了8个vcores,总共56个,这让我很困惑。我似乎每个执行器都使用一个核心,但我不明白为什么?

还有一件事,当我设置作业时,当我从HDFS读取数据以获得最大性能时,我应该指定多少分区?

Donald Knuth表示,过早优化是万恶之源。我确信运行速度更快的程序失败了是没有用的。首先将所有内存交给一个执行器。比如说7GB/8GB,只有1个核心。这是对核心的完全浪费,但如果它能工作,就证明你的应用程序可以在这个硬件上运行。如果这都不起作用,你应该试着制造更大的机器。假设它有效,试着增加核心的数量,直到它仍然有效。论点的要点是:您的应用程序每个任务都需要一定的内存。但每个执行器运行的任务数量取决于内核的数量。首先为应用程序找到每个内核的最坏情况内存,然后可以将执行器内存和内核设置为这个数字的倍数。

相关内容

  • 没有找到相关文章

最新更新