YARN火花的性能问题

9 hadoop-yarn apache-spark

我们正试图在纱线上运行我们的火花簇.与独立模式相比,我们遇到了一些性能问题.

我们有一个包含5个节点的集群,每个节点有16GB RAM和8个核心.我们在yarn-site.xml中将最小容器大小配置为3GB,最大为14GB.当将作业提交到纱线群集时,我们提供执行者数量= 10,执行者的内存= 14 GB.根据我的理解,我们的工作应该分配4个14GB的容器.但是火花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  
Run Code Online (Sandbox Code Playgroud)

在讨论之后,我改变了我的yarn-site.xml文件以及spark-submit命令.

这是新的yarn-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>
Run Code Online (Sandbox Code Playgroud)

而spark命令的新命令是

$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 
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以在每台机器上获得6个核心,但每个节点的内存使用量仍然在5G左右.我附上了SPARKUI和htop的屏幕截图. 在此输入图像描述 Spark UI截图![] [1]

0x0*_*FFF 1

  1. 使用yarn-site.xml 检查yarn.nodemanager.resource.memory-mb设置是否正确。根据我对集群的理解,它应该设置为 14GB。此设置负责让 YARN 了解在此特定节点上可以使用多少内存
  2. 如果你的设置正确并且有 5 个服务器运行 YARN NodeManager,那么你的作业提交命令是错误的。首先,--num-executors是在集群上启动执行的 YARN 容器的数量。您指定了 10 个容器,每个容器具有 14GB RAM,但您的集群上没有这么多资源!其次,您指定--master yarn-cluster,这意味着 Spark Driver 将在需要单独容器的 YARN Application Master 内部运行。
  3. 在我看来,它显示了 3 个容器,因为集群中的 5 个节点中只有 4 个运行 YARN NodeManager + 您请求为每个容器分配 14GB,因此 YARN 首先启动 Application Master,然后轮询 NM 以获得可用资源看到它只能启动 3 个容器。关于你看到的堆大小,启动 Spark 后找到它的 JVM 容器并查看它们启动的参数 - 你应该在一行中有许多 -Xmx 标志 - 一个正确,一个错误,你应该在配置文件中找到它的起源(Hadoop或火花)
  4. 在向集群提交应用程序之前,使用相同的设置(替换yarn-clusteryarn-client)启动 Spark-Shell 并检查它是如何启动的,检查 WebUI 和 JVM 是否已启动