使用 CqlStorageHandler 集成 Hive 和 Cassandra

Posted

技术标签:

【中文标题】使用 CqlStorageHandler 集成 Hive 和 Cassandra【英文标题】:Hive and Cassandra integration using CqlStorageHandler 【发布时间】:2013-12-18 03:01:43 【问题描述】:

我提到了这个 git 项目,用于使用 hive 表集成 cassandra 数据。我将适当的 cassandra jar 复制到 hive lib 文件夹中。但是在对 cassandra 运行查询时,我收到以下错误。请帮我解决它。

https://github.com/milliondreams/hive/tree/cas-support-cql/cassandra-handler

hive> CREATE EXTERNAL TABLE 消息(row_key 字符串,col1 字符串,col2 字符串)

STORED BY 'org.apache.hadoop.hive.cassandra.cql.CqlStorageHandler' WITH SERDEPROPERTIES("cql.primarykey" = "row_key")
TBLPROPERTIES ("cassandra.ks.name" = "mycqlks", "cassandra.ks.stratOptions"="'DC':1, 'DC2':1",
"cassandra.ks.strategy"="NetworkTopologyStrategy");

java.lang.NoSuchMethodError: org.apache.hadoop.hive.metastore.MetaStoreUtils.getSchema(Lorg/apache/hadoop/hive/metastore/api/Table;)Ljava/util/Properties; 在 org.apache.hadoop.hive.cassandra.cql.CqlManager.createColumnFamily(CqlManager.java:238) 在 org.apache.hadoop.hive.cassandra.cql.CqlManager.createCFIfNotFound(CqlManager.java:189) 在 org.apache.hadoop.hive.cassandra.cql.CqlStorageHandler.preCreateTable(CqlStorageHandler.java:247) 在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:462) 在 org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:455) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:74) 在 com.sun.proxy.$Proxy11.createTable(未知来源) 在 org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:596) 在 org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:3776) 在 org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:256) 在 org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:144) 在 org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57) 在 org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1355) 在 org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1139) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:945) 在 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216) 在 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:756) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:160) FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 -101

【问题讨论】:

【参考方案1】:

您使用的是哪个版本的 hive?

根据https://github.com/milliondreams/hive/tree/cas-support-cql/cassandra-handler,它必须是 hive 0.9

我认为您使用的版本 >= 0.11.0

0.9.0 版:http://svn.apache.org/repos/asf/hive/tags/release-0.9.0/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java

0.10.0 版:http://svn.apache.org/repos/asf/hive/tags/release-0.10.0/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java

0.11.0 版:http://svn.apache.org/repos/asf/hive/tags/release-0.11.0/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java

单参数方法 - 0.11.0 中缺少 org.apache.hadoop.hive.metastore.MetaStoreUtils.getSchema

【讨论】:

嗨,我必须在哪里放置这个源文件,指定确切的位置。复制源文件后,需要使用 mvn package 重建包。

以上是关于使用 CqlStorageHandler 集成 Hive 和 Cassandra的主要内容,如果未能解决你的问题,请参考以下文章

集成 IQKeyboardManager 时找不到 .h 文件

H.265视频流媒体播放器EasyPlayer.js集成时出现“SourceBuffer ”报错,该如何解决?

XGPush集成(信鸽集成)

原生 iOS Unity 集成 - AppStore 配置文件导致找不到“UnityFramework/UnityFramework.h”文件

需要将 jQuery 验证插件与 jsf 集成

找不到“React / RCTDefines.h”文件。在反应原生推送通知集成中