[HADOOP] java.lang.OutOfMemoryError : 100 바이트의 메모리를 확보 할 수 없습니다. 0을가집니다.
HADOOPjava.lang.OutOfMemoryError : 100 바이트의 메모리를 확보 할 수 없습니다. 0을가집니다.
나는 다음 명령으로 Spark 2.0을 로컬 모드로 Pyspark를 호출한다.
pyspark --executor-memory 4g --driver-memory 4g
입력 데이터 프레임은 tsv 파일에서 읽히고 580 K x 28 컬럼을가집니다. 내가 데이터 프레임에 몇 가지 작업을하고 있어요 그리고 난 tsv 파일에 내보낼려고 그리고 난이 오류가 발생합니다.
df.coalesce(1).write.save("sample.tsv",format = "csv",header = 'true', delimiter = '\t')
어떤 포인터 가이 오류를 제거하는 방법. df를 쉽게 표시하거나 행 수를 계산할 수 있습니다.
출력 데이터 프레임은 3100 행, 23 열
오류:
Job aborted due to stage failure: Task 0 in stage 70.0 failed 1 times, most recent failure: Lost task 0.0 in stage 70.0 (TID 1073, localhost): org.apache.spark.SparkException: Task failed while writing rows
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:261)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:85)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
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)
Caused by: java.lang.OutOfMemoryError: Unable to acquire 100 bytes of memory, got 0
at org.apache.spark.memory.MemoryConsumer.allocatePage(MemoryConsumer.java:129)
at org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.acquireNewPageIfNecessary(UnsafeExternalSorter.java:374)
at org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter.insertRecord(UnsafeExternalSorter.java:396)
at org.apache.spark.sql.execution.UnsafeExternalRowSorter.insertRow(UnsafeExternalRowSorter.java:94)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.sort_addToSorter$(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)
at org.apache.spark.sql.execution.WindowExec$$anonfun$15$$anon$1.fetchNextRow(WindowExec.scala:300)
at org.apache.spark.sql.execution.WindowExec$$anonfun$15$$anon$1.<init>(WindowExec.scala:309)
at org.apache.spark.sql.execution.WindowExec$$anonfun$15.apply(WindowExec.scala:289)
at org.apache.spark.sql.execution.WindowExec$$anonfun$15.apply(WindowExec.scala:288)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(RDD.scala:766)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$23.apply(RDD.scala:766)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.rdd.ZippedPartitionsRDD2.compute(ZippedPartitionsRDD.scala:89)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:96)
at org.apache.spark.rdd.CoalescedRDD$$anonfun$compute$1.apply(CoalescedRDD.scala:95)
at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply$mcV$sp(WriterContainer.scala:253)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply(WriterContainer.scala:252)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply(WriterContainer.scala:252)
at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1325)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:258)
... 8 more
Driver stacktrace:
해결법
-
==============================
1.나를위한 문제는 정말로 합쳐졌다. 내가 한 일은 coalesce ()를 사용하지 않고 df.write.parquet ( "testP") 대신에 쪽매를 사용하여 파일을 내보내는 것입니다. 그런 다음 파일을 다시 읽고 coalesce (1)로 해당 파일을 내 보냅니다.
나를위한 문제는 정말로 합쳐졌다. 내가 한 일은 coalesce ()를 사용하지 않고 df.write.parquet ( "testP") 대신에 쪽매를 사용하여 파일을 내보내는 것입니다. 그런 다음 파일을 다시 읽고 coalesce (1)로 해당 파일을 내 보냅니다.
잘하면 그것은 당신을 위해 잘 작동합니다.
-
==============================
2.나는이 문제의 원인이 coalesce ()라고 생각하는데, 파티션 분할과 같은 전체 셔플을 피하더라도 요청 된 파티션 수의 데이터를 줄여야한다.
나는이 문제의 원인이 coalesce ()라고 생각하는데, 파티션 분할과 같은 전체 셔플을 피하더라도 요청 된 파티션 수의 데이터를 줄여야한다.
여기서 모든 데이터를 하나의 파티션에 넣으 려하므로 모든 데이터에 대해 하나의 작업 (그리고 단 하나의 작업)만으로 작업해야하므로 컨테이너에 메모리 제한이 발생할 수 있습니다.
따라서 1보다 많은 파티션을 요청하거나이 경우 coalesce ()를 피하십시오.
그렇지 않은 경우 메모리 구성을 늘리려면 아래 링크에서 제공하는 솔루션을 사용해보십시오.
-
==============================
3.내 경우에는 병합 (1)을 다시 파티션 (1)으로 대체했습니다.
내 경우에는 병합 (1)을 다시 파티션 (1)으로 대체했습니다.
-
==============================
4.다른 답변에서 설명한 것처럼 coalesce (1) 대신 repartition (1)을 사용하십시오. 그 이유는 재분할 (1)은 상주 처리가 오직 하나의 집행자가 아닌 병렬 (다중 작업 / 파티션)에서 수행되도록 보장하기 때문입니다.
다른 답변에서 설명한 것처럼 coalesce (1) 대신 repartition (1)을 사용하십시오. 그 이유는 재분할 (1)은 상주 처리가 오직 하나의 집행자가 아닌 병렬 (다중 작업 / 파티션)에서 수행되도록 보장하기 때문입니다.
Dataset.coalesce () Spark 문서를 인용하려면 다음을 수행하십시오.
-
==============================
5.필자의 경우 운전자는 노동자보다 작았 다. 드라이버를 더 크게 만들어 문제를 해결했습니다.
필자의 경우 운전자는 노동자보다 작았 다. 드라이버를 더 크게 만들어 문제를 해결했습니다.
from https://stackoverflow.com/questions/38961251/java-lang-outofmemoryerror-unable-to-acquire-100-bytes-of-memory-got-0 by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop에서 pdf 파일의 데이터에 액세스하고 조작하는 방법은 무엇입니까? (0) | 2019.06.22 |
---|---|
[HADOOP] 하이브의 시퀀스 파일 형식 및 마루판 파일 형식은 무엇입니까? (0) | 2019.06.22 |
[HADOOP] hadoop 2.4.1에서 namenode를 시작하는 중 오류가 발생했습니다. (0) | 2019.06.22 |
[HADOOP] 작업 폴더로 Oozie s3 (0) | 2019.06.22 |
[HADOOP] Hadoop 작업 : "execvp : permission denied" (0) | 2019.06.22 |