Spark,执行器加载/查询数据 - 性能非常低

2024-04-29

我的用例如下:

写作RDD归档依据saveAsTable(对于 ORC 文件也是如此)。每次保存都会创建新文件(因此1000 000著作给我1000 000ORC 文件)。我知道每个 RDD 都会创建新的 ORC 文件,这是很自然的。但是,我不知道为什么从 ThriftServer 查询它们时如此慢。

我的问题是:如何理解这种奇怪的行为?
例如,SELECT COUNT(*)1000 000 行(因此相同的文件)大约需要1 minute (!).
但是,当我保存时1000 000行到一个文件,相同的查询适用于50ms.

我想了解这种差异。毕竟,1000 000文件数量很少。


计数操作的高级执行计划将如下所示(假设您的文件位于分布式文件系统中,例如我将使用 HDFS):

  1. 从 HDFS NameNode 请求文件

  2. 将 HDFS 块加载到执行器中

  3. 对每个分区进行计数(使用 ORC 元数据或直接 - 取决于实现)并将所有分区加在一起

一些估计:1000 000 个文件需要向 NameNode 发出相同数量的请求来解析数据块的物理位置。它在 文档:

例如ORC文件格式与RCFile格式相比有很多 优点如:

a single file as the output of each task, which reduces the NameNode's load

当 ORC 试图减少文件数量时,您的代码却做了相反的事情。和

默认条带大小为 250 MB。大条纹尺寸可实现大、 从 HDFS 高效读取。

文件页脚包含文件中的条带列表,条带的数量 每个条带的行数以及每列的数据类型。它还包含 列级聚合计数、最小值、最大值和总和。

像计数这样的简单统计数据是预先计算的,不应该是性能问题。您可以尝试通过暴力简单地向 HDFS NameNode 添加内存和 CPU 能力来解决问题,但我认为保留适度数量的文件是合理的。如果您的数据来自某个流源,您可以创建某种压缩作业,将小文件合并为大文件并定期运行。或者,作为替代方案,如果这种延迟适合您的用例,您可以每 2-5 分钟从源读取一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark,执行器加载/查询数据 - 性能非常低 的相关文章

随机推荐

  • Autodesk Forge Viewer 如何获取线起点/终点的坐标

    我正在尝试在 forge 查看器中突出显示房间 在 Revit 中 我创建了代表房间边界的线条 转换为 svf 后 我知道这些行的 dbids 现在我想知道这些线的起点和终点 顶点 以便我可以创建房间边界的 Three Shape 编辑 我
  • PyCharm 上的远程调试

    我的源代码存储在远程计算机上 我想远程编码和调试我的Python源代码 我应该如何配置PyCharm启用远程调试 对于远程调试 您需要将源代码复制到本地计算机 设置项目 配置到远程计算机的部署并添加远程 Python 解释器以在远程系统上运
  • Xcode:如何让目标设置从项目继承

    我们的目标设定是继承 https stackoverflow com a 1642738 47281从项目设置 我们更改了目标设置 中断继承 但现在希望目标再次开始从项目继承 你怎么能这样做呢 清除有问题的目标设置似乎不起作用 清除目标设置
  • MS Access DAO 连接在退出时放弃更改

    因此 我有一个 Access 表单 我在其中使用此 VBA 代码以及与 MySQL 数据库的 DAO 连接 一切都很好 但如果用户关闭表单而不单击 保存 按钮 新记录无论如何都会保存 所以我正在寻找的是 是否有任何方法可以在关闭事件时阻止将
  • 在 Android 中设置 Signalr:崩溃/挂起问题

    我跟着本教程 https whathecode wordpress com 2014 03 20 getting started with the java signalr sdk 为我的 Android 应用程序设置一个 NET 后端来实
  • 如何获取Linux中进程或端口的网络带宽使用情况

    我想获取每个进程的网络带宽使用情况 我找了很多这方面的资料 比如iftop nethogs http nethogs sourceforge net Linux进程浏览器 http sourceforge net projects proc
  • Google Sheets API v4:batchGet 不起作用

    无法使用 batchGet 让 Google Sheets API v4 返回多个范围值 它给出以下错误 尽管文档说它需要 valueRanges 但所有范围和电子表格 ID 都是正确的 额外的参数块必须是 javascript 对象文字
  • 处理 DBNull.Value

    我经常需要处理连接到网格控件的数据表 自定义更新似乎总是产生大量与 DBNull Value 相关的代码 我在这里看到了类似的问题 但认为必须有更好的答案 处理 DBNull 的最佳方法是什么 https stackoverflow com
  • 退格键删除整个跨度元素

    是否可以通过退格键防止跨度删除 div class form control span class correct answer span The correct answer is A 1 to 2 span span class sen
  • F# 是卡牌游戏 AI 的好语言吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 消息 discord.py 中的可点击链接

    我希望我的机器人将消息发送到聊天中 如下所示 await ctx send This country is not supported you can ask me to add it here 但是为了使 这里 成为可点击的链接 在 HT
  • 在函数中使用node-mysql

    我对 Nodejs 很陌生 有一个问题 尝试创建一个函数 该函数将调用我在表中提到其 ID 的任何字段的值 function getUserInfo userID dynamicField var query connection quer
  • 破译vtable转储

    我正在 玩 C 中的虚拟继承 我想知道类对象是如何布局的 我有这三个课程 class A private int a public A this gt a 47 virtual void setInt int x this gt a x v
  • 我怎样才能找出MySQL中的默认字符集/排序规则[重复]

    这个问题在这里已经有答案了 我在 Ubuntu 18 04 上使用 MySQL 和 MySQL Workbench 8 0 当我创建字符串类型的列时 我将字符集 排序规则保留为默认值 在 MySQL Workbench 中 它只是告诉我就是
  • 在 sails.js 中跟踪用户在线/离线状态

    我必须在我的 Web 应用程序中使用 sails js 中的 websockets 找出用户状态 即用户是否在线 离线 请帮我 多谢 从 Sails v0 9 8 开始 您可以使用onConnect and onDisconnect功能于c
  • CSS 的用户选择和可访问性

    如果我使用以下内容 webkit touch callout none webkit user select none khtml user select none moz user select none ms user select n
  • 如何有效地对一个数组中某个值在另一个数组中的位置出现的次数求和

    我正在寻找一种有效的 for 循环 避免解决方案来解决我遇到的数组相关问题 我想使用一个巨大的一维数组 A gt size 250 000 用于一维索引的 0 到 40 之间的值 以及用于第二维索引的具有 0 到 9995 之间的值的相同大
  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • Android - NumberPicker 滚动/快速滑动更快

    如何使数字选择器滚动 快速滑动更快 目前从00分钟到59分钟需要付出很大的努力 我尝试过一些例子Android 中 Viewpager 控制器速度减慢 https stackoverflow com questions 8155257 sl
  • Spark,执行器加载/查询数据 - 性能非常低

    我的用例如下 写作RDD归档依据saveAsTable 对于 ORC 文件也是如此 每次保存都会创建新文件 因此1000 000著作给我1000 000ORC 文件 我知道每个 RDD 都会创建新的 ORC 文件 这是很自然的 但是 我不知