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

时间:2017-08-08 11:13:06

标签: java mongodb hadoop hive

我第一次尝试使用mongo-hadoop-core 2.0.2安装和配置配置单元。我已经安装了 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 table query

时遇到错误

我的查询

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中的类。 我正在使用的罐子的版本

mongo-hadoop-core 2.0.2,

mongo-hadoop-hive 2.0.2,

mongo-java-driver 3.0.2

由于

1 个答案:

答案 0 :(得分:0)

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

如果您从Hive shell运行,请像这样使用。

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

然后执行您的查询。