【问题标题】:Memory issues in Hive with Parquet files带有 Parquet 文件的 Hive 中的内存问题
【发布时间】:2015-07-30 02:06:03
【问题描述】:

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

select * from myParquetTable where id < 0;

但我不断收到来自“ParquetFileReader”的 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 文件是否存在高内存消耗问题,并且需要大量内存用于简单/完整扫描,或者这里缺少其他东西。 (我对 parquet 文件还很陌生,我之前在 ORC 格式和相同硬件上更大数据量的经验是成功的)。

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

【问题讨论】:

    标签: java hadoop hive heap-memory parquet


    【解决方案1】:

    您需要记住两点: 1. Parquet 是基于柱状的存储。 2. Parquet 文件被压缩。

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

    因为它会给您带来堆空间内存不足的错误 - 您可能想要增加节点管理器的 Java 堆大小。 此外,您可能需要检查为每个容器配置了多少内存以及所有容器的总内存。

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

    【讨论】:

    • 增加节点管理器的堆大小并没有真正帮助我。这个问题在更小的镶木地板上不断发生。切换到 ORC 简单地解决了这些问题。我不确定,但我的经验是,与 Parquet 相比,Hive 与 ORC 一起工作更稳定(可能是因为它是由 Hive 贡献者 s.a Hortonworks 自然开发的)。
    • 我认为,我们缺少其他一些信息。您可以在开始工作和看到错误时取出日志吗?您可以使用 pastebin。
    • 您可以尝试不同的设置。有时,以下内容对我有用。 SET mapred.child.java.opts=-Xmx900m; SET mapreduce.reduce.memory.mb=1024; SET mapreduce.reduce.java.opts='-Xmx1024M'; SET mapreduce.map.memory.mb=1024;设置 mapreduce.map.java.opts='-Xmx1024M';设置 mapreduce.child.map.java.opts='-Xmx1024M';
    猜你喜欢
    • 2019-02-18
    • 2020-03-01
    • 1970-01-01
    • 2016-07-08
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多