如何为工人使用独立的Master资源?

时间:2015-12-01 09:34:19

标签: apache-spark

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

  • Master:12 CPU核心& 128 GB RAM
  • Slave1:12个CPU核心& 64 GB RAM
  • Slave2:6 CPU核心& 64 GB RAM

实际上我的奴隶文件有两个条目:

slave1_ip
slave2_ip

因为我的主人也有一个非常“强大”的硬件,所以它不会仅用于主线程的容量。所以我想问一下是否有可能从主机提供一些CPU内核和RAM到第三个工作者实例......?谢谢!

首先尝试解决问题

在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

我还将主人的IP地址添加到slaves文件中。

群集现在包含3个工作节点(从属+主服务器),这是完美的。

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

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

3 个答案:

答案 0 :(得分:4)

这是可能的。只需限制主服务器使用的内核和内存数量,并在计算机上运行一个或多个工作程序。

使用conf/spark-defaults.conf,您可以设置spark.driver.memoryspark.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.memorySPARK_EXECUTOR_MEMORY设置执行者(每个工作人员)的RAM数量(如以下屏幕截图所示)。

Memory per Node in Spark Standalone's web UI

答案 1 :(得分:1)

在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个工人,你的驱动程序也在主机上。

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

答案 2 :(得分:0)

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

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