如何解决使用 Phoenix 处理程序创建 Hive 表抛出 NoClassDefFoundError: org.apache.hadoop.hbase.security.SecurityInfo
我想在 emr 的 phoenix 表上创建 hive 表。
我正面临一个NoClassDefFoundError: org.apache.hadoop.hbase.security.SecurityInfo
到目前为止我做了什么:
-
我按照 https://phoenix.apache.org/hive_storage_handler.html 中的说明进行操作,并将
phoenix-hive-5.0.0-HBase-2.0.jar
添加到hive-env.sh
以及hive-site.xml
中。 -
重新启动 hive 服务
systemctl restart hive-server2.service
-
重新启动 Metastore
systemctl restart hive-hcatalog-server.service
-
从hue执行创建表命令:
create external table ext_table (
i1 int,s1 string,f1 float,d1 decimal
)
STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler'
TBLPROPERTIES (
"phoenix.table.name" = "ext_table","phoenix.zookeeper.quorum" = "localhost","phoenix.zookeeper.znode.parent" = "/hbase","phoenix.zookeeper.client.port" = "2181","phoenix.rowkeys" = "i1","phoenix.column.mapping" = "i1:i1,s1:s1,f1:f1,d1:d1"
);
出现异常:Error while processing statement: FAILED: Execution Error,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.security.SecurityInfo)
我使用的是 emr-6.1.0
HBase 2.2.5
凤凰 5.0.0
蜂巢 3.1.2
有人知道是什么问题吗?
更新
我遵循了@leftjoin 的建议,并使用了 Hue 中的 ADD JAR
将 phoenix-hive jar 添加到类路径。然后我遇到了由我使用的 phoenix hive 连接器引起的 jar 兼容性问题:
phoenix-hive-5.0.0-HBase-2.0.jar
。
较新版本的 phoenix 连接器未归档到可以从 phoenix website 下载的单个包中。反而 连接器现在位于 github repo。
我构建了新的 phoenix-hive 连接器(版本:Phoenix->5.1.0、Hive->3.1.2、Hbase->2.2)并用它来创建 Hive 表。
结果我遇到了另一个异常,我无法修复:
FAILED: Execution Error,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org/apache/phoenix/compat/hbase/CompatSteppingSplitPolicy
我认为它仍然与依赖问题有某种联系。但不知道究竟是什么。
解决方法
作为一种解决方法,将 jar 放入 hdfs 并在创建表和查询之前执行 ADD JAR
命令:
ADD JAR hdfs://path/to/your/jar/phoenix-hive-5.0.0-HBase-2.0.jar;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。