【问题标题】:Hive Metastore column width limitHive Metastore 列宽限制
【发布时间】:2017-02-01 17:42:48
【问题描述】:

使用AWS EMR on 5.2.1版本作为数据处理环境,当处理一个庞大的JSON文件时,该文件具有复杂的架构和许多嵌套字段,Hive无法处理它并且错误为它达到了 4000 个字符列长度的当前限制。

处理语句时出错:FAILED:执行错误,返回码 1 来自 org.apache.hadoop.hive.ql.exec.DDLTask。 InvalidObjectException(message:Invalid column type name is too long: [...]

查看文档,已经有很多关于这个问题或类似问题的问题,尽管都未解决 [1,2]。在此建议将 Metastore 的几个字段更改为不同的值,以便为结构定义提供更大的长度。

  • COLUMNS_V2.TYPE_NAME
  • TABLE_PARAMS.PARAM_VALUE
  • SERDE_PARAMS.PARAM_VALUE
  • SD_PARAMS.PARAM_VALUE

如第一期所述,建议的解决方案提到:

[...] 设置值后,Metastore 还必须配置并重新启动。"

然而,除了 DB 值之外,还没有指定必须还配置什么。

因此,在将当前本地 Metastore(本例中为 mysql)的字段从 string 更新为 mediumtext 并重新启动 Metastore 进程后,仍然无法获得任何进展,因为尝试加载 JSON 继续失败,同样错误。

我是否遗漏了什么或有人找到了解决此问题的替代解决方法?

【问题讨论】:

  • 你找到解决办法了吗?有完全相同的问题
  • @GauravShah,仍然没有运气,已经在本地使用 Hadoop 和 Hive(本地 mysql Metastore)进行了尝试。我将尝试使用 embedded Derby 数据库。
  • 你看问题了吗,好像很相关
  • 您可以返回到 hive 1.x,并更新列类型。为我工作

标签: json hadoop hive emr metastore


【解决方案1】:

查看与 Hive issue HIVE-15249 相关的 MetaStore 源代码,除了 MetaStore 表中设置的参数约束之外,还有一项附加检查。

特别是在HiveMetaStoreUtils.java 文件中,以下声明似乎是导致执行错误的原因:

public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, for an unlikely unicode case

因此,更改 MetaStore 中提到的值是不够的,因为代码约束会引发异常。

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2017-04-29
    相关资源
    最近更新 更多