Spark 组由于内存不足问题

2024-01-25

我正在一个相当小的数据集(HDFS 中的 80 个文件,总共很少)上执行一个简单的 groupBy。我在纱线集群中的 8 台低内存机器上运行 Spark,即:

spark-submit ... --master yarn-client --num-executors 8 --executor-memory 3000m --executor-cores 1

该数据集由长度为 500-2000 的字符串组成。

我正在尝试做一个简单的groupByKey(见下文),但它失败了java.lang.OutOfMemoryError: GC overhead limit exceeded例外

val keyvals = sc.newAPIHadoopFile("hdfs://...")
  .map( someobj.produceKeyValTuple )
keyvals.groupByKey().count()

我可以使用以下方法计算组大小reduceByKey没有问题,请确保问题不是由单个过大的组引起的,也不是由过多的组引起的:

keyvals.map(s => (s._1, 1)).reduceByKey((a,b) => a+b).collect().foreach(println)
// produces:
//  (key1,139368)
//  (key2,35335)
//  (key3,392744)
//  ...
//  (key13,197941)

我尝试过重新格式化、重新排列和增加 groupBy 并行度:

keyvals.groupByKey(24).count // fails
keyvals.groupByKey(3000).count // fails
keyvals.coalesce(24, true).groupByKey(24).count // fails
keyvals.coalesce(3000, true).groupByKey(3000).count // fails
keyvals.coalesce(24, false).groupByKey(24).count // fails
keyvals.coalesce(3000, false).groupByKey(3000).count // fails

我尝试过玩spark.default.parallelism,并且增加spark.shuffle.memoryFraction to 0.8同时降低spark.storage.memoryFraction to 0.1

失败的阶段(计数)将在 3000 个任务中的第 2999 个任务上失败。

我似乎找不到任何表明 groupBy 不应该只溢出到磁盘而不是将内容保留在内存中的内容,但我就是无法让它正常工作,即使在相当小的数据集上也是如此。显然情况并非如此,我一定做错了什么,但我不知道从哪里开始调试!


Patrick Wendell 阐明了 groupBy 运算符的一些细节在邮件列表上 http://apache-spark-user-list.1001560.n3.nabble.com/Understanding-RDD-GroupBy-OutOfMemory-Exceptions-td11427.html#a11487。要点如下:

在分区内,东西会溢出 [...] 这种溢出只能发生跨键眼下。目前钥匙内不会发生溢出。 [...] GroupBy 的一个键内的溢出很可能会出现在 Spark 的下一版本 Spark 1.2 中。 [...] 如果目标实际上是将与每个组关联的所有值写入磁盘,并且与单个组关联的值大于内存容量,则现在无法使用 groupBy 运算符来完成此操作。

他进一步建议了一种解决方法:

解决此问题的最佳方法在一定程度上取决于您尝试对下游数据执行的操作。通常的方法涉及细分任何非常大的组,例如,将小范围(1-10)内的散列值附加到大键。然后,您的下游代码必须处理聚合每个组的部分值。如果您的目标只是将每个组按顺序放置在磁盘上的一个大文件上,您可以调用sortByKey也带有散列后缀。排序函数在 Spark 1.1(预发行版)中被外部化。

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

Spark 组由于内存不足问题 的相关文章

随机推荐

  • open() 不适用于隐藏文件 python

    我想使用 python 在隐藏文件夹中创建并写入 txt 文件 我正在使用这段代码 file name hi txt temp path myfolder docs file name file open temp path w file
  • 在实践中,std::sort 和 std::stable_sort 之间的性能差距有多大?

    两者都应该以 O n log n 的速度运行 但一般来说排序比 stable sort 更快 实践中的性能差距有多大 你对此有一些经验吗 我想要对大量大小约为 20 字节的结构进行排序 对于我来说 结果的稳定性很好 但这不是必须的 目前底层
  • C++ 联合中“受保护”的意义是什么

    受保护的成员或函数有什么用途吗 您不能从联合继承 因此没有子项可以访问它 它是否提供了功能用途 或者只是因为移除它很麻烦而存在 protected in a union变得完全等价于private 但是这个津贴没有坏处 并且避免了额外的特殊
  • 循环播放特定 Gmail 标签的邮件(而非线程)

    我添加了具体的messages 而且不是全部thread 到标签to process通过以下步骤 Turn Conversation ModeGmail 设置中关闭 贴上标签to process到特定消息 当显示消息时 我可以确认只有特定的
  • 如何在Python中使用循环创建元组[重复]

    这个问题在这里已经有答案了 我想创建这个元组 a 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 我尝试过这个 a 1 1 1 for i in range 2 10 a a i
  • 访问 coo_matrix 中的元素

    这是一个非常简单的问题 对于像 coo matrix 这样的 SciPy 稀疏矩阵 如何访问单个元素 类比 Eigen 线性代数库 可以使用 coeffRef 访问元素 i j 如下所示 myMatrix coeffRef i j 来自 c
  • Web 应用程序中的 Spring 线程

    我正在为MMO浏览器游戏编写服务器 我需要创建几个线程 他们将一直运行 并有一些睡眠时间 使用这样的弹簧线是个好主意吗 Component Scope prototype public class PrintTask2 implements
  • Instagram 基本显示 API 分页

    无论如何 是否可以对使用 Instagram Basic Display API 获得的媒体结果使用分页 我已阅读以下文档 但他们没有任何使用分页的示例 https developers facebook com docs instagra
  • 将带有描述性注释的框添加到 ggplot2 中的 y 轴

    我正在尝试向我的 Y 轴添加另一个标签或描述 我附上了一张图片作为我想要完成的任务的参考 我找不到任何描述如何向轴添加其他元素的内容 它是 Y 轴旁边的 好 和 坏 框 我试图将其合并到我的 ggplot 中 谢谢 在此输入图像描述 htt
  • 使用 React Native 和 Hooks 时,Jest 测试期间状态不会更新

    我正在尝试测试组件中的功能 基本思想是设置某种状态 当按下按钮时 将使用设置的状态调用函数 该代码可以工作 但是当我尝试测试它时 我没有得到预期的结果 就好像在测试期间状态从未被设置 我正在使用 Jest 和 Enzyme 测试的 Reac
  • SQL Server 中 INNER 连接和笛卡尔连接的区别[重复]

    这个问题在这里已经有答案了 可能的重复 内连接和全连接的区别 https stackoverflow com questions 3022713 difference between inner join full join 这两者之间有什
  • Node js Express 应用程序中使用 setTimeout 获取请求的并发性

    控制台日志图片 https i stack imgur com TKhfa png const express require express const app express const port 4444 app get async
  • 提高 Python 模块导入速度

    之前已经问过如何加速Python模块导入的问题 加速 python 导入 加载器 https stackoverflow com questions 2010255 speeding up the python import loader
  • 内存不足异常selenium服务器2.0b3

    我们刚刚部署了selenium服务器2 0b3 从1 0 3升级 它 看起来有一些相当严重的内存泄漏 OutOfMemory 运行时间超过 30 分钟时抛出异常 是否有任何直接的解决方法来处理内存泄漏 2 0b3 硒服务器 我希望获得 2
  • gun db 中公共空间、用户空间和冻结空间的简单示例

    枪看起来很棒 既有用又好用 然而 我很难理解之间的区别public空间放置 auser空间放置和frozen空间放置 https gun eco docs Introduction data 我尝试的最简单的例子是 公共场所 let gun
  • 如何将X11事件传递给QDialog

    目前 我正在尝试将系统 X11 事件 在 Linux 上 传递给我创建的对象 为此 我从 QApplication 中将 eventFilter 安装到了我的对象上 这是有效的 因为它获取应用程序的所有事件 但是我还需要传递对象 X11 事
  • bash 中的数组运算符

    有没有办法测试数组是否包含指定元素 例如 array one two three if one in array then fi 一个 for 循环就可以解决这个问题 array one two three for i in array d
  • NodeJS 和客户端与 Yeoman 和 Mocha 的全面集成测试

    我与 Yeoman 一起运行了很棒的客户端测试 Yeoman 编译我的 CoffeeScript 在服务器中打开测试页面 使用 PhantomJS 访问它 并将所有测试结果传递到命令行 这个过程非常hacky 测试结果通过alert 发送到
  • 用猫鼬增加价值?

    我有一个mongoose我的模型node js应用程序 代表发票 我已经弄清楚了大部分内容 但我确实需要确保我的发票被编号 递增 以便能够为我的客户提供正确的参考 使用 SQL 数据库 我会创建一个AUTO INCREMENT列保存这个值
  • Spark 组由于内存不足问题

    我正在一个相当小的数据集 HDFS 中的 80 个文件 总共很少 上执行一个简单的 groupBy 我在纱线集群中的 8 台低内存机器上运行 Spark 即 spark submit master yarn client num execu