如何阅读 Spark UI
Posted
技术标签:
【中文标题】如何阅读 Spark UI【英文标题】:How to read Spark UI 【发布时间】:2017-06-15 12:56:41 【问题描述】:我正在尝试了解这张图片中当前 Spark 的情况。
它对我的影响
4 台 worker 机器,每台 93.3 Gb 内存 apppyskark-shell
在每台机器上使用 10 个内核,在每台机器上使用 32 Gb RAM
app backtestin2
在每台机器中使用 2 或 6 个内核,在每台机器中使用 8 Gb
(注意:我确定作业是如何在节点之间分配的。)
我的期望
apppyskark-shell
在每台机器上使用 10 个内核,在每台机器上使用 32 Gb RAM 每个内核 = 总共使用 320 Gb
app backtestin2
使用 16 个内核在机器之间拆分,每个内核在每台机器中需要 8 Gb = 总共 128 Gb
这是否意味着每个节点的内存在特定应用的节点上运行的所有任务之间共享?我认为属性conf.set('spark.executor.memory', executor_memory)
应该是每个任务。
理由:
我确实知道每个任务需要多少内存,但我不知道每个执行程序有多少任务:因此我无法估计每个执行程序的内存。
【问题讨论】:
【参考方案1】:这是否意味着每个节点的内存在特定应用的节点上运行的所有任务之间共享?
没错,每个节点的内存是指为每个节点上的应用程序分配的总内存。该内存根据 spark 内存配置进一步拆分 (http://spark.apache.org/docs/latest/configuration.html#memory-management)。在估计内存需求时,需要考虑有多少内存将用于存储(即缓存的数据帧/rdds)和执行。默认情况下,一半内存用于执行任务,一半用于存储。同样可配置的是可以并行运行的任务数量(默认为核心数)。鉴于一半的内存用于执行,并且假设您已经对数据进行了适当的分区,那么使用默认配置运行应用程序所需的内存总量约为 2*(并行运行的任务数)*(需要的内存运行最大的任务之一)。当然,这个估计在很大程度上取决于您的具体用例、配置和实施。 https://spark.apache.org/docs/latest/tuning.html 中还有更多与内存相关的提示。希望 Spark 用户界面在未来得到改进,以便更清晰地了解内存使用情况。
【讨论】:
以上是关于如何阅读 Spark UI的主要内容,如果未能解决你的问题,请参考以下文章
如何使用许多小文件加速 Spark 的 parquet 阅读器