带有Parquet文件的Hive中的内存问题

时间:2015-07-30 02:06:04

标签: java hadoop hive heap-memory parquet

我正在Hadoop 2.6上运行Hive 1.2,我已经在3个节点上加载了一张21GB大小的镶木桌子,存放在复制因子为1的HDFS中。 我正在运行一个简单的选择查询,它不返回任何行(主要是为了测量全表扫描的性能):

select * from myParquetTable where id < 0;

但我不断从#34; ParquetFileReader&#34;中获得Java堆空间内存问题。 (接近仅限地图的工作结束):

  

java.lang.OutOfMemoryError:Java堆空间   在parquet.hadoop.ParquetFileReader $ ConsecutiveChunkList.readAll(ParquetFileReader.java:755)   在parquet.hadoop.ParquetFileReader.readNextRowGroup(ParquetFileReader.java:494)   在parquet.hadoop.InternalParquetRecordReader.checkRead(InternalParquetRecordReader.java:127)

虽然数据的总大小为21GB,但我在所有3个节点上总共有31.5GB可用内存。我只是想知道Parquet文件是否存在高内存消耗问题,并且需要大量内存可用于简单/完全扫描,或者此处缺少其他文件。 (我对镶木地板文件很新,而且我以前在同一个硬件上使用ORC格式甚至更大数据的经验也很成功。)

任何建议/提示都将不胜感激。

1 个答案:

答案 0 :(得分:1)

你需要牢记两件事: 1.实木复合地板是基于柱状的存储。 2.压缩木地板文件。

嗯,考虑到这些点,文件将比原来放气时占用更多的空间。 但是,您拥有的内存足以处理该文件(在这种情况下是完整文件)。

因为它会为堆空间提供内存不足错误 - 您可能希望增加节点管理器的Java堆大小。 此外,您可能需要检查为每个容器配置的内存量以及所有容器的总内存。

您可能想要查看的另一个属性是Hive客户端的Java堆大小。