spark scratch空间

cgvd09ve  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(284)

我有一个13台机器的集群,有4个物理cpu和24g的ram。
我用一个驱动程序和12个从属程序启动了一个spark群集。
我将从机的核心数设置为12个,这意味着我有一个集群,如下所示:

Alive Workers: 12
Cores in use: 144 Total, 110 Used
Memory in use: 263.9 GB Total, 187.0 GB Used

我使用以下配置启动了一个应用程序:

[('spark.driver.cores', '4'),
 ('spark.executor.memory', '15G'),
 ('spark.executor.id', 'driver'),
 ('spark.driver.memory', '5G'),
 ('spark.python.worker.memory', '1042M'),
 ('spark.cores.max', '96'),
 ('spark.rdd.compress', 'True'),
 ('spark.serializer.objectStreamReset', '100'),
 ('spark.executor.cores', '8'),
 ('spark.default.parallelism', '48')]

我知道executor有15g的ram,有8个任务槽,并行度为48(48=6个任务槽*12个从机)。
然后我在hdfs上有两个大文件:每个6g(来自12个文件的目录,每个文件有5个128mb的块),具有3倍的复制因子。我合并这两个文件=>我得到一个12 gb的Dataframe,我想,但我看到一个37 g的读取输入通过ihm:

这可能是第一个问题:为什么是37GB?
然后,由于执行时间对我来说太长,我尝试缓存数据以便可以更快地执行。但是缓存方法永远不会结束,在这里您可以看到它距离结束还有45分钟(而不是6分钟没有缓存!):

因此,我试图了解原因,并在ihm的存储部分看到内存/磁盘的使用情况:

所以rdd的某些部分仍保留在磁盘上。此外,我看到遗嘱执行人可能还有空闲的记忆:

在同一个“存储”页面上,我注意到rdd的大小已经大幅增加:

Storage Level: Disk Serialized 1x Replicated
Cached Partitions: 72
Total Partitions: 72
Memory Size: 42.7 GB
Disk Size: 73.3 GB

=>我明白:内存大小:42.7GB+磁盘大小:73.3GB=110G!=>所以我的6g文件在37g和110g上进行了转换???
但我试图理解为什么我的遗嘱执行人身上还有一些记忆,我去了一个“错误”的垃圾堆,我看到:

18/02/08 11:04:08 INFO MemoryStore: Will not store rdd_50_46
18/02/08 11:04:09 WARN MemoryStore: Not enough space to cache rdd_50_46 in memory! (computed 1134.1 MB so far)
18/02/08 11:04:09 INFO MemoryStore: Memory use = 1641.6 KB (blocks) + 7.7 GB (scratch space shared across 6 tasks(s)) = 7.7 GB. Storage limit = 7.8 GB.
18/02/08 11:04:09 WARN BlockManager: Persisting block rdd_50_46 to disk instead.

在这里我看到执行器想要缓存一个1641.6KB的块(只有1mo!)我不能,因为有一个7.7GB的“共享6个任务”。
=>什么是“暂存空间”?
=>6个任务=>来自48/12=6的并行性
然后我回到应用程序信息,我看到持续48分钟的计数只读取了37 gb的数据(48分钟显然也是用来缓存数据的)

当我对缓存的Dataframe进行计数时,有一个116g的输入读取:

最后,缓存计数节省的时间并不是那么令人印象深刻,这里有3个持续时间:4.8':缓存df计数48':缓存时计数5.8':未缓存df计数(直接从hdfs读取)

为什么会这样?因为缓存的df没有那么多缓存:

意味着在内存中大约40 gb,在磁盘上大约60 gb。
我很惊讶,因为15g/executor*12 slaves=>180GB的内存,我只能缓存40GB。。。但事实上我记得记忆是分开的:
Spark30%
54%用于储存
洗牌16%
所以我知道我有54%*15g的存储空间,即8.1G,也就是说在我的180GB上,我只有97GB的存储空间。为什么我有90-40=50克没有使用呢?
分组。。。这是一篇很长的文章!很多问题。。。对不起的。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题