内容纲要
概要描述
本文介绍一种 inceptor metastore 使用 JDO 缓存协议级别问题导致的 metastore 某些功能不可用,主要是需要操作元数据的某些功能不可用。
JDO 是 Java开发人员存取数据库的几种方法之一,JDO 支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性。JDO 也不规定任何特定的后端数据库。
详细说明
主要包括以下几种场景或者报错:
- 某些 DML 不可用
- 某些 DDL 不可用
报错信息包含如下类似内容时:
Error: EXECUTION FAILED: Task DDL error HiveException: [Error 40000] javax.jdo.JDOUserException: One or more instances could not be made persistent (state=08S01,code=40000)
JDO Cache
JDO 的数据管理提供了两个级别的缓存级别,缓存允许在不需要额外调用数据存储的情况下快速地保存和提取对象。
- 一级缓存:由JDO规范规定,表示 PersistenceManager 中实例的缓存
- 二级缓存:表示 PersistenceManagerFactory 内实例的缓存(跨多个 PersistenceManager 的)
您可以将缓存看作一个映射,其中的 value 由 keys 引用。对于JDO,keys 是对象标识(标识在JDO中是唯一的)。
默认情况下,二级缓存是启用的。改功能可以通过参数datanucleus.cache.level2.type
来控制。将其设置为所需缓存的 type 。
对于二级缓存,提供以下选项:
- none:关闭二级缓存。
- weak:使用内部的(基于弱引用的) L2 缓存。提供对 JDO 2接口的支持,该接口能够将对象固定到缓存中,并在需要时取消固定。此选项不支持分布式缓存,仅在客户机应用程序的 JVM 中运行。弱引用保存在非固定对象上。
- soft:使用内部的(基于软引用的)L2缓存。提供对JDO 2接口的支持,该接口能够将对象固定到缓存中,并在需要时取消固定。此选项不支持分布式缓存,仅在客户机应用程序的 JVM 中运行。软引用保存到非固定对象。
解决方案
可以在 Manager 页面的 Inceptor 组件添加参数:
参数 | 内容 |
---|---|
属性 | datanucleus.cache.level2.type |
值 | none |
配置文件 | hive-site.xml |
描述 |