我尝试设置一个独立的Spark 2.0服务器来并行处理分析功能。为此,我想让一个工作人员拥有多个执行者。
我正在使用:
这仅用于纯粹的概念验证目的,但我希望有8个执行器,每个核心一个。
我试图关注这个主题的其他主题,但由于某种原因,它不适合我。 IE: Spark Standalone Number Executors/Cores Control
我的配置如下:
CONF \火花defaults.conf
spark.cores.max = 8
spark.executor.cores = 1
我试图改变我的spark-env.sh文件无济于事。相反,它发生的是它表明我的1名工人只有1个执行者。正如您在下面所看到的,它仍然显示独立的1个执行程序,其中包含8个内核。
答案 0 :(得分:4)
我相信你混淆了本地和独立模式:
local
,local[*]
或local[n]
,可以在本地模式下启动应用程序。 spark.executor.cores
和spark.executor.cores
不适用于本地模式,因为只有一个嵌入式执行程序。 独立模式需要独立的Spark cluster。它需要一个主节点(可以使用SPARK_HOME/sbin/start-master.sh
脚本启动)和至少一个工作节点(可以使用SPARK_HOME/sbin/start-slave.sh
脚本启动)。
SparkConf
应使用主节点地址来创建(spark://host:port
)。
答案 1 :(得分:2)
首先需要配置spark独立群集,然后设置要运行的每个spark应用程序所需的资源量。
要配置群集,您可以尝试:
在conf / spark-env.sh中:
Set the SPARK_WORKER_INSTANCES = 10
确定每个节点的Worker实例数(#Executors)(默认值仅为1)
Set the SPARK_WORKER_CORES = 15
一个Worker可以使用的核心数(默认值:所有核心,您的情况是36)
Set SPARK_WORKER_MEMORY = 55g
可以在一台计算机(工作节点)上用于运行Spark程序的内存总量。 将此配置文件复制到同一文件夹上的所有工作节点 通过在sbin中运行脚本来启动集群(sbin / start-all.sh,...) 由于您有5个工作人员,使用上述配置,您应该在主Web界面上看到5个(工人)* 10(每个工人的执行者)= 50个活动执行者(默认为http://localhost:8080)
在独立模式下运行应用程序时,默认情况下,它将获取群集中所有可用的执行程序。您需要显式设置运行此应用程序的资源量:例如:
val conf = new SparkConf()
.setMaster(...)
.setAppName(...)
.set("spark.executor.memory", "2g")
.set("spark.cores.max", "10")