我有一个包含4个节点的集群(每个节点有16个核心),使用Spark 1.0.1。
我有一个RDD,我已经重新划分,因此它有200个分区(希望增加并行性)。
当我在这个RDD上进行转换(例如过滤器)时,我似乎无法在一个时间点获得超过64个任务(我的4个节点上的核心总数)。按任务,我的意思是Application Spark UI下显示的任务数。我尝试将spark.default.parallelism显式设置为128(希望我能同时运行128个任务)并在Application UI中为正在运行的应用程序验证这一点,但这没有任何效果。也许,对于“过滤器”,这会被忽略,默认值是可用的核心总数。
我对Spark很新,所以也许我只是缺少或误解了一些基本的东西。任何帮助将不胜感激。
答案 0 :(得分:1)
这是正确的行为。每个“核心”一次只能执行一个任务,每个任务对应一个分区。如果您的群集只有64个核心,则一次最多只能运行64个任务。
您可以为每个节点运行多个工作程序以获得更多执行程序。这样可以在集群中提供更多内核。但是,无论你有多少核心,每个核心一次只能运行一个任务。
您可以在以下主题中看到更多详细信息 How does Spark paralellize slices to tasks/executors/workers?