sparkジョブを実行していて、spark-defaults.shで次の設定を行います。名前ノードに以下の変更があります。私は1つのデータノードを持っています。そして私は2GBのデータに取り組んでいます。スパークジョブエラーGCオーバーヘッド制限を超えました
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でサイズが約2GBの場合の数値。 –
ドライバに5GB、executorに5GBを割り当てているので、ノードに10GB以上のRAMがあると思います。spark.driver.memoryを2GBに設定してみてください –