在5.2.1版本上将 AWS EMR用作数据处理环境,当处理具有包含许多嵌套字段的复杂架构的巨大JSON文件时,Hive无法处理它,并且由于当前达到4000个字符的限制而出错列长。
查看文档,尽管尚未解决 [1和2],但已经存在许多与此问题或类似问题有关的问题。在这种情况下,建议将Metastore的几个字段更改为不同的值,以允许更长的结构定义长度。COLUMNS_V2.TYPE_NAME
TABLE_PARAMS.PARAM_VALUE
SERDE_PARAMS.PARAM_VALUE
SD_PARAMS.PARAM_VALUE
如第一期所述,建议的解决方案提到:
但是,在任何地方都没有指定必须在DB值旁边配置的内容。
因此,在将当前本地Metastore(在本例中为mysql)从string
更新为mediumtext
并重新启动Metastore进程后,由于尝试加载JSON继续失败并出现相同错误,因此仍然无法获得任何进展。
我是否缺少某些东西,或者有人找到替代解决方法来解决此问题?
最佳答案
查看与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中提到的值是不够的,因为代码约束将引发异常。