我已经安装了Apache Spark 1.5.2(适用于Hadoop 2.6+)。我的群集包含以下硬件:
实际上我的奴隶文件有两个条目:
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,请参阅屏幕截图:
有人可以说如何解决这个问题吗?设置spark.executor.memory将为每台机器设置相同数量的RAM,这对于尽可能多地使用RAM来说并不是最佳的......!我究竟做错了什么?谢谢!
答案 0 :(得分:4)
这是可能的。只需限制主服务器使用的内核和内存数量,并在计算机上运行一个或多个工作程序。
使用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数量(如以下屏幕截图所示)。
答案 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节点上启动具有不同内核/内存的执行程序。