hadoop - 强制 YARN 在所有从站上部署 Spark 任务

标签 hadoop apache-spark hadoop-yarn hadoop2

我一直在 8 节点集群上部署 SparkPi 示例。与示例相关的任务似乎没有部署到集群中的所有节点,即使集群未得到充分利用(没有其他作业在运行)。

以下是我启动 SparkPi 示例的方式:

spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 1g --executor-cores 1 --num-executors 7 $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar 100000

但是,当我查看正在使用哪些节点时,我看到的是: hadoop cluster

我觉得这是因为我在资源管理器中使用了 CapacityScheduler。这是我的 yarn-site.xml 文件:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>master.cluster</value>
    </property>
    <property>
      <name>yarn.resourcemanager.address</name>
      <value>master.cluster:8032</value>
    </property>
    <property>
      <name>yarn.resourcemanager.scheduler.address</name>
      <value>master.cluster:8030</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address</name>
      <value>0.0.0.0:8088</value>
    </property>
    <property>
      <name>yarn.resourcemanager.resource-tracker.address</name>
      <value>master.cluster:8031</value>
    </property>
    <property>
      <name>yarn.resourcemanager.admin.address</name>
      <value>master.cluster:8033</value>
    </property>
    <property>
      <name>yarn.resourcemanager.admin.address</name>
      <value>master.cluster:8033</value>
    </property>

    <property>
      <name>yarn.application.classpath</name>
      <value>/usr/local/hadoop/etc/hadoop, /usr/local/hadoop/share/hadoop/common/*, /usr/local/hadoop/share/hadoop/common/lib/*, /usr/local/hadoop/share/hadoop/hdfs/*, /usr/local/hadoop/share/hadoop/hdfs/lib/*, /usr/local/hadoop/share/hadoop/mapreduce/*, /usr/local/hadoop/share/hadoop/mapreduce/lib/*, /usr/local/hadoop/share/hadoop/yarn/*, /usr/local/hadoop/share/hadoop/yarn/lib/*</value>
    </property>

    <property>
    <description>
      Number of seconds after an application finishes before the nodemanager's
      DeletionService will delete the application's localized file directory
      and log directory.

      To diagnose Yarn application problems, set this property's value large
      enough (for example, to 600 = 10 minutes) to permit examination of these
      directories. After changing the property's value, you must restart the
      nodemanager in order for it to have an effect.

      The roots of Yarn applications' work directories is configurable with
      the yarn.nodemanager.local-dirs property (see below), and the roots
      of the Yarn applications' log directories is configurable with the
      yarn.nodemanager.log-dirs property (see also below).
    </description>
    <name>yarn.nodemanager.delete.debug-delay-sec</name>
    <value>600</value>
  </property>

</configuration>

我如何调整 YARN 以便它在所有 节点上部署任务?

最佳答案

  1. 应用程序管理器不应占用太多资源。宣布分配太多 100% 真的太多了。我不知道你在这里做了什么好事(怀疑没有)。
  2. 应该更愿意在资源可用的情况下在同一节点上运行尽可能多的任务。这将避免通过集群的内部网络序列化和发送数据的开销。您还应该更愿意在同一个执行程序实例中运行尽可能多的任务以允许内存共享。
  3. 在默认设置中使用容量调度程序时,它仅根据内存占用量计算资源,而忽略 CPU 占用量。您将内存占用声明为驱动程序、应用程序管理器 (am) 和执行程序的 Spark 配置和参数的一部分。有关更多详细信息,请参阅 spark 手册,特别是 the part about running Spark on YarnSpark Configuration .具体的spark配置为:
    1. spark.yarn.am.memory(配置)
    2. spark.driver.memory(配置)
    3. spark.executor.memory(配置)

请注意,核心数量的设置也很重要,但更多的是被 spark 本身而不是 yarn 使用(除非你改变它计算资源利用率的方式)。

如果您可以在单个节点上运行需要 32 个 CPU 内核的单个作业,那么首先祝贺您的系统不错,但这可能是您想要运行它的方式!

关于hadoop - 强制 YARN 在所有从站上部署 Spark 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199791/

相关文章:

apache-spark - 如何控制每个任务/阶段/工作尝试的 Spark 应用程序?

file - 无法从 map 写入 hadoop 文件系统 (HDFS)

java - 异常 :org. apache.hadoop.hbase.masternotrunningexception

scala - 对于在映射器之间共享信息的增强版 MapReduce,什么是好的应用程序?

java - 在spark java中另存为Parquet文件

python - 在 Spark 中获取上周一

hadoop - 同一 HBase 集群内的随机读取和扫描

hadoop - 在Hive/HBase集成中出现MR抓取错误

apache-spark - DataFrame 分区到单个 Parquet 文件(每个分区)

java - Apache Spark :-Nullpointer Exception on broadcast variables (YARN Cluster mode)