2016-06-22 12 views
1

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に設定しました。名前ノードでそれを行いました。データノードでもそれを行う必要がありますか?

+0

クラスタ内のデータサイズとノード数はどのくらいですか? –

+0

ノードが1でサイズが約2GBの場合の数値。 –

+0

ドライバに5GB、executorに5GBを割り当てているので、ノードに10GB以上のRAMがあると思います。spark.driver.memoryを2GBに設定してみてください –

答えて

2

は、あなたのspark-defaults.shの設定の下に追加してください:

spark.driver.extraJavaOptions-XX:+ UseG1GC

spark.executor.extraJavaOptions-XX: + UseG1GC

チューニングjvmガベージコレクションは難しいかもしれませんが、 "G1GC"はうまくいくようです。試してみる価値がある!

+0

これは試しましたが運がない... –

0

あなたの設定で作業していたはずのコードです。先に示唆したように、G1GCを使用してみてください。 保存メモリの割合もお試しください。デフォルトでは60%です。それを40%以下に減らしてみてください。 spark.storage.memoryFraction 0.4

0

私はこの問題を解決できました。私はマスターノードのルートユーザーでハープを実行していました。しかし、私は、データノード内の別のユーザーにハープを設定しました。今度はそれらをデータノードのルートユーザーで構成し、正常に動作したエグゼキュータとドライバのメモリを増やしました。

関連する問題