我有一个带有1个Master(slaver1)和2个worker(slaver2,slaver3)的spark2.0.1集群,每台机器都有2GB RAM。当我运行命令时
def consecutiveLetter(mystr):
for x in range(len(mystr)-2) :
if ord(mystr[x])+1 == ord(mystr[x+1]) and ord(mystr[x+1])+1 == ord(mystr[x+2]) :
print("String has 3 consecutive letters")
return
print("String has no 3 consecutive letters")
当我检查web中的执行程序内存时(slaver1:4040 / executors /)。我发现它是110MB。
答案 0 :(得分:2)
您正在谈论的内存是存储内存实际上Spark将内存[被叫Spark Memory
]分为2区域优先Storage Memory
,其次是Execution Memory
总记忆可以通过此公式计算
(“Java Heap” – “Reserved Memory”) * spark.memory.fraction
只是为了概述存储内存是这个池用于存储Apache Spark缓存数据和临时空间序列化数据“unroll”。此外,所有“广播”变量都作为缓存块存储在那里
如果要查看提供的总内存,可以在开始时转到Spark UI Spark-Master-Ip:8080
[默认端口],您可以找到名为MEMORY
的部分,即spark使用的总内存。
由于
答案 1 :(得分:0)
执行和存储内存之间没有硬边界。存储内存比执行内存需要更多,反之亦然。该 执行和存储内存由(ExecutorMemory-300Mb)* spark.memory.fraction
提供在你的情况下(500-300)*)。75 = 150mb,在分配的Executor内存中会有3到5%的错误。
300Mb是保留内存
用户记忆=(ExecutorMemory-300)*)。(1-spark.memory.fraction)。
在您的情况下(500-300)*)。25 = 50mb