2017-08-08 103 views
0

我試圖首次安裝和配置配置單元與mongo-hadoop-core 2.0.2。我已經安裝了hadoop 2.8.0,Hive 2.1.1和MongoDB 3.4.6。並且單獨運行時一切正常。無法使用mongo-hadoop連接器將Hive與MongoDB連接

我的問題是,我無法將MongoDB與Hive連接。如上所述,我正在使用mongo-Hadoop連接器https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage 將必需的jar添加到Hadoop和Hive庫中。即使我將它們從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 class不在類路徑中,但我添加了所需的(mongo-hadoop-core.jar)jar和class。 罐子的版本我使用

蒙戈 - Hadoop的核心2.0.2,

蒙戈 - Hadoop的蜂巢2.0.2,

蒙戈的Java驅動程序3.0.2

謝謝

回答

0

您需要明確註冊瓶子。在您的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;

然後執行查詢。

+0

嘗試使用這兩種方法,仍然沒有工作。 然而,在降級到mongo-hadoop的v1.5.1之後 - *。jar它起作用了。看起來像以前的版本,即2.0.2與hadoop和配置單元不兼容。 –

+0

是的..版本兼容性可以是根本的情況! –