我第一次尝试使用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
由于
答案 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;
然后执行您的查询。