2016-10-14 81 views
0

我想獲得一個蜂房Hadoop的蒙戈的設置工作。我已經導入數據到MongoDB中從JSON文件,然後我創建了蜂巢連接到蒙戈內部和外部表:蜂巢崩潰的where子句

CREATE EXTERNAL TABLE reviews(
    user_id STRING, 
    review_id STRING, 
    stars INT, 
    date1 STRING, 
    text STRING, 
    type STRING, 
    business_id STRING 
    ) 
    STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler' 
    WITH SERDEPROPERTIES('mongo.columns.mapping'='{"date1":"date"}') 
    TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/test.reviews'); 

這部分工作得很好,因爲選擇的所有查詢(select * from reviews)喜歡它輸出的一切應該。但是,當我做一個有where子句(select * from reviews where stars=4例如)蜂巢崩潰。

我有,當我啓動蜂巢添加以下jar文件:

add jar mongo-hadoop.jar; 
add jar mongo-java-driver-3.3.0.jar; 
add jar mongo-hadoop-hive-2.0.1.jar; 

而如果是在任何意義上相關的,我使用Amazon的EMR集羣對於這一點,我通過ssh連接。

感謝所有幫助

以下是錯誤蜂巢拋出:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.exec.Utilities.deserializeExpression(Ljava/lang/String;)Lorg/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc; 
    at com.mongodb.hadoop.hive.input.HiveMongoInputFormat.getFilter(HiveMongoInputFormat.java:134) 
    at com.mongodb.hadoop.hive.input.HiveMongoInputFormat.getRecordReader(HiveMongoInputFormat.java:103) 
    at org.apache.hadoop.hive.ql.exec.FetchOperator$FetchInputFormatSplit.getRecordReader(FetchOperator.java:691) 
    at org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:329) 
    at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:455) 
    at org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:424) 
    at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:144) 
    at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1885) 
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:252) 
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:183) 
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:399) 
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:776) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:714) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:641) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

回答

0

克里特表像下面和檢查。

CREATE [EXTERNAL] TABLE <tablename> 
(<schema>) 
ROW FORMAT SERDE 'com.mongodb.hadoop.hive.BSONSerDe' 
[WITH SERDEPROPERTIES('mongo.columns.mapping'='<JSON mapping>')] 
STORED AS INPUTFORMAT 'com.mongodb.hadoop.mapred.BSONFileInputFormat' 
OUTPUTFORMAT 'com.mongodb.hadoop.hive.output.HiveBSONFileOutputFormat' 
[LOCATION '<path to existing directory>']; 

代替使用StorageHandler閱讀,序列化,反串行化,並輸出從蜂巢對象的數據到BSON對象,各個組分單獨列出。這是因爲使用StorageHandler與本地文件系統HDFS

+0

我現在收到此錯誤:'失敗:執行錯誤,從org.apache.hadoop.hive.ql.exec.DDLTask返回碼1。 MetaException(消息:GOT異常:java.io.IOException的無文件系統的方案:mongodb的)' – Jonathan

+0

在一個相關的說明,這將意味着,蜂巢將讀取的MongoDB轉儲文件,而不是直接查詢蒙戈? – Jonathan

0

打交道時,有太多的負面影響,我看到

WITH SERDEPROPERTIES('mongo.columns.mapping'='{"date1":"date"}') 

和您要查詢未映射列明星。

+0

該文件說,映射是可選的,但要確保我映射了一切。我仍然得到同樣的錯誤。 – Jonathan

0

我遇到了我們的集羣上這個probelem。

羣集配置單元的版本是比版本更高蒙戈蜂巢(這是1.2.1)

老班org.apache.hadoop.hive.ql.exec.Utilities.deserializeExpression已更名爲組織.apache.hadoop.hive.ql.exec.SerializationUtilities.deserializeExpression

您需要自己重建罐子。