2016-10-14 3 views
0

Я пытаюсь настроить улей-hadoop-mongo для работы. Я импортировал данные в MongoDB из файла JSON, то я создал как внутренние, так и внешние таблицы в улье, которые подключаются к Монго:Hive crashing on where clause

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 например), улей падает.

У меня есть следующие банки добавляются, когда я начинаю вверх ул:

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

И если это уместно, в каком-то смысле, я использую ЭЙ кластер Amazon для этого, и я подключен через 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

Я получаю эту ошибку сейчас: 'FAILED: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. MetaException (сообщение: Got exception: java.io.IOException Отсутствие файловой системы для схемы: mongodb) ' – Jonathan

+0

Что касается соответствующей заметки, означало бы это, что куст будет читать файлы дампа mongodb вместо запроса mongo напрямую? – Jonathan

0

Я вижу

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

и вы запрашиваете звезды столбцов, которые не сопоставляются.

+0

В документации указано, что сопоставление является необязательным, но я уверен, что я отобразил все. Я все равно получаю ту же ошибку. – Jonathan

0

Я встретил этот зонд на нашем кластере.

версия кластера улей выше, чем версия в Монго улья (что 1.2.1)

Старый класс org.apache.hadoop.hive.ql.exec.Utilities.deserializeExpression был переименован в орг .apache.hadoop.hive.ql.exec.SerializationUtilities.deserializeExpression

Вам необходимо перестроить банку самостоятельно.