Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在RDD上设置正确数量的分区_Apache Spark_Partitioning_Rdd - Fatal编程技术网

Apache spark 在RDD上设置正确数量的分区

Apache spark 在RDD上设置正确数量的分区,apache-spark,partitioning,rdd,Apache Spark,Partitioning,Rdd,我读到一些评论说,RDD的分区数是核心数的2-3倍。我有8个节点,每个节点有两个12核处理器,所以我有192个核,我在384-576之间设置了分区,但它似乎没有有效地工作,我尝试了8个分区,同样的结果。也许我必须设置其他参数,以便我的工作在集群上比在机器上更好地工作。我补充说,我分析的文件有150k行 val data = sc.textFile("/img.csv",384) 主要效果是指定的分区太少或太多 分区太少,您将无法利用集群中所有可用的核心 分区过多将导致管理许多小任务的开销过大

我读到一些评论说,RDD的分区数是核心数的2-3倍。我有8个节点,每个节点有两个12核处理器,所以我有192个核,我在384-576之间设置了分区,但它似乎没有有效地工作,我尝试了8个分区,同样的结果。也许我必须设置其他参数,以便我的工作在集群上比在机器上更好地工作。我补充说,我分析的文件有150k行

 val data = sc.textFile("/img.csv",384)

主要效果是指定的分区太少或太多

  • 分区太少,您将无法利用集群中所有可用的核心
  • 分区过多将导致管理许多小任务的开销过大
  • 在这两者之间,第一个对性能的影响要大得多。对于分区计数低于1000的情况,此时安排太多smalls任务的影响相对较小。如果有上万个分区,那么spark的速度会非常慢

    现在,考虑到您的情况,您从8和384-576分区得到了相同的结果。一般来说,经验法则说, NoOfPartitions=(NumberOfWorkerNodes*NoOfCoresPerWorkerNode)-1 它说,正如我们所知,任务是由CPU核心处理的。因此,我们应该将多个分区(集群中的核心总数)设置为process-1(对于驱动程序的应用程序主控程序)。这意味着每个核心将一次处理每个分区。 这意味着使用191个分区可以提高性能。否则,设置越来越少的分区的影响将在Beginning中解释


    希望这会有帮助

    “似乎工作效率不高”是一个相当笼统的描述。你能提供一些细节吗?它在8个节点上比在我的单台机器上工作得慢。Well,150k不是很多(数据集的大小是多少?),除非你进行真正复杂的转换协调和通信开销可能只会比在本地执行任务的成本更大。我还有一个文件,有2m行和5列,我怎样才能相应地设置分区号?你有没有为你的大文件尝试过2-3*内核?但老实说,200万也不算多。你在每一行上做什么计算?