gpt4 book ai didi

java - Spark Streaming gc 设置问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:37 25 4
gpt4 key购买 nike

我的逻辑如下。

  1. 使用createDirectStream在Kafka中按日志类型获取主题。

  2. 重新分区后,日志会经过各种处理。

  3. 使用combineByKey为每种日志类型创建单个字符串(使用StringBuilder)。

  4. 最后按日志类型保存到HDFS。

添加字符串的操作很多,所以GC会频繁发生。

在这种情况下如何设置 GC 比较好?

///////////////////////

有各种逻辑,但我认为做combineByKey有问题。

rdd.combineByKey[StringBuilder](
(s: String) => new StringBuilder(s),
(sb: StringBuilder, s: String) => sb.append(s),
(sb1: StringBuilder, sb2: StringBuilder) => sb1.append(sb2)
).mapValues(_.toString)

最佳答案

你可以用它做的最简单、影响最大的事情combineByKey表达式是调整 StringBuilder 的大小您进行创建,以便在将字符串值合并到其中时不必扩展其支持字符数组;调整大小会放大分配率,并通过从旧后备阵列复制到新后备阵列而浪费内存带宽。作为猜测,我会说选择结果数据集记录的字符串长度的第 90 个百分位。

第二件事(在收集了中间值的一些统计数据之后)是让您的组合器函数选择 StringBuilder当您调用 sb1.append(sb2) 时,该实例有空间容纳另一个实例.

需要注意的一件好事是使用 Java 8;当字符串和字符串缓冲区的工作量很大时,它的优化会产生显着的差异。

最后但并非最不重要的一点是,进行分析以了解您实际在哪里度过了周期。此工作负载(不包括您正在执行的任何其他自定义处理)不需要将大量对象(如果有)提升到老年代,因此您应该确保年轻代具有足够的大小并且并行收集。

关于java - Spark Streaming gc 设置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com