diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/persistence/HybridHashTableContainer.java ql/src/java/org/apache/hadoop/hive/ql/exec/persistence/HybridHashTableContainer.java index 0a6461f..f0a3bf5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/persistence/HybridHashTableContainer.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/persistence/HybridHashTableContainer.java @@ -288,6 +288,10 @@ private HybridHashTableContainer(float keyCountAdj, int threshold, float loadFac } } + // Round to the previous power of 2 here, to avoid surprise expansion later in WriteBuffers cstr + writeBufferSize = Integer.bitCount(writeBufferSize) == 1 ? + writeBufferSize : Integer.highestOneBit(writeBufferSize); + // Cap WriteBufferSize to avoid large preallocations writeBufferSize = writeBufferSize < minWbSize ? minWbSize : Math.min(maxWbSize, writeBufferSize); LOG.info("Write buffer size: " + writeBufferSize);