복붙노트

[HADOOP] 스파크 작업 오류 GC 오버 헤드 한도를 초과 함 [중복]

HADOOP

스파크 작업 오류 GC 오버 헤드 한도를 초과 함 [중복]

스파크 작업을 실행 중이며 spark-defaults.sh에서 다음 구성을 설정하고 있습니다. 이름 노드에서 다음과 같이 변경되었습니다. 하나의 데이터 노드가 있습니다. 그리고 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를 시도했다. 그러나 나는 같은 오류가 발생합니다. 그러나 reduceByKey 또는 groupByKey를 제거하려고하면 출력이 표시됩니다. 어떤 사람 이이 오류를 도울 수 있습니까?

hadoop에서 GC의 크기도 늘려야합니다. 앞에서 말했듯이 driver.memory를 5gb로 설정 했으므로 이름 노드에서 수행했습니다. 데이터 노드에서도 그렇게해야합니까?

해결법

  1. ==============================

    1.spark-defaults.sh에 아래 설정을 추가하십시오.

    spark-defaults.sh에 아래 설정을 추가하십시오.

    spark.driver.extraJavaOptions -XX : + UseG1GC

    spark.executor.extraJavaOptions -XX : + UseG1GC

    jvm 가비지 수집 조정이 까다로울 수 있지만 "G1GC"는 꽤 잘 작동합니다. 노력할만한 가치가 있습니다 !!

  2. ==============================

    2.당신의 구성과 함께 작동했던 코드. 앞서 제안했듯이 G1GC를 사용해보십시오. 또한 저장 메모리 비율을 줄이십시오. 기본적으로 60 %입니다. 40 % 이하로 줄이십시오. spark.storage.memoryFraction 0.4를 추가하여 설정할 수 있습니다

    당신의 구성과 함께 작동했던 코드. 앞서 제안했듯이 G1GC를 사용해보십시오. 또한 저장 메모리 비율을 줄이십시오. 기본적으로 60 %입니다. 40 % 이하로 줄이십시오. spark.storage.memoryFraction 0.4를 추가하여 설정할 수 있습니다

  3. ==============================

    3.나는 문제를 해결할 수 있었다. 마스터 노드의 루트 사용자에서 하둡을 실행 중이었습니다. 그러나 데이터 노드의 다른 사용자에서 hadoop을 구성했습니다. 이제 데이터 노드의 루트 사용자에서 구성하고 실행기 및 드라이버 메모리를 늘 렸습니다.

    나는 문제를 해결할 수 있었다. 마스터 노드의 루트 사용자에서 하둡을 실행 중이었습니다. 그러나 데이터 노드의 다른 사용자에서 hadoop을 구성했습니다. 이제 데이터 노드의 루트 사용자에서 구성하고 실행기 및 드라이버 메모리를 늘 렸습니다.

  4. from https://stackoverflow.com/questions/37958522/spark-job-error-gc-overhead-limit-exceeded by cc-by-sa and MIT license