当前位置: 首页 > 知识库问答 >
问题:

在运行火花作业时,根据公平的份额,纱线不抢占资源

衡安晏
2023-03-14

我在重新平衡YARN Fair计划队列上的Apache Spark jobs资源时遇到了一个问题。

在测试中,我配置了Hadoop2.6(也尝试了2.7)在macOS上使用本地HDFS以伪分布式模式运行。对于工作提交使用“预构建Spark1.4用于Hadoop2.6和更高版本”(尝试1.5也)从Spark的网站分发。

在Hadoop MapReduce作业上使用基本配置进行测试时,Fair Scheduler的工作与预期一致:当集群的资源超过某个最大值时,将计算公平共享,并根据这些计算抢占和平衡不同队列中作业的资源。

$hadoop_home/etc/hadoop/yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
   <property>
      <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
      <value>org.apache.spark.network.yarn.YarnShuffleService</value>
   </property>
   <property>
      <name>yarn.resourcemanager.scheduler.class</name>
      <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
   </property>
   <property>
      <name>yarn.scheduler.fair.preemption</name>
      <value>true</value>
   </property>
</configuration>

$hadoop_home/etc/hadoop/fair-scheduler.xml

<?xml version="1.0" encoding="UTF-8"?>
<allocations>
   <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
   <queue name="prod">
      <weight>40</weight>
      <schedulingPolicy>fifo</schedulingPolicy>
   </queue>
   <queue name="dev">
      <weight>60</weight>
      <queue name="eng" />
      <queue name="science" />
   </queue>
   <queuePlacementPolicy>
      <rule name="specified" create="false" />
      <rule name="primaryGroup" create="false" />
      <rule name="default" queue="dev.eng" />
   </queuePlacementPolicy>
</allocations>

$hadoop_home/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
</configuration>
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue prod \
lib/spark-examples*.jar 100000
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue dev.eng \
lib/spark-examples*.jar 100000

共有1个答案

章高朗
2023-03-14

您需要在分配XML中设置一个抢占超时。一个代表最低份额,一个代表公平份额,都是以秒为单位。默认情况下,不设置超时。

摘自Hadoop:权威指南第4版

如果队列等待其最小共享抢占超时时间,而没有接收到其最小保证共享,则调度器可以抢占其他容器。通过分配文件中的defaultMinSharePreemptionTimeout顶级元素为所有队列设置默认超时,并通过为队列设置minSharePreemptionTimeout元素为每个队列设置默认超时。

 类似资料:
  • 我正在纱线客户端模式下运行火花作业。我在unix脚本中使用Spark提交命令运行这些作业。我想为正在运行的每个火花作业创建日志。我尝试使用以下命令获取日志: 但在这里,如果spark作业失败,它将不会在命令状态检查中被捕获,可能是unix检查|$tee命令的状态,无论spark作业成功还是失败,该命令始终是成功的 我尝试使用log4j但没有成功。我想将每个火花作业日志文件存储在本地unix服务器上

  • 我一直试图提交一个简单的python脚本,以便在一个带有Yarn的集群中运行它。当我在本地执行作业时,没有问题,一切都很好,但当我在集群中运行它时,它就失败了。 诊断:文件不存在:hdfs://myserver:8020/user/josholsan/.sparkstaging/application_1510046813642_0010/test.py 我不知道为什么它找不到test.py,我也

  • 我经常在火花作业运行时对DAG进行分析。但是,当应用程序运行时必须坐着看才能看到DAG,这很烦人。 因此,我尝试使用名为spark history server的东西查看DAg,我知道它可以帮助我查看过去的作业。我可以轻松访问端口18080,并且可以看到history server UI。 但是,它没有显示任何与spark程序执行相关的信息。我知道我的历史服务器正在运行,因为当我执行sudo服务时

  • 首先,我想说的是我看到的解决这个问题的唯一方法是:Spark 1.6.1 SASL。但是,在为spark和yarn认证添加配置时,仍然不起作用。下面是我在Amazon's EMR的一个yarn集群上使用spark-submit对spark的配置: 注意,我用代码将spark.authenticate添加到了sparkContext的hadoop配置中,而不是core-site.xml(我假设我可以

  • 我正在使用spark submit执行以下命令: spark submit script\u测试。py—主纱线—部署模式群集spark submit script\u测试。py—主纱线簇—部署模式簇 这工作做得很好。我可以在Spark History Server UI下看到它。但是,我无法在RessourceManager UI(纱线)下看到它。 我感觉我的作业没有发送到集群,但它只在一个节点上

  • 然而,我不知道我是否真的需要一个插件,如果需要,是哪一个,以及如何去做它。我尝试使用'build/mvn'和'build/sbt'直接编译github源代码,但是'spark-assembly2.11-2.0.2.jar'文件只有283字节。 我的目标是使用较新版本的fat jar运行pyspark shell,其方式与这里提到的类似。