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 PySpark块矩阵乘法在OOM中失败_Apache Spark_Pyspark_Matrix Multiplication - Fatal编程技术网

Apache spark PySpark块矩阵乘法在OOM中失败

Apache spark PySpark块矩阵乘法在OOM中失败,apache-spark,pyspark,matrix-multiplication,Apache Spark,Pyspark,Matrix Multiplication,我正在尝试使用Pyspark执行大小为67584*67584的矩阵乘法链,但它经常出现内存不足或OOM错误。以下是详细信息: 输入为matlab文件(.mat文件),该文件将矩阵包含在单个文件中。我使用scipy loadmat加载文件,将文件拆分为块大小(1024*1024)的多个文件,并以.mat格式存储它们。 现在mapper使用filelist加载每个文件,并创建块的rdd filelist=sc.textFile(BLOCKS_DIR+'filelist.txt',minPartiti

我正在尝试使用Pyspark执行大小为67584*67584的矩阵乘法链,但它经常出现内存不足或OOM错误。以下是详细信息: 输入为matlab文件(.mat文件),该文件将矩阵包含在单个文件中。我使用scipy loadmat加载文件,将文件拆分为块大小(1024*1024)的多个文件,并以.mat格式存储它们。 现在mapper使用filelist加载每个文件,并创建块的rdd

filelist=sc.textFile(BLOCKS_DIR+'filelist.txt',minPartitions=200)
blocks\u rdd=filelist.map(MapperLoadBlocksFromMatFile.cache())
MapperLoadBlocksFromMatFile是一个函数,如下所示:

 def MapperLoadBlocksFromMatFile(filename):
         data = loadmat(filename)
         G = data['G']
         id = data['block_id'].flatten()
         n = G.shape[0]
         if(not(isinstance(G,sparse.csc_matrix))):
                 sub_matrix = Matrices.dense(n, n, G.transpose().flatten())
         else:
                 sub_matrix = Matrices.dense(n,n,np.array(G.todense()).transpose().flatten())
     return ((id[0], id[1]), sub_matrix)
现在,一旦我有了这个rdd,我就从它创建一个块矩阵。然后用它做一个矩阵乘法

邻接矩阵=块矩阵(块rdd,块大小,块大小,邻接矩阵形状[0],邻接矩阵形状[1])
我使用BlockMatrix实现中的乘法方法,每次都会耗尽内存

Result=邻接矩阵乘法(邻接矩阵)
以下是群集配置的详细信息:

50 nodes of 64gb Memory and 20 cores processors.
worker-> 60gb and 16 cores
executors-> 15gb and 4 cores each
driver.memory -> 60gb and maxResultSize->10gb
我甚至试过使用rdd.compress。尽管有足够的内存和内核,我每次都会耗尽内存。每次一个不同的节点内存耗尽时,我都无法在集群中使用visualVM。我做错了什么?blockmatrix的创建方式是否错误?还是我记性不够?

尽量减少工作人员和执行人员的内存(顺便问一下,他们之间有什么区别?:p)。是的,我说的更少……一个工人可以接待多个遗嘱执行人。因此,在这种情况下,具有60gb和16个核心的工作进程最多可以承载4个执行器,因为每个执行器都有15gb和4个核心。关于内存不足的问题,我确实尝试了内存不足的选项。但都不起作用。是的,没错!该死的,我太累了…如果你看到记忆问题,但我现在真的无能为力,必须休息。祝你好运谢谢你分享我的博客。虽然我没有使用Thread,但我会尝试减少执行器内存来解释python进程。哦,你和你绝对应该休息!有一个看起来与你的问题有关。尽量给工作人员和执行者更少的内存(顺便说一句,他们之间有什么区别?:P)。是的,我说的更少……一个工人可以接待多个遗嘱执行人。因此,在这种情况下,具有60gb和16个核心的工作进程最多可以承载4个执行器,因为每个执行器都有15gb和4个核心。关于内存不足的问题,我确实尝试了内存不足的选项。但都不起作用。是的,没错!该死的,我太累了…如果你看到记忆问题,但我现在真的无能为力,必须休息。祝你好运谢谢你分享我的博客。虽然我没有使用Thread,但我会尝试减少执行器内存来解释python进程。哦,你和你绝对应该休息!有一个看起来与你的问题相关的问题。