2016-04-14 11 views
1

wikiサイトで提供されているドライバ(jars)を使用して、ハイブデータベースからMongoDBのコレクションに接続しようとしています。ここで私がやった手順は以下のとおりです。 - :私はHadoopのMongoDBの経由ハイブから接続したいMongoDB Hadoopドライバを使用したハイブテーブルの作成

私はMongoDBの中のコレクションは、「萌え」と呼ばれるデータベースの下に「ダイヤモンド」と呼ばれると、それは20件の文書を持って作成されましたドライバーとハイブを介してこれらのドキュメントを表示します。

MongoDBとHiveの両方を同じサーバーにインストールして構成しました。しかし、私はHIVE_CLASPATHと呼ばれる変数を見ません。

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; 

は今、私はハイブに接続し、次のコマンドによって、これらの2瓶の私のクラスパスに追加します。 - (彼らが正常に追加されます)

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; 

今、私はHIVEでテーブルを作成します。 -

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 

私は次のことを試してみました: - - missinことになっているクラス - 効果なし で可能なすべてのディレクトリにjarファイルを置きますgは、jarファイル内にかなり存在します。 - はい、MongoStorageHandlerクラスは非常にjarファイルです。

私はこれで自分の頭を壊してしまった!誰かが私の不安を和らげるためにできることをいくつか明かすことができれば、それは素晴らしいことでしょう。

もう一度おねがいします。 Mario

答えて

0

問題の内容を特定しました。 MongoDBのにHIVEから接続するには、MongoDBのドライバが使用するハイブのjarライブラリ でJavaクラスを呼び出す**

にjava.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.hooks.PreExecutePrinter

** このクラスは、jarファイル-hive-exec-0.11.0.1.3.2.0-111.jarにあります。しかし、HIVEのより新しいバージョンでのみ利用可能で、古いバージョンでは利用できません。

0.11.0.1.3.2.0-111では利用できませんが、0.13.0.2.1.7.0-784では目に見えます。

ここでの解決策は、ドライバがサポートしているバージョンのHIVEに接続することでした。 MongoDBは、そのドライバが特定のバージョンのHadoopをサポートしていると述べていますが、個々のアプリケーション(HIVE/SQOOP)までドリルダウンしません。

関連する問題