【问题标题】:How to use standalone Master's resources for workers?如何将独立 Master 的资源用于工作人员?
【发布时间】:2017-12-20 16:22:14
【问题描述】:

我已安装 Apache Spark 1.5.2(适用于 Hadoop 2.6+)。我的集群包含以下硬件:

  • 主控:12 个 CPU 内核和 128 GB RAM
  • Slave1:12 个 CPU 内核和 64 GB RAM
  • Slave2:6 个 CPU 内核和 64 GB RAM

其实我的 slaves 文件有两个条目:

slave1_ip
slave2_ip

因为我的主线程也有一个非常“强大”的硬件,它不会只被主线程使用。所以我想问一下是否有可能将一些 CPU 内核和来自 master 机器的 RAM 提供给第三个 worker 实例......?谢谢!


第一次尝试解决问题

在 Jacek Laskowski 的回答之后,我设置了以下设置:

spark-defaults.conf (only on Master machine):
  spark.driver.cores=2
  spark.driver.memory=4g

spark-env.sh (on Master):
  SPARK_WORKER_CORES=10
  SPARK_WORKER_MEMORY=120g

spark-env.sh (on Slave1):
  SPARK_WORKER_CORES=12
  SPARK_WORKER_MEMORY=60g

spark-env.sh (on Slave2):
  SPARK_WORKER_CORES=6
  SPARK_WORKER_MEMORY=60g

我还将master的ip地址添加到slaves文件中。

集群现在包含 3 个工作节点(从属节点 + 主节点),非常完美。

但是:Web UI 显示每个节点只有 1024m 的 RAM,请参见屏幕截图:

有人可以说如何解决这个问题吗?设置 spark.executor.memory 将为每台机器设置相同数量的 RAM,这不是使用尽可能多的 RAM 的最佳选择......!我究竟做错了什么?谢谢!

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这是可能的。只需限制 master 使用的内核和内存数量,并在机器上运行一个或多个 worker。

    使用conf/spark-defaults.conf 可以设置spark.driver.memory 和spark.driver.cores。咨询Spark Configuration。

    但是,您应该使用conf/spark-env.sh 来使用SPARK_WORKER_INSTANCES 为每个节点设置多个实例。包括以下其他设置:

    SPARK_WORKER_INSTANCES=2
    SPARK_WORKER_CORES=2
    SPARK_WORKER_MEMORY=2g
    

    您可能还想使用spark.executor.memory 或SPARK_EXECUTOR_MEMORY 为执行程序(每个工作人员)设置RAM 数量(如下面的屏幕截图所示)。

    【讨论】:

    • 我将 spark.driver.memory 设置为 5g,将 spark.driver.cores 设置为 4(共 12 个)。我还将master的ip添加到slave文件中。当我重新启动集群并打开 web ui 时,“本地”工作人员有 12 个核心而不是 8 个!
    • 是的,我使用的是独立集群模式。我通过 start-all.sh 脚本编辑配置文件后启动集群。通过您的设置,我可以将所有 3 台机器都设置为工人,非常感谢!但现在的问题是,每个节点只能使用 1024m 的 RAM,请参阅我编辑的问题。
    【解决方案2】:

    在 spark 独立集群管理器中,您应该将所有 conf 文件与 spark-env.sh 相同,在 master 和 worker 中相同,因此它不能匹配配置并为 worker 设置默认内存 1g

    spark-defaults.conf (only on Master machine):
    spark.driver.cores=2
    spark.driver.memory=4g
    
    spark-env.sh (on Master)
    SPARK_WORKER_CORES=10 
    SPARK_WORKER_MEMORY=60g
    
    spark-env.sh (on Slave1):
    SPARK_WORKER_CORES=10
    SPARK_WORKER_MEMORY=60g
    
    spark-env.sh (on Slave2):
    SPARK_WORKER_CORES=10
    SPARK_WORKER_MEMORY=60g
    

    在每台机器上的 slaves.conf 中如下

    masterip
    slave1ip
    slave2ip
    

    经过上述配置后,您有 3 名工作人员,一名在主机上,另外 2 名在节点上,您的驱动程序也在主机上。

    但我们小心,如果您的机器是小型资源管理器无法分配资源,您会为内存和内核提供大量配置。

    【讨论】:

      【解决方案3】:

      我知道这是一篇很老的帖子,但你为什么不在 spark-default.xml 中设置属性 spark.executor.memory 呢? (或 --executor-memory) 请注意,默认情况下此值为 1024MB,这就是您似乎遇到的情况。

      问题是 executor.memory 是在应用程序级别而不是在节点级别定义的,因此似乎没有办法在 diff 节点上启动具有不同内核/内存的执行程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        相关资源
        最近更新 更多