Python 使用mapPartitionsWithIndex()在Spark中如何为节点分配索引?
我试图在Spark集群上协调GPU的执行。为了实现这一点,我需要每个任务/分区在每个系统中只使用一个特定的GPU插槽。每个系统有4个gpu,我发现实现这一点的最简单方法是在rdd上使用数据执行mapPartitionsWithIndex(),然后使用索引作为gpu插槽 我的问题是,我是否可以依靠始终分配给工作节点的索引?是否有任何相关文件 快速示例:Python 使用mapPartitionsWithIndex()在Spark中如何为节点分配索引?,python,apache-spark,pyspark,partitioning,rdd,Python,Apache Spark,Pyspark,Partitioning,Rdd,我试图在Spark集群上协调GPU的执行。为了实现这一点,我需要每个任务/分区在每个系统中只使用一个特定的GPU插槽。每个系统有4个gpu,我发现实现这一点的最简单方法是在rdd上使用数据执行mapPartitionsWithIndex(),然后使用索引作为gpu插槽 我的问题是,我是否可以依靠始终分配给工作节点的索引?是否有任何相关文件 快速示例: from pyspark import SparkContext from pyspark.sql import SQLContext sc =
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext(appName="sample")
sqlContext = SQLContext(sc)
def print_partition_info(idx, part):
print "Index: {} - Partition data: {}".format(idx, part)
for p in part:
yield p
data = [1,1,1,2,2,2, 20, 30, 40, 100]
partitions = 4
rdd = sc.parallelize(data, partitions)
# rdd = rdd.coalesce(len(partition_keys))
rdd2 = rdd.mapPartitionsWithIndex(print_partition_info)
让我们假设在rdd2上运行操作的打印输出是
Index: 0 - Partition data: [1,1]
Index: 1 - Partition data: [1,2]
Index: 2 - Partition data: [2,2]
Index: 3 - Partition data: [20,30,40,100]
当这些分区被发送到工作区(比如2个工作区)时,它们是否总是像…辅助进程1分区=1,2
辅助分区2=3,4 在此基础上展开,分区是否总是针对10个或50个节点的集群进行排序 最后,这张幻灯片似乎支持这项技术:
简短回答:不。在集群中,如果可用,RessourceManager(大多数情况下)将使用worker,并且当您的系统是多用户的,或者您已经在集群的某个子集中启动了作业时,情况并不总是如此。因此,您不能用索引绑定工作者
因此,我非常确定索引0将绑定到数据中的第一个分区,依此类推。如果我错了,专家会纠正我。简短回答:不。在集群中,如果可用,RessourceManager(大多数情况下)将使用worker,并且当您的系统是多用户的,或者您已经在集群的某个子集中开始了作业时,情况并不总是如此。因此,您不能用索引绑定工作者
因此,我非常确定索引0将绑定到数据中的第一个分区,依此类推。如果我错了,专家会纠正我。我本来打算添加我自己的答案,因为我看到其他人在Spark上使用这种技术进行GPU计算,但由于我仍在测试它,所以我还没有开始使用它,我只使用了一个独立的Spark群集。但是从我到目前为止的测试来看,mapPartitionsWithIndex总是按顺序为每个节点分配索引。第一个可用的节点仍将被拾取,但它们始终保持顺序,这样一个包含10个系统的集群就可以在每个系统中分配索引为%GPU_count的GPU。我将很快发布一个链接。我打算添加我自己的答案,因为我看到其他人在Spark上使用这种技术进行GPU计算,但由于我仍在测试它,我还没有开始使用它,我只使用一个独立的Spark群集。但是从我到目前为止的测试来看,mapPartitionsWithIndex总是按顺序为每个节点分配索引。第一个可用的节点仍将被拾取,但它们始终保持顺序,这样一个包含10个系统的集群就可以在每个系统中分配索引为%GPU_count的GPU。我将很快发布一个链接。