我在程序中使用maven依赖 hive-hcatalog-core
并且这个jar存在于项目maven依赖项中,带有接口(如图像顶部)。
因此,在做一个spark-submit时,我得到了例外:
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException:interface org.apache.hive.hcatalog.common.HiveClientCache $ ICacheableMetaStoreClient 从类加载器
中看不到
我需要做些什么才能从程序类路径中看到它。
答案 0 :(得分:1)
让我们看一下代码:
huge_t
class HiveClientCache {..}
仅具有包级别可见性,并且它与HiveClientCache
一起无法在该包之外导入(这包括在您的代码中)。
现在让我们看一下ICacheableMetaStoreClientwont
:
ICacheableMetaStoreClient
接口是公共的,但在其上有注释,使得Hive / Hadoop进行额外的预处理以检查对象类型并抛出IllegalArgumentException。
以下是@InterfaceAudience.Private
public interface ICacheableMetaStoreClient extends IMetaStoreClient {....}
的JavaDoc:
注释,以告知用户包,类或方法的用途 听众。目前观众可以是InterfaceAudience.Public, InterfaceAudience.LimitedPrivate或InterfaceAudience.Private。所有 公共类必须具有InterfaceAudience注释。
- 默认情况下,未标记此注释的公共类必须视为InterfaceAudience.Private。
- 外部应用程序只能使用标记为InterfaceAudience.Public的类。避免使用非公共类 可以删除或以不兼容的方式更改类。
- Hadoop项目必须只使用标记为InterfaceAudience.LimitedPrivate或InterfaceAudience.Public的类
- 方法可能有不同的注释,与类的受众分类相比,它更具限制性。示例:一个类 可能是InterfaceAudience.Public,但方法可能是 InterfaceAudience.LimitedPrivate