gpt4 book ai didi

mongodb - 使用 MongoDB Hadoop 驱动程序创建 Hive 表

转载 作者:可可西里 更新时间:2023-11-01 16:21:49 26 4
gpt4 key购买 nike

我正在尝试使用 wiki 站点上提供的驱动程序 (jars) 从 Hive 数据库连接到 MongoDB 中的集合。以下是我执行的步骤:-

我在名为“Moe”的数据库下在 MongoDB 中创建了一个名为“Diamond”的集合,它有 20 个文档:

我想通过 Hadoop MongoDB 驱动程序从 Hive 连接并通过 Hive 查看这些文档。

我在同一台服务器上安装并配置了 MongoDB 和 Hive。但是我没有看到任何名为 HIVE_CLASPATH 的变量,我想知道它在哪里。

So I installed 3 divers on the server: -
mongo-hadoop-core-1.5.2.jar;
mongo-hadoop-hive-1.5.2.jar;
mongo-java-driver-3.0.0.jar;

现在,我连接到 Hive,然后通过以下命令将这 2 个 jar 添加到我的类路径中:-(它们已成功添加)

add jar /hadoopgdc/hadoop-2.6.0/share/hadoop/common/lib/mongo-hadoop-hive-1.5.2.jar;
add jar /hadoopgdc/hadoop-2.6.0/share/hadoop/common/lib/mongo-hadoop-core-1.5.2.jar;
add jar /hadoopgdc/hadoop-2.6.0/share/hadoop/common/lib/mongo-java-driver-3.0.0.jar;

现在我在 HIVE 中创建一个表:-

CREATE TABLE Diamond
(
carat DOUBLE,
cut STRING,
color STRING,
clarity STRING,
depth DOUBLE,
table DOUBLE,
price DOUBLE,
xcord DOUBLE,
ycord DOUBLE,
zcord DOUBLE
)
STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"carat":"carat","cut":"cut",
"color":"color", "clarity":"clarity", "depth":"depth", "table":"table",
"price":"price", "xcord":"x", "ycord":"y", "zcord":"z"}')
TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/Moe.Diamond');


However when I execute the above command in Hive I get the error below: -

java.lang.NoClassDefFoundError: com/mongodb/util/JSON
at com.mongodb.hadoop.hive.BSONSerDe.initialize(BSONSerDe.java:110)
at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:210)
at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:268)
at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:261)
at org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:587)
at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:573)
at org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:3784)
at org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:256)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:155)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1355)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1139)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:945)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:756)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:614)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.lang.ClassNotFoundException: com.mongodb.util.JSON
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 23 more
FAILED: Execution Error, return code -101 from
org.apache.hadoop.hive.ql.exec.DDLTask

我试过以下方法:-- 将 jar 放在每个可能的目录中,但没有任何效果- 应该丢失的类几乎存在于 jar 文件中。- 哦,是的,MongoStorageHandler 类在 jar 中非常重要。

我受够了!如果有人能阐明我可以做些什么来减轻我的焦虑,那就太好了。

再次感谢。马里奥

最佳答案

我确定了问题所在。为了从 HIVE 连接到 MongoDB,MongoDb 驱动程序使用调用 hive jar 库中的 java 类**

java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.hooks.PreExecutePrinter

**现在应该可以在 jar 文件 - hive-exec-0.11.0.1.3.2.0-111.jar 中找到此类。但是,它仅在较新版本的 HIVE 中可用,在旧版本中不可用。

它在 0.11.0.1.3.2.0-111 中不可用,但在 0.13.0.2.1.7.0-784 中可以明显检测到。

此处的解决方案是连接到驱动程序支持的 HIVE 版本。 MongoDB 确实声明其驱动程序支持特定版本的 Hadoop,但没有深入到单个应用程序 (HIVE/SQOOP)。

关于mongodb - 使用 MongoDB Hadoop 驱动程序创建 Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com