2016-04-14 34 views
1

Bir Hive Veritabanından MongoDB'deki bir koleksiyona wiki sitesinde sağlanan bir sürücü (kavanoz) kullanarak bağlanmaya çalışıyorum. İşte benim yaptığım adımlar şunlardır: -: Ben Hadoop MongoDB aracılığıyla Hive bağlanmak istedimMongoDB Hadoop Sürücüsü Kullanarak Kovan Tablosu Oluşturma

Ben MongoDB bir koleksiyon "Moe" adlı bir veritabanı altında "Diamond" denir ve 20 belgeleri var yarattı Sürücü ve bu belgeleri Hive ile görüntüleyin.

Aynı sunucuda hem MongoDB hem de Hive yüklü ve yapılandırılmış. Ancak HIVE_CLASPATH adlı bir değişken görmüyorum, nerede olduğunu merak ediyorum.

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; 

Şimdi, Hive bağlanın ve aşağıdaki komutları tarafından benim sınıf için bu 2 kavanoz en ekleyin: -

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; 

Şimdi kovanında bir tablo oluşturmak (başarıyla eklense): -

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 

denedim aşağıdadır: - - kaçırdığım olması gerekiyordu sınıfın - hayır etkisi ile mümkün olan her dizinde küplerinin g, jar dosyasında hemen hemen mevcut. - oh evet ve MongoStorageHandler sınıfı kavanozda çok fazla.

Kafamı bununla kırmayı bitirdim! Kaygılarımı hafifletmek için neler yapabileceğime kimbilirse, bu harika olur.

Tekrar teşekkürler. Sorunun ne olduğunu belirledim Mario

cevap

0

. org.apache.hadoop.hive.ql.hooks.PreExecutePrinter

: MongoDB için kovandan bağlanmak için, mongodb Sürücü kullanan bir kovan kavanoz kütüphanesine **

Java.Lang.ClassNotFoundException bir java sınıfını istemektedir kovan-exec-0.11.0.1.3.2.0-111.jar -

** Şimdi bu sınıf kavanoz dosyasında bulunabilir gerekiyordu. Bununla birlikte, yalnızca daha yeni olan HIVE sürümlerinde ve daha eski olmayanlarda kullanılabilir.

Bu, 0.11.0.1.3.2.0-111 sürümünde mevcut değildir, ancak 0.13.0.2.1.7.0-784'te görünür şekilde algılanabilir. Buradaki çözüm, sürücü tarafından desteklenen bir HIVE sürümüne bağlanmaktı. MongoDB, sürücüsünün Hadoop'un belirli bir sürümünü desteklediğini, ancak bireysel Uygulama (HIVE/SQOOP) için detaya inmediğini belirtiyor.

İlgili konular