当前位置: 首页 > 知识库问答 >
问题:

火花作业错误超出GC开销限制[重复]

赫连瀚
2023-03-14

我正在运行一个火花作业,我在spark-defaults.sh.设置了以下配置,我在名称节点中有以下更改。我有1个数据节点。我正在处理2GB的数据。

spark.master                     spark://master:7077
spark.executor.memory            5g
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://namenode:8021/directory
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.driver.memory              5g
spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

但我得到一个错误,说GC限制超过。

这是我正在编写的代码。

import os
import sys
import unicodedata
from operator import add 

try:
    from pyspark import SparkConf
    from pyspark import SparkContext
except ImportError as e:
    print ("Error importing Spark Modules", e)
    sys.exit(1)


# delimeter function
def findDelimiter(text):
    sD = text[1] 
    eD = text[2] 
    return (eD, sD) 

def tokenize(text):
    sD = findDelimiter(text)[1]
    eD = findDelimiter(text)[0]
    arrText = text.split(sD)
    text = ""
    seg = arrText[0].split(eD)
    arrText=""
    senderID = seg[6].strip()
    yield (senderID, 1)


conf = SparkConf()
sc = SparkContext(conf=conf)

textfile = sc.textFile("hdfs://my_IP:9000/data/*/*.txt")

rdd = textfile.flatMap(tokenize)
rdd = rdd.reduceByKey(lambda a,b: a+b)
rdd.coalesce(1).saveAsTextFile("hdfs://my_IP:9000/data/total_result503")

我甚至尝试了GroupByKey而不是也。但是我得到了同样的错误。但是,当我试图删除还原ByKey或GroupByKey我得到的输出。有人能帮我解决这个错误吗?

我是否也应该在hadoop中增加GC的大小。正如我前面所说的,我已经将driver.memory设置为5gb,我在名称节点中完成了。我应该在数据节点中也这样做吗?

共有3个答案

史良哲
2023-03-14

我能解决这个问题。我在主节点的根用户中运行hadoop。但是我在datanodes中的另一个用户中配置了hadoop。现在,我在数据节点的根用户中配置了它们,并增加了执行器和驱动程序内存,运行良好。

穆城
2023-03-14

您的代码应该与您的配置一起使用。如前所述,尝试使用G1GC。还可以尝试降低存储内存的比例。默认为60%。尝试将其降低到40%或更低。您可以通过添加spark进行设置。存储memoryFraction 0.4

齐阎宝
2023-03-14

尝试为您的spark-defaults.sh添加以下设置:

火花驾驶员extraJavaOptions-XX:UseG1GC

火花遗嘱执行人。extraJavaOptions-XX:UseG1GC

调优jvm垃圾收集可能很棘手,但“G1GC”似乎效果不错。值得一试!!

 类似资料:
  • 我有一个Spark作业抛出“java.lang.OutOfMemoryError:GC开销限制超出”。 作业正在尝试处理4.5g的文件。 我尝试了以下spark配置:

  • 当我执行我的测试时,我得到了这个错误消息: 我知道什么是,但GC开销限制意味着什么?我怎样才能解决这个问题?

  • 我正在IntelliJ Idea Ultimate Edition 2020.2.2上运行Grails 2.5.0。它可以很好地编译和构建代码,但它会不断抛出“java.lang.OutOfMemoryError:超出GC开销限制”错误(整个错误都是复制并粘贴在最后)。以下是我在研究这个错误的基础上尝试的东西: 1)增加构建进程堆大小(在2G、4G和6G下尝试)https://intellij-s

  • 问题内容: 我执行JUnit测试时收到以下错误消息: 我知道是什么OutOfMemoryError,但是GC开销限制是什么意思?我该如何解决? 问题答案: 该消息表示由于某种原因,垃圾收集器占用了过多的时间(默认情况下为该进程所有CPU时间的98%),并且每次运行时恢复的内存很少(默认为堆的2%)。 这实际上意味着你的程序停止任何进展,并且一直在忙于仅运行垃圾回收。 为了防止你的应用程序浪费CPU

  • 使用当我尝试构建我的项目时,这种错误越来越多: 错误:任务“:app:CompiledEbugJavaWithJavac”执行失败。OutofMemoryError:超出GC开销限制 有什么办法解决这个问题吗?

  • 我正在尝试预处理一个大的txt文件(10G),并将其存储在二进制文件中以备将来使用。当代码运行时,速度会减慢,并以 异常线程"main"java.lang.OutOfMemoryError: GC开销限制超过 输入文件具有以下结构 这是我正在使用的代码: 基本上,它通过in文件并将数据存储到对象HMbicnt(这是一个哈希映射)。一旦在第二列中遇到新值,它应该将对象写入输出文件,释放内存并继续。