Apache spark 火花纺纱机的性能问题
我们正试图在纱线上运行火花束。我们有一些性能问题,尤其是与独立模式相比 我们有一个由5个节点组成的集群,每个节点都有16GB的RAM和8个核心。我们已在warn-site.xml中将容器的最小大小配置为3GB,最大大小配置为14GB。将作业提交给纱线集群时,我们提供的执行器数量=10,执行器内存=14 GB。根据我的理解,我们的工作应该分配4个14GB的容器。但spark UI仅显示3个容器,每个容器的容量为7.2GB 我们无法确保集装箱编号和分配给它的资源。与独立模式相比,这会导致性能下降 你能指出如何优化纱线性能吗 这是我用于提交作业的命令:Apache spark 火花纺纱机的性能问题,apache-spark,yarn,Apache Spark,Yarn,我们正试图在纱线上运行火花束。我们有一些性能问题,尤其是与独立模式相比 我们有一个由5个节点组成的集群,每个节点都有16GB的RAM和8个核心。我们已在warn-site.xml中将容器的最小大小配置为3GB,最大大小配置为14GB。将作业提交给纱线集群时,我们提供的执行器数量=10,执行器内存=14 GB。根据我的理解,我们的工作应该分配4个14GB的容器。但spark UI仅显示3个容器,每个容器的容量为7.2GB 我们无法确保集装箱编号和分配给它的资源。与独立模式相比,这会导致性能下降 你
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 10 --executor-memory 14g target/scala-2.10/my-application_2.10-1.0.jar
讨论结束后,我更改了我的warn-site.xml文件以及spark submit命令
以下是新的warn-site.xml代码:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hm41</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>14336</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2560</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>13312</value>
</property>
有了这个,我可以在每台机器上获得6个内核,但每个节点的内存使用量仍然在5G左右。我已附上SPARKUI和htop的屏幕截图。
warn.nodemanager.resource.memory mb
的设置是否正确。据我所知,您的集群应该设置为14GB。此设置负责让纱线知道在该特定节点上可以使用多少内存--num executors
是将在集群上启动以执行的纱线容器的数量。您指定了10个容器,每个容器具有14GB RAM,但集群上没有这么多资源!其次,指定--master warn cluster
,这意味着Spark驱动程序将在需要单独容器的warn应用程序主程序内部运行纱线群集
替换为纱线客户端
),并检查其启动方式,检查WebUI和JVM启动情况使用或top查看每个节点上还有哪些正在使用内存 我的{warn.nodemanager.resource.memory mb}是15GB,因为我们留给操作系统进程1GB,并允许nodemangaer分配其他15GB。我将我的提交呼叫修改为此--主纱线集群--num executors 5--executor memory 13gI怀疑与NM本身一起运行DataNode,因此在我看来15GB太多了,我不会超过14GB。我可以确定在创建容器期间/之后容器分配的RAM量是多少吗?我试图查看资源管理器的日志,但无法确定它的确切条目。我们的集群不是一个生产集群,也不是一个繁忙的集群,因此,如果我们能够确保spark获得它所能获得的所有RAM,那就没问题了@sietse Au这是否意味着spark容器获得了所需的内存,但只报告该部分?因为在我们的独立实现中,会报告整个内存。登录到Thread NM机器,运行
ps-ef | grep java | more
并找到Spark executor容器,查看-Xmx
参数事实上不是0.6。它是“安全内存”的0.6,也就是整个堆的0.9,所以默认情况下它是JVM堆的0.54,而当我们这样做时,14GB实际上不是14GB,而是14GB+内存。但他不是这样问的,对吗?
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 4 --executor-memory 10g --executor-cores 6 target/scala-2.10/my-application_2.10-1.0.jar