我在我的程序中使用maven依赖hivehcatalog核心
这个jar存在于项目maven依赖项中,带有接口(如上图所示)。
接口icacheablemetastoreclient虽然存在该类,但无法从import org.apache.hive.hcatalog.common解析(图片-底部)
因此,在执行spark提交时,我遇到了一个例外:
com.google.common.util.concurrent.uncheckedexecutionexception:java.lang.illegalargumentexception:interface org.apache.hive.hcatalog.common.hiveclientcache$icacheablemetastoreclient在类加载器中不可见
我需要做些什么才能从程序类路径看到它。
1条答案
按热度按时间7d7tgy0s1#
让我们看看代码:
这个
HiveClientCache
只有包级别的可见性,并且它与ICacheableMetaStoreClientwont
将不可用于在该包之外导入(这包括在您的代码中)。现在让我们看看
ICacheableMetaStoreClient
:接口是公共的,但是它上面有注解,使得hive/hadoop需要额外的预处理来检查对象类型并抛出illegalargumentexception。
这是javadoc
InterfaceAudience
:通知用户包、类或方法的预期读者的注解。当前受众可以是interfaceaudience.public、interfaceaudience.limitedprivate或interfaceaudience.private。所有公共类都必须具有interfaceaudience注解。
默认情况下,未标记此注解的公共类必须视为interfaceaudience.private。
外部应用程序只能使用标记为interfaceaudience.public的类。避免使用非公共类,因为这些类可能以不兼容的方式被删除或更改。
hadoop项目只能使用标记为interfaceaudience.limitedprivate或interfaceaudience.public的类
方法可能有不同的注解,与类的受众分类相比,它更具限制性。示例:类可以是interfaceaudience.public,但方法可以是interfaceaudience.limitedprivate