【问题标题】:Hive index mapreduce memory errorsHive 索引映射减少内存错误
【发布时间】:2015-06-09 05:07:05
【问题描述】:

我是 hive 和 hadoop 的新手,刚刚在 Hive 上创建了一个表(orc 文件格式)。我现在正在尝试在我的配置单元表(位图索引)上创建索引。每次我运行索引构建查询时,hive 都会启动一个 map reduce 作业来索引。在某些时候,我的 map reduce 作业只是挂起,并且我的一个节点(在多次重试中随机不同,因此它可能不是节点)失败。我尝试将我的mapreduce.child.java.opts 增加到 2048mb,但这给了我错误,因为我使用了比可用内存更多的内存,所以我将mapreduce.map.memory.mbmapreduce.reduce.memory.mb 增加到 8GB。所有其他配置都保留为默认值。

如果我错过了哪些配置,我们将不胜感激。

仅出于上下文考虑,我正在尝试为具有 24 亿行的表建立索引,该表大小为 450GB,具有 3 个分区。

【问题讨论】:

    标签: hadoop hive hadoop-yarn


    【解决方案1】:

    首先,请确认索引是否适用于小规模数据。假设它已经完成,Hive 运行 map reduce 作业的方式取决于许多问题。 1. 查询类型(使用 count(*) 或仅 Select *)。 2. 此外,reducer 在执行阶段分配的内存量。(这由 hive.exec.reducers.bytes.per.reducer 属性控制)。

    在您的照顾下,它可以是第二点。 给出您运行程序的规模,请相应地计算内存需求。这个post 有更多信息。快乐的学习和编码

    【讨论】:

    • 看起来因为我根本没有改变那个值,所以当前的hive.exec.reducers.bytes.per.reducer 应该设置为 1GB。鉴于我的 yarn mapreduce 配置完全可以管理 1GB,这难道不应该给我带来错误吗?它应该只是产生更多的减速器。您是否建议减少分配给每个 reducer 的字节数?很抱歉,但我真的不明白如何从您提供链接的帖子中计算内存需求。
    • 当您说 map reduce 作业挂起时,可能还有其他原因。如果该问题仍然存在,请使用调试语句(可能使用 log4j 或其他并添加调试 stmts)来确定哪一行代码有问题。关于内存方面的考虑,我指的是您的 24 亿行执行。一旦程序以小规模运行,考虑到内存,规模就会变得更大。我知道它之前很难分析,请一步步向前。
    猜你喜欢
    • 2016-01-22
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2018-08-14
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多