apache-spark - Google Dataproc 上的 Spark UI:数字解释
问题描述
我在 Google Dataproc 集群上运行 spark 作业(3 个节点 n1-highmem-4,因此 4 个内核和每个 26GB,主节点类型相同)。关于 Hadoop 和 spark UI 上显示的信息,我有几个问题:
当我检查 Hadoop UI 时,我得到了这个:
我的问题是:我的总 RAM 应该是 84 (3x26) 那么为什么这里只显示 60Gb 呢?24GB 是否用于其他用途?
这是显示当前启动的执行程序的屏幕。我的问题是:
为什么只使用 10 个核心?由于我们有 12 个内核,我们是否应该能够使用剩余的 2 个内核启动第 6 个执行程序,并且每个执行程序似乎使用 2 个?
为什么每个执行器有 2 个核心?如果我们运行 12 个执行器,每个执行器有 1 个核心,它会改变什么吗?
什么是“输入”列?每个执行者收到分析的总量?
这是“存储”面板的屏幕截图。我看到了我正在处理的数据框。我不明白“内存大小”列。它是用于缓存数据帧的总 RAM 吗?与我加载到数据帧(500GB+)中的行文件的大小相比,它似乎非常低。这是一个错误的解释吗?
感谢任何将阅读本文的人!
解决方案
如果您可以看一下这个答案,它主要回答了您的问题 1 和 2。
总而言之,总内存较少,因为保留了一些内存来运行操作系统和系统守护程序或 Hadoop 守护程序本身,例如Namenode、NodeManager。
与核心类似,在您的情况下,它将是 3 个节点,每个节点运行 2 个执行器,每个执行器使用 2 个核心,应用程序主节点除外。应用master所在的节点,只有一个executor,剩下的core给master。这就是为什么您只看到 5 个执行程序和 10 个核心的原因。
对于您的第三个问题,该数字应该是该 RDD 中的分区使用的内存,在您的情况下,它大约等于分配给每个执行程序的内存,约为 13G。
请注意,Spark 不会一次加载您的 500G 数据,而是将数据加载到分区中,同时加载的分区数取决于您可用的内核数。
推荐阅读
- java - 指定 URI 没有路径映射时无法捕获 404 异常
- java - 在 Spring Boot 应用程序中序列化 API 请求参数的问题
- angular - 如何去除 Angular 材质数据表排序方向为空状态?
- google-cloud-dlp - 使用 Cloud DLP 时出现 BigQuery 表错误中的未知字段
- python - 在仅将非内部代码行打印到屏幕的跟踪模式下运行 python 脚本
- inno-setup - 在 Inno Setup 中使用“signonce”标志有什么意义?
- python - 将 df 转换为列表列表
- c# - 在 Win Forms 标签文本未更新
- json - 选择下拉菜单以更新颤动中的数据表
- javascript - SyntaxError: Unexpected token: eof (undefined) when concatenating file content with string 然后用 terser 缩小