用于StringBuffer.append()的Spark Job中的java.lang.OutOfMemoryError

时间:2017-10-18 02:46:15

标签: java apache-spark bigdata stringbuffer

我正在尝试使用来自X,StringBuffer的Map.entry的mapToPair函数来形成X,StringBuffer的Tuple2。 (X是用户定义的对象)代码如下:

JavaPairRDD<X, StringBuffer> d = data_obj
            .mapToPair(new PairFunction<Map.Entry<X, Object>, X, StringBuffer>() {
                public Tuple2<X, StringBuffer> call(Map.Entry<X, Object> S) {
                    Tuple2<X, StringBuffer> temp_map = null;
                    if (S.getValue() != null) {

                        StringBuffer temp = (StringBuffer) S.getValue();
                        temp_map = new Tuple2<X, StringBuffer>(S.getKey(), temp);
                    }

                    return temp_map;

                }
            });

首先,对于2.3 GB数据的输入大小,此过程大约需要8分钟。此外,在下一步,我使用reducebyKey,我得到java.lang.OutOfMemoryError。

JavaPairRDD<X, StringBuffer> Data = d.reduceByKey(new Function2<StringBuffer, StringBuffer, StringBuffer>() {
                public StringBuffer call(StringBuffer s1, StringBuffer s2) {
                    return s1.append(s2);
                }
            });

我有12个节点,每个节点有64 GB内存和2 6个核心处理器。 我使用以下配置提交Spark作业:

 spark-submit --class main class --master master port --deploy-mode client --conf "spark.executor.extraJavaOptions=-XX:+UseParallelGC" --driver-memory 24g --executor-memory 40g --executor-cores 1 --conf "spark.storage.memoryFraction=1" --conf "spark.core.connection.ack.wait.timeout=700" --conf "spark.yarn.executor.memoryOverhead=4096" --conf "spark.yarn.driver.memoryOverhead=8192" --conf "spark.shuffle.compress=true" <.jar> file  arguments

我不知道自己做错了什么。

0 个答案:

没有答案