diff --git a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputFormat.java b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputFormat.java index 31cc96ba10..6accce17c5 100644 --- a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputFormat.java +++ b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetOutputFormat.java @@ -394,9 +394,12 @@ public RecordWriter getRecordWriter(Configuration conf, Path file, Comp MemoryManager.DEFAULT_MEMORY_POOL_RATIO); long minAllocation = conf.getLong(ParquetOutputFormat.MIN_MEMORY_ALLOCATION, MemoryManager.DEFAULT_MIN_MEMORY_ALLOCATION); - if (memoryManager == null) { - memoryManager = new MemoryManager(maxLoad, minAllocation); - } else if (memoryManager.getMemoryPoolRatio() != maxLoad) { + synchronized (ParquetOutputFormat.class) { + if (memoryManager == null) { + memoryManager = new MemoryManager(maxLoad, minAllocation); + } + } + if (memoryManager.getMemoryPoolRatio() != maxLoad) { LOG.warn("The configuration " + MEMORY_POOL_RATIO + " has been set. It should not " + "be reset by the new value: " + maxLoad); } @@ -441,13 +444,12 @@ public OutputCommitter getOutputCommitter(TaskAttemptContext context) return committer; } - /** * This memory manager is for all the real writers (InternalParquetRecordWriter) in one task. */ private static MemoryManager memoryManager; - public static MemoryManager getMemoryManager() { + public synchronized static MemoryManager getMemoryManager() { return memoryManager; } }