无法使用mongo-hadoop连接器将Hive与MongoDB连接



我第一次尝试用mongo-hadoop-core 2.0.2安装和配置hive。我已经安装了hadoop 2.8.0,Hive 2.1.1和MongoDB 3.4.6。 单独运行时一切正常。

我的问题是,我无法将MongoDB与Hive连接起来。我正在使用mongo-Hadoop连接器,如此处所述 https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage所需的jar被添加到Hadoop和Hive lib中。甚至我将它们添加到 Hive 控制台的 hive.sh 或运行时中。我在执行创建表查询时出错

我的查询是

CREATE EXTERNAL TABLE testHive
(
id STRING,
name STRING
)
STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id","name":"name"}')
TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/hiveDb.testHive');

我收到以下错误

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. com/mongodb/hadoop/io/BSONWritable
hive> ERROR hive.ql.exec.DDLTask - java.lang.NoClassDefFoundError: com/mongodb/hadoop/io/BSONWritable
at com.mongodb.hadoop.hive.BSONSerDe.initialize(BSONSerDe.java:132)
at org.apache.hadoop.hive.serde2.SerDeUtils.initializeSerDe(SerDeUtils.java:537)
at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:424)
at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:411)
at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:279)
at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:261)

它表明com/mongodb/hadoop/io/BSONWritable类不在类路径中,但我添加了必需的(mongo-hadoop-core.jar(jar和类存在于jar中。 我正在使用的罐子版本

蒙戈-哈杜普-核心 2.0.2,

蒙戈-哈杜普-蜂巢 2.0.2,

mongo-java-driver 3.0.2

谢谢

您需要显式注册 jar。在 Hive 脚本中,使用ADD JAR命令包含这些 JAR(核心、Hive 和 Java 驱动程序(,例如ADD JAR /path-to/mongo-hadoop-hive-<version>.jar;

如果从 Hive shell 运行,请按如下所示使用。

hive> ADD JAR /path-to/mongo-hadoop-hive-<version>.jar;

然后执行查询。

最新更新