Java spark RDD内存和磁盘中的存储级别抛出异常
谁能解释一下rdd的存储级别是如何工作的。 当我对存储级别(StorageLevel.memory_和\u DISK_2())使用persist方法时,出现堆内存错误 然而,当我使用缓存方法时,我的代码运行良好 根据spark doc文档,缓存持久化RDD,并使用默认存储级别(Java spark RDD内存和磁盘中的存储级别抛出异常,java,apache-spark,Java,Apache Spark,谁能解释一下rdd的存储级别是如何工作的。 当我对存储级别(StorageLevel.memory_和\u DISK_2())使用persist方法时,出现堆内存错误 然而,当我使用缓存方法时,我的代码运行良好 根据spark doc文档,缓存持久化RDD,并使用默认存储级别(仅限内存) 我得到堆错误的代码 JavaRDD<String> rawData = sparkContext .textFile(inputFile.getAbsolut
仅限内存
)
我得到堆错误的代码
JavaRDD<String> rawData = sparkContext
.textFile(inputFile.getAbsolutePath())
.setName("Input File").persist(SparkToolConstant.rdd_stroage_level);
// cache()
String[] headers = new String[0];
String headerStr = null;
if (headerPresent) {
headerStr = rawData.first();
headers = headerStr.split(delim);
List<String> headersList = new ArrayList<String>();
headersList.add(headerStr);
JavaRDD<String> headerRDD = sparkContext
.parallelize(headersList);
JavaRDD<String> filteredRDD = rawData.subtract(headerRDD)
.setName("Raw data without header").persist(StorageLevel.MEMORY_AND_DISK_2());;
rawData = filteredRDD;
}
Spark版本:1.3.0看到这个问题这么长时间都没有得到回答,我发布这篇文章是为了获取一般信息,也为了像我这样的搜索结果在这里的人 如果没有关于应用程序的更多细节,这类问题很难回答。一般来说,序列化到磁盘时会出现内存错误,这看起来是颠倒的。我建议您尝试一下,如果您有很多额外的内存用于“磁盘序列化”,这将加快速度 有关Spark docs的更多信息,请访问: 当对象仍然太大而无法有效存储时 这种调优,一种更简单的减少内存使用的方法是存储 使用 ,例如仅限内存。那么火花就会 将每个RDD分区存储为一个大字节数组。唯一的缺点 以序列化形式存储数据会降低访问速度,因为 动态反序列化每个对象。我们强烈推荐使用Kryo 如果您想以序列化形式缓存数据,因为这会导致 比Java序列化更小(当然比原始Java更小) 对象)
你能告诉我你的群集详细信息吗?我在本地系统上运行,使用spark submit cmd.worker内存,具有本地模式、4核和2gb驱动程序内存?因为这个异常来自worker。如果我在本地模式(独立模式)下运行,我可以在这里设置worker内存。spark.executor.memory=2g
Job aborted due to stage failure: Task 0 in stage 3.0 failed 1 times, most recent failure: Lost task 0.0 in stage 3.0 (TID 10, localhost): java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1876)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1785)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1188)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:44)
at org.apache.spark.serializer.SerializationStream.writeAll(Serializer.scala:110)
at org.apache.spark.storage.BlockManager.dataSerializeStream(BlockManager.scala:1176)
at org.apache.spark.storage.BlockManager.dataSerialize(BlockManager.scala:1185)
at org.apache.spark.storage.BlockManager.doPut(BlockManager.scala:846)
at org.apache.spark.storage.BlockManager.putArray(BlockManager.scala:668)
at org.apache.spark.CacheManager.putInBlockManager(CacheManager.scala:176)
at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:79)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:242)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:68)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
at org.apache.spark.scheduler.Task.run(Task.scala:64)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Driver stacktrace: