Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark collect()javaRdd因内存错误而失败(EMR群集)_Java_Apache Spark_Rdd_Emr_Amazon Emr - Fatal编程技术网

Java Spark collect()javaRdd因内存错误而失败(EMR群集)

Java Spark collect()javaRdd因内存错误而失败(EMR群集),java,apache-spark,rdd,emr,amazon-emr,Java,Apache Spark,Rdd,Emr,Amazon Emr,Im在AWS EMR(弹性地图还原)群集上运行Spark应用程序 我的主节点特征是:8个vCore、15 GiB内存、80 GB SSD存储 我的执行器节点是:8个vCore、15个GiB内存、80个SSD GB存储 我有一个大小为-600MB的csvinputFile文件。我正在尝试将其读入JavaRdd,然后使用collect()将其转换为对象列表 这是我的密码: JavaRDD<WebLabPurchasesDataObject> allRecords = context.te

Im在AWS EMR(弹性地图还原)群集上运行Spark应用程序 我的主节点特征是:8个vCore、15 GiB内存、80 GB SSD存储 我的执行器节点是:8个vCore、15个GiB内存、80个SSD GB存储

我有一个大小为-600MB的csvinputFile文件。我正在尝试将其读入JavaRdd,然后使用collect()将其转换为对象列表

这是我的密码:

JavaRDD<WebLabPurchasesDataObject> allRecords = context.textFile(inputFile).map (
        data -> {
            String[] fields = data.split(",", -1);

            String hitDay = fields[0];
            String treatmentName = fields[1];
            String sessionId = fields[2];

            return new WebLabPurchasesDataObject(hitDay,treatmentName,sessionId);   
        });

allRecords.cache();

List<WebLabPurchasesDataObject> webLabRddAllRecordsList = allRecords.collect();

正如您所确定的,由于结果是在驱动程序上收集的,因此需要增加驱动程序内存。默认值为1GB,这对于您的情况来说是不够的

在创建SparkSession/SparkContext时添加此配置:
spark.driver.memory
的值更大:
2g
3g
。 如果您使用的是spark shell,则在启动spark shell时将其作为附加选项传递:
--3GB内存的驱动程序内存3g


我还建议您阅读更多有关此处描述的配置的信息:

正如您所确定的,由于结果是在驱动程序上收集的,因此您需要增加驱动程序内存。默认值为1GB,这对于您的情况来说是不够的

在创建SparkSession/SparkContext时添加此配置:
spark.driver.memory
的值更大:
2g
3g
。 如果您使用的是spark shell,则在启动spark shell时将其作为附加选项传递:
--3GB内存的驱动程序内存3g



我还建议您阅读更多有关此处描述的配置的信息:

感谢您与我们分享。顺便问一下:你有什么问题吗?问题是我每次运行这段代码时都会遇到内存不足的错误:Java堆空间。如何增加记忆?@seelenvirtuse这不是重复的。我添加了更多信息。我在aws EMR clusterI上运行Spark应用程序,我重新打开了这个问题。下一次,请准确。谢谢与我们分享。顺便问一下:你有什么问题吗?问题是我每次运行这段代码时都会遇到内存不足的错误:Java堆空间。如何增加记忆?@seelenvirtuse这不是重复的。我添加了更多信息。我在aws EMR clusterI上运行Spark应用程序,我重新打开了这个问题。下次,请准确点。嗨!谢谢你的帮助!当我尝试设置“spark.driver.memory”=“5g”时,在获取任务结果io.netty.handler.codec.DecoderException:java.lang.outofmemory错误:直接缓冲区内存orry,我错过了在驱动程序内存中加入另一个conf:
spark.driver.maxResultSize
您应该将它设置为要收集多少大对象。我建议您将其设置为
0
(无限制),这意味着您可以使用驱动程序提供的尽可能多的内存来收集结果。请告诉我这是否有效,在这种情况下,我将更新答案。谢谢!将尝试使用maxResultSize。在执行collect()之前是否需要缓存()我的javaRdd?如果是,我需要将什么StorageLevel设置为persist()函数?缓存/持久不会影响此OOM错误,因为这是由于驱动程序内存造成的。但是缓存肯定会提高性能,因为执行器上有足够的可用内存。嗨!谢谢你的帮助!当我尝试设置“spark.driver.memory”=“5g”时,在获取任务结果io.netty.handler.codec.DecoderException:java.lang.outofmemory错误:直接缓冲区内存orry,我错过了在驱动程序内存中加入另一个conf:
spark.driver.maxResultSize
您应该将它设置为要收集多少大对象。我建议您将其设置为
0
(无限制),这意味着您可以使用驱动程序提供的尽可能多的内存来收集结果。请告诉我这是否有效,在这种情况下,我将更新答案。谢谢!将尝试使用maxResultSize。在执行collect()之前是否需要缓存()我的javaRdd?如果是,我需要将什么StorageLevel设置为persist()函数?缓存/持久不会影响此OOM错误,因为这是由于驱动程序内存造成的。但如果执行器上有足够的可用内存,缓存肯定会提高性能。
18/03/15 16:35:48 WARN scheduler.TaskSetManager: Lost task 1.0 in stage 2.0 (TID 5, ip-1443-405-18-1544.us-west-2.compute.internal): java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1877)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1786)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1189)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:44)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:80)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)    18/03/15 16:35:49 ERROR cluster.YarnScheduler: Lost executor 1 on ip-43ew55-154.us-west-2.compute.internal: remote Akka client disassociated